summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--security/dirmngr/Makefile41
-rw-r--r--security/dirmngr/PLIST9
-rw-r--r--security/dirmngr/distinfo10
-rw-r--r--security/dirmngr/files/dirmngr72
-rw-r--r--security/dirmngr/files/runDirmngr.c172
-rw-r--r--security/dirmngr/patches/patch-aa44
-rw-r--r--security/dirmngr/patches/patch-ab14
-rw-r--r--security/dirmngr/patches/patch-ac13
8 files changed, 309 insertions, 66 deletions
diff --git a/security/dirmngr/Makefile b/security/dirmngr/Makefile
index d37287ed3d3..3d286d1174c 100644
--- a/security/dirmngr/Makefile
+++ b/security/dirmngr/Makefile
@@ -1,8 +1,8 @@
-# $NetBSD: Makefile,v 1.3 2004/11/05 22:12:17 jmmv Exp $
+# $NetBSD: Makefile,v 1.4 2005/01/04 13:40:38 shannonjr Exp $
#
-DISTNAME= dirmngr-0.5.6
-PKGREVISION= 2
+DISTNAME= dirmngr-0.9.0
+#PKGREVISION= 1
CATEGORIES= security
MASTER_SITES= ftp://ftp.gnupg.org/gcrypt/alpha/dirmngr/
@@ -10,15 +10,50 @@ MAINTAINER= shannonjr@NetBSD.org
HOMEPAGE= http://www.gnupg.org/aegypten2
COMMENT= X509 certificate and CRL downloader
+DIRMNGR_USER?= dirmngr
+DIRMNGR_GROUP?= dirmngr
+PKG_GROUPS= ${DIRMNGR_GROUP}
+PKG_USERS= ${DIRMNGR_USER}:${DIRMNGR_GROUP}::pseudo\\ user:${VARBASE}/dirmngr:
+
GNU_CONFIGURE= yes
USE_BUILDLINK3= yes
USE_GNU_TOOLS+= awk
+USE_PKGINSTALL= yes
USE_PKGLOCALEDIR= yes
+CONFIGURE_ARGS+= --localstatedir="${VARBASE}"
+CONFIGURE_ARGS+= --sharedstatedir="${VARBASE}"
CONFIGURE_ENV+= BUILDLINK_PREFIX_openldap=${BUILDLINK_PREFIX.openldap}
+SUBST_FILES+= VARBASE=${VARBASE}
+SUBST_FILES+= PREFIX=${PREFIX}
+SUBST_FILES+= SYSCONFDIR=${SYSCONFDIR}
+SUBST_FILES+= DIRMNGR_USER=${DIRMNGR_USER}
+SUBST_FILES+= DIRMNGR_PATH=${DIRMNGR_PATH}
+
+pre-build:
+ ${CP} ${FILESDIR}/runDirmngr.c ${WRKDIR}/runDirmngr.c
+
+post-build:
+ cd ${WRKDIR} && \
+ ${SETENV} ${BUILDENV} ${CC} ${CFLAGS} -DDIRMNGR_USER='"${DIRMNGR_USER}"' -DDIRMNGR_PATH='"${PREFIX}/bin/dirmngr"' -o runDirmngr runDirmngr.c
+
+pre-install:
+ ${INSTALL_DATA_DIR} ${VARBASE}/dirmngr/cache
+ ${INSTALL_DATA_DIR} ${PREFIX}/libdata/dirmngr
+ ${INSTALL_DATA_DIR} ${PKG_SYSCONFDIR}/dirmngr/trusted-certs
+ ${INSTALL_DATA_DIR} ${PREFIX}/libdata/dirmngr/extra-certs
+ ${CHOWN} -R ${DIRMNGR_USER}:${DIRMNGR_GROUP} ${VARBASE}/dirmngr
+ ${CHOWN} -R ${DIRMNGR_USER}:${DIRMNGR_GROUP} ${PREFIX}/libdata/dirmngr
+
+post-install:
+ @${SED} ${FILES_SUBST_SED} ${FILESDIR}/dirmngr > ${WRKDIR}/dirmngr
+ ${INSTALL_SCRIPT} ${WRKDIR}/dirmngr ${PREFIX}/${RCD_SCRIPTS_EXAMPLEDIR}/dirmngr
+ ${INSTALL_PROGRAM} ${WRKDIR}/runDirmngr ${PREFIX}/sbin
+
INFO_FILES= dirmngr.info
+.include "../../devel/pth/buildlink3.mk"
.include "../../converters/libiconv/buildlink3.mk"
.include "../../databases/openldap/buildlink3.mk"
.include "../../devel/gettext-lib/buildlink3.mk"
diff --git a/security/dirmngr/PLIST b/security/dirmngr/PLIST
index 2fc142f63bf..e31cc857f80 100644
--- a/security/dirmngr/PLIST
+++ b/security/dirmngr/PLIST
@@ -1,3 +1,10 @@
-@comment $NetBSD: PLIST,v 1.2 2004/11/05 22:12:17 jmmv Exp $
+@comment $NetBSD: PLIST,v 1.3 2005/01/04 13:40:38 shannonjr Exp $
bin/dirmngr
+bin/dirmngr-client
+libexec/dirmngr_ldap
+sbin/runDirmngr
+share/examples/rc.d/dirmngr
${PKGLOCALEDIR}/locale/de/LC_MESSAGES/dirmngr.mo
+@exec ${MKDIR} %D/libdata/dirmngr/extra-certs
+@dirrm libdata/dirmngr/extra-certs
+@dirrm libdata/dirmngr
diff --git a/security/dirmngr/distinfo b/security/dirmngr/distinfo
index 9dc40625427..899a7249b1c 100644
--- a/security/dirmngr/distinfo
+++ b/security/dirmngr/distinfo
@@ -1,7 +1,5 @@
-$NetBSD: distinfo,v 1.3 2004/11/05 22:12:17 jmmv Exp $
+$NetBSD: distinfo,v 1.4 2005/01/04 13:40:38 shannonjr Exp $
-SHA1 (dirmngr-0.5.6.tar.gz) = 584ee44d60b9385fcf0d0afa08f801fd05eba968
-Size (dirmngr-0.5.6.tar.gz) = 516196 bytes
-SHA1 (patch-aa) = 02dd8cf8224650a61d07b8353761fe51a70f5d47
-SHA1 (patch-ab) = 84b9266877b312aed33bd99fb1e509c92a73045b
-SHA1 (patch-ac) = ce9fd0eb7c095ff1494a00dd7606a039bb83928f
+SHA1 (dirmngr-0.9.0.tar.gz) = 46dc0704abb5320465c9176d0dcc5eeafc0880fe
+Size (dirmngr-0.9.0.tar.gz) = 568366 bytes
+SHA1 (patch-aa) = f3b4c18afa24ba7838876e46c0084502c7656f4b
diff --git a/security/dirmngr/files/dirmngr b/security/dirmngr/files/dirmngr
new file mode 100644
index 00000000000..7724f8daa5c
--- /dev/null
+++ b/security/dirmngr/files/dirmngr
@@ -0,0 +1,72 @@
+#!@RCD_SCRIPTS_SHELL@
+#
+# $NetBSD: dirmngr,v 1.1 2005/01/04 13:40:38 shannonjr Exp $
+#
+# PROVIDE: dirmngr
+# REQUIRE: DAEMON
+#
+
+if [ -f @PKG_SYSCONFDIR@/rc.subr ]; then
+ . @PKG_SYSCONFDIR@/rc.subr
+fi
+
+name="dirmngr"
+rcvar="${name}"
+dirmngr_user="dirmngr"
+dirmngr_group="dirmngr"
+dirmngr_flags="--daemon"
+dirmngr_command="@PREFIX@/sbin/runDirmngr"
+start_precmd="dirmngr_precmd"
+start_cmd="dirmngr_start"
+start_postcmd="dirmngr_postcmd"
+stop_cmd="dirmngr_stop"
+required_dirs="@PKG_SYSCONFDIR@/dirmngr"
+required_files="@PKG_SYSCONFDIR@/dirmngr/ldapservers.conf"
+
+dirmngr_precmd()
+{
+ mkdir -p @VARBASE@/run/dirmngr
+ chgrp dirmngr @VARBASE@/run/dirmngr
+ chmod 775 @VARBASE@/run/dirmngr
+ mkdir -p /tmp/dirmngr
+ chgrp dirmngr /tmp/dirmngr
+ chmod 755 /tmp/dirmngr
+}
+
+dirmngr_start()
+{
+ for _f in $required_dirs; do
+ if [ ! -d "${_f}/." ]; then
+ warn "${_f} is not a directory."
+ if [ -z $rc_force ]; then
+ return 1
+ fi
+ fi
+ done
+ for _f in $required_files; do
+ if [ ! -r "${_f}" ]; then
+ warn "${_f} is not readable."
+ if [ -z $rc_force ]; then
+ return 1
+ fi
+ fi
+ done
+ eval `${dirmngr_command} ${rc_flags}`
+}
+
+dirmngr_postcmd()
+{
+ echo ${DIRMNGR_INFO} >/tmp/dirmngr/dirmngr.info
+ chmod 644 /tmp/dirmngr/dirmngr.info
+ dirmngr_pid=`cut -f 2 -d ':' /tmp/dirmngr/dirmngr.info`
+}
+
+dirmngr_stop()
+{
+ if [ -f /tmp/dirmngr/dirmngr.info ] ; then
+ kill `cut -f 2 -d ':' /tmp/dirmngr/dirmngr.info`
+ fi
+}
+
+load_rc_config $name
+run_rc_command "$1"
diff --git a/security/dirmngr/files/runDirmngr.c b/security/dirmngr/files/runDirmngr.c
new file mode 100644
index 00000000000..6c4f21ed8f9
--- /dev/null
+++ b/security/dirmngr/files/runDirmngr.c
@@ -0,0 +1,172 @@
+/*
+ Spawns dirmngr with UID and GID with a specific UID and GID.
+ The path for dirmngr is specified by the compiled-in definition
+ DIRMNGR_USER, normally passed as a compiler argument:
+
+ `-D DIRMNGR_USER=DEFINITION'
+
+ The UID and GID are the uid and gid for user DIRMNGR_USER.
+ DIRMNGR_USER is normally defined through a compiler argument
+ also.
+*/
+
+
+#include <unistd.h>
+#include <string.h>
+#include <stdio.h>
+#include <errno.h>
+#include <stdlib.h>
+#include <sys/wait.h>
+#include <pwd.h>
+#include <syslog.h>
+
+#define MAX_ARGS 40
+#ifndef TRUE
+#define TRUE 1
+#endif /* TRUE */
+
+#ifndef FALSE
+#define FALSE 0
+#endif /* FALSE */
+
+
+void error_sys(char *str)
+
+{
+ /* Output error message to syslog */
+ char msg[1024];
+ snprintf(msg, sizeof(msg), "runDirmngr : %s : %s", str, strerror(errno));
+ syslog(LOG_ALERT, msg);
+
+}
+
+
+int obtainUIDandGID(const char *name, uid_t *pw_uid, gid_t *pw_gid)
+{
+ /* Obtain UID and GID from passwd entry identified by name */
+ struct passwd *pw_entry;
+ char msg[100];
+
+ if ((pw_entry = getpwnam(name)) == NULL)
+ {
+ snprintf(msg, sizeof(msg), "failed to get password entry for %s", name);
+ error_sys(msg);
+ return FALSE;
+ }
+ else
+ {
+ *pw_uid = pw_entry->pw_uid;
+ *pw_gid = pw_entry->pw_gid;
+ return TRUE;
+
+ }
+}
+
+
+
+
+int main (int argc, char **argv )
+
+{
+
+ pid_t pid;
+ uid_t UID;
+ gid_t GID;
+ pid_t pidwait;
+ int waitstat;
+
+ /* Sanity check */
+ if (argc > MAX_ARGS)
+ {
+ error_sys("arg buffer too small");
+ exit(-1);
+ }
+/*
+ if (getpid() != 0)
+ {
+ error_sys("must be called by root");
+ exit(-1);
+ }
+*/
+
+ /* fork child that will become dirmngr */
+ if ((pid = fork()) < 0)
+
+ error_sys("fork error");
+
+ else
+
+ {
+
+ if (pid == 0)
+
+ {
+
+ /* We're the child */
+
+ if (!obtainUIDandGID(DIRMNGR_USER, &UID, &GID))
+ exit(-1);
+
+ /* Drop privileges immediately */
+ if (setgid(GID) < 0)
+ {
+ /* It is VERY important to check return
+ value and not continue if setgid fails
+ */
+ error_sys ("setgid failed");
+ exit (-1);
+ }
+
+ if (setuid(UID) < 0)
+ {
+ /* It is VERY important to check return
+ value and not continue if setuid fails
+ */
+ error_sys ("setuid failed");
+ exit (-1);
+ }
+
+ /* Build calling argv */
+ char *args[MAX_ARGS];
+ unsigned int i;
+ args[0] = DIRMNGR_PATH;
+ for (i=1;i<argc;i++)
+ {
+ args[i] = argv[i];
+ }
+ args[i++] = NULL;
+
+ /* Finally transform self into dirmngr */
+ if (execvp(DIRMNGR_PATH, args) < 0)
+ error_sys("execve error");
+ else
+ ; /* avoid if-then ambiguity */
+ }
+
+ else
+
+ {
+ /* We're the parent
+ Wait for child to terminate
+ */
+ pidwait = waitpid(pid, &waitstat, 0);
+ switch (pidwait) {
+ case 0: exit(0);
+ case -1:
+ perror(strerror(errno));
+ exit(-1);
+ default:
+ if (WIFEXITED(waitstat)) {
+ exit(WEXITSTATUS(waitstat));
+ }
+ else
+ {
+ exit(-1);
+ }
+ }
+
+ }
+
+ }
+
+}
diff --git a/security/dirmngr/patches/patch-aa b/security/dirmngr/patches/patch-aa
index 00e556bc5be..28bb9070439 100644
--- a/security/dirmngr/patches/patch-aa
+++ b/security/dirmngr/patches/patch-aa
@@ -1,31 +1,17 @@
-$NetBSD: patch-aa,v 1.2 2004/11/05 22:12:17 jmmv Exp $
+$NetBSD: patch-aa,v 1.3 2005/01/04 13:40:38 shannonjr Exp $
---- configure.orig 2004-09-28 14:37:56.000000000 +0200
-+++ configure
-@@ -10934,7 +10934,7 @@ else
- fi;
- if test "x$with_ldap" = "xCHECK" ; then
- with_ldap=NOTFOUND
-- search_incs="$kde_includes /usr/include /usr/local/include"
-+ search_incs="${BUILDLINK_PREFIX_openldap}/include"
+--- src/Makefile.in.orig 2004-12-17 03:35:04.000000000 -0700
++++ src/Makefile.in
+@@ -259,9 +259,9 @@ localedir = $(datadir)/locale
+ EXTRA_DIST = Manifest
+ AM_CPPFLAGS = -DLOCALEDIR=\"$(localedir)\" \
+ -DDIRMNGR_SYSCONFDIR="\"$(sysconfdir)/@PACKAGE@\"" \
+- -DDIRMNGR_LIBEXECDIR="\"$(libexecdir)\"" \
+- -DDIRMNGR_DATADIR="\"$(localstatedir)/lib/@PACKAGE@\"" \
+- -DDIRMNGR_CACHEDIR="\"$(localstatedir)/cache/@PACKAGE@\""
++ -DDIRMNGR_LIBEXECDIR="\"$(libexecdir)/@PACKAGE@\"" \
++ -DDIRMNGR_DATADIR="\"$(prefix)/libdata/@PACKAGE@\"" \
++ -DDIRMNGR_CACHEDIR="\"$(localstatedir)/@PACKAGE@/cache\""
+ AM_CFLAGS = -I$(top_srcdir)/jnlib @LIBGCRYPT_CFLAGS@ @LIBASSUAN_CFLAGS@ \
+ @KSBA_CFLAGS@ @GPG_ERROR_CFLAGS@ $(PTH_CFLAGS)
- ldap_incdir=NO
- for i in $search_incs;
-@@ -10959,7 +10959,7 @@ done
- for ext in la so sl a ; do
-
- ldap_libdir=NO
--for i in /usr/lib /usr/local/lib;
-+for i in ${BUILDLINK_PREFIX_openldap}/lib
- do
- for j in libldap.$ext;
- do
-@@ -11290,7 +11290,7 @@ _ACEOF
- fi
-
-
--for ac_header in string.h
-+for ac_header in locale.h string.h
- do
- as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
- if eval "test \"\${$as_ac_Header+set}\" = set"; then
diff --git a/security/dirmngr/patches/patch-ab b/security/dirmngr/patches/patch-ab
deleted file mode 100644
index 9f3a58336e3..00000000000
--- a/security/dirmngr/patches/patch-ab
+++ /dev/null
@@ -1,14 +0,0 @@
-$NetBSD: patch-ab,v 1.1 2004/11/04 20:57:06 shannonjr Exp $
-
---- src/http.c.orig 2004-04-02 11:05:19.000000000 -0700
-+++ src/http.c
-@@ -456,8 +456,7 @@ send_request (http_t hd)
- server = *hd->uri->host ? hd->uri->host : "localhost";
- port = hd->uri->port ? hd->uri->port : 80;
-
-- if ((hd->flags & HTTP_FLAG_TRY_PROXY)
-- && (http_proxy = getenv (HTTP_PROXY_ENV)))
-+ if (http_proxy = getenv (HTTP_PROXY_ENV))
- {
- parsed_uri_t uri;
-
diff --git a/security/dirmngr/patches/patch-ac b/security/dirmngr/patches/patch-ac
deleted file mode 100644
index aed6e8ca293..00000000000
--- a/security/dirmngr/patches/patch-ac
+++ /dev/null
@@ -1,13 +0,0 @@
-$NetBSD: patch-ac,v 1.1 2004/11/05 22:12:17 jmmv Exp $
-
---- doc/dirmngr.info.orig 2004-09-28 14:38:38.000000000 +0200
-+++ doc/dirmngr.info
-@@ -3,7 +3,7 @@ dirmngr.texi.
-
- INFO-DIR-SECTION GNU Utilities
- START-INFO-DIR-ENTRY
--* dirmngr: (gnupg). X.509 CRL and OCSP server.
-+* dirmngr: (dirmngr). X.509 CRL and OCSP server.
- END-INFO-DIR-ENTRY
- This file documents the use of dirmngr.
-