From fd6ea0f064fc73c0ceeb08df3f96a748757b3a71 Mon Sep 17 00:00:00 2001 From: drochner Date: Mon, 8 Aug 2005 09:47:42 +0000 Subject: import nss_ldap-239, an nsswitch plugin for LDAP lookup (passwd and group for now) --- databases/nss_ldap/DESCR | 4 + databases/nss_ldap/Makefile | 23 ++ databases/nss_ldap/PLIST | 5 + databases/nss_ldap/distinfo | 8 + databases/nss_ldap/files/netbsd.c | 447 ++++++++++++++++++++++++++++++++++++ databases/nss_ldap/files/netbsd.h | 12 + databases/nss_ldap/patches/patch-ab | 12 + databases/nss_ldap/patches/patch-af | 30 +++ databases/nss_ldap/patches/patch-ag | 12 + 9 files changed, 553 insertions(+) create mode 100644 databases/nss_ldap/DESCR create mode 100644 databases/nss_ldap/Makefile create mode 100644 databases/nss_ldap/PLIST create mode 100644 databases/nss_ldap/distinfo create mode 100644 databases/nss_ldap/files/netbsd.c create mode 100644 databases/nss_ldap/files/netbsd.h create mode 100644 databases/nss_ldap/patches/patch-ab create mode 100644 databases/nss_ldap/patches/patch-af create mode 100644 databases/nss_ldap/patches/patch-ag (limited to 'databases/nss_ldap') diff --git a/databases/nss_ldap/DESCR b/databases/nss_ldap/DESCR new file mode 100644 index 00000000000..b745da37611 --- /dev/null +++ b/databases/nss_ldap/DESCR @@ -0,0 +1,4 @@ +This is the nss_ldap library, an LDAP module for the Solaris Nameservice +Switch (NSS), the GNU libc NSS, and the ISC BIND IRS (used on BSDI +and IRS). +The LDAP schema used is described in RFC 2307 diff --git a/databases/nss_ldap/Makefile b/databases/nss_ldap/Makefile new file mode 100644 index 00000000000..aae98e6b00d --- /dev/null +++ b/databases/nss_ldap/Makefile @@ -0,0 +1,23 @@ +# $NetBSD: Makefile,v 1.1.1.1 2005/08/08 09:47:42 drochner Exp $ +# + +DISTNAME= nss_ldap-239 +CATEGORIES= databases +MASTER_SITES= http://www.padl.com/download/ + +MAINTAINER= tech-pkg@NetBSD.org +HOMEPAGE= http://www.padl.com/OSS/nss_ldap.html +COMMENT= LDAP client for nsswitch + +GNU_CONFIGURE= yes +USE_TOOLS+= gmake + +CONFIGURE_ARGS+= --with-ldap-conf-file=/etc/nss_ldap.conf +CONFIGURE_ARGS+= --with-ldap-secret-file=/etc/nss_ldap.secret + +pre-build: + ${CP} ${FILESDIR}/netbsd.c ${FILESDIR}/netbsd.h ${WRKSRC} + ${LN} -s /usr/include/nsswitch.h ${BUILDLINK_DIR}/include/nss.h + +.include "../../databases/openldap/buildlink3.mk" +.include "../../mk/bsd.pkg.mk" diff --git a/databases/nss_ldap/PLIST b/databases/nss_ldap/PLIST new file mode 100644 index 00000000000..73aa0439ed8 --- /dev/null +++ b/databases/nss_ldap/PLIST @@ -0,0 +1,5 @@ +@comment $NetBSD: PLIST,v 1.1.1.1 2005/08/08 09:47:42 drochner Exp $ +etc/nsswitch.ldap +lib/nss_ldap.so +lib/nss_ldap.so.1 +man/man5/nss_ldap.5 diff --git a/databases/nss_ldap/distinfo b/databases/nss_ldap/distinfo new file mode 100644 index 00000000000..f51fef534d0 --- /dev/null +++ b/databases/nss_ldap/distinfo @@ -0,0 +1,8 @@ +$NetBSD: distinfo,v 1.1.1.1 2005/08/08 09:47:42 drochner Exp $ + +SHA1 (nss_ldap-239.tar.gz) = beee30b433a01dccd863e7a0cdb7fe87cefda7fd +RMD160 (nss_ldap-239.tar.gz) = 525ed402ef5959a2740a7539c309c478a4765381 +Size (nss_ldap-239.tar.gz) = 222276 bytes +SHA1 (patch-ab) = 01493e92ffff0125dd3267810ee33cdeaab32ab2 +SHA1 (patch-af) = 54251bd1798ce4137760b8a84997cbe23e5f1fa0 +SHA1 (patch-ag) = 95741f39fb03195b3238d4f9c24360049fdd3698 diff --git a/databases/nss_ldap/files/netbsd.c b/databases/nss_ldap/files/netbsd.c new file mode 100644 index 00000000000..f7b7110299e --- /dev/null +++ b/databases/nss_ldap/files/netbsd.c @@ -0,0 +1,447 @@ +/* $NetBSD: netbsd.c,v 1.1.1.1 2005/08/08 09:47:42 drochner Exp $ */ + +#include +#include +#include +#include +#include +#include + +#include "netbsd.h" +typedef enum nss_status NSS_STATUS; + +extern NSS_STATUS _nss_ldap_setpwent(void); +static int netbsd_setpwent(void *, void *, va_list); +static int netbsd_setpassent(void *, void *, va_list); +extern NSS_STATUS _nss_ldap_endpwent(void); +static int netbsd_endpwent(void *, void *, va_list); +extern NSS_STATUS _nss_ldap_getpwent_r(struct passwd *, + char *, size_t, int *); +static int netbsd_getpwent(void *, void *, va_list); +static int netbsd_getpwent_r(void *, void *, va_list); +extern NSS_STATUS _nss_ldap_getpwnam_r(const char *, struct passwd *, + char *, size_t, int *); +static int netbsd_getpwnam(void *, void *, va_list); +static int netbsd_getpwnam_r(void *, void *, va_list); +extern NSS_STATUS _nss_ldap_getpwuid_r(uid_t, struct passwd *, + char *, size_t, int *); +static int netbsd_getpwuid(void *, void *, va_list); +static int netbsd_getpwuid_r(void *, void *, va_list); + +extern NSS_STATUS _nss_ldap_setgrent(void); +static int netbsd_setgrent(void *, void *, va_list); +static int netbsd_setgroupent(void *, void *, va_list); +extern NSS_STATUS _nss_ldap_endgrent(void); +static int netbsd_endgrent(void *, void *, va_list); +extern NSS_STATUS _nss_ldap_getgrent_r(struct group *, + char *, size_t, int *); +static int netbsd_getgrent(void *, void *, va_list); +static int netbsd_getgrent_r(void *, void *, va_list); +extern NSS_STATUS _nss_ldap_getgrnam_r(const char *, struct group *, + char *, size_t, int *); +static int netbsd_getgrnam(void *, void *, va_list); +static int netbsd_getgrnam_r(void *, void *, va_list); +extern NSS_STATUS _nss_ldap_getgrgid_r(gid_t, struct group *, + char *, size_t, int *); +static int netbsd_getgrgid(void *, void *, va_list); +static int netbsd_getgrgid_r(void *, void *, va_list); + +static int nss2netbsderr[] = { + NS_SUCCESS, NS_NOTFOUND, NS_UNAVAIL, NS_TRYAGAIN, NS_RETURN +}; +static struct passwd rpw; +static struct group rg; +static char pwbuf[1024], grpbuf[1024]; /* two necessary? */ + +static ns_mtab methods[] = { + { NSDB_PASSWD, "setpwent", netbsd_setpwent, 0 }, + { NSDB_PASSWD, "setpassent", netbsd_setpassent, 0 }, + { NSDB_PASSWD, "endpwent", netbsd_endpwent, 0 }, + { NSDB_PASSWD, "getpwent", netbsd_getpwent, 0 }, + { NSDB_PASSWD, "getpwent_r", netbsd_getpwent_r, 0 }, + { NSDB_PASSWD, "getpwnam", netbsd_getpwnam, 0 }, + { NSDB_PASSWD, "getpwnam_r", netbsd_getpwnam_r, 0 }, + { NSDB_PASSWD, "getpwuid", netbsd_getpwuid, 0 }, + { NSDB_PASSWD, "getpwuid_r", netbsd_getpwuid_r, 0 }, + + { NSDB_GROUP, "setgrent", netbsd_setgrent, 0 }, + { NSDB_GROUP, "setgroupent", netbsd_setgroupent, 0 }, + { NSDB_GROUP, "endgrent", netbsd_endgrent, 0 }, + { NSDB_GROUP, "getgrent", netbsd_getgrent, 0 }, + { NSDB_GROUP, "getgrent_r", netbsd_getgrent_r, 0 }, + { NSDB_GROUP, "getgrnam", netbsd_getgrnam, 0 }, + { NSDB_GROUP, "getgrnam_r", netbsd_getgrnam_r, 0 }, + { NSDB_GROUP, "getgrgid", netbsd_getgrgid, 0 }, + { NSDB_GROUP, "getgrgid_r", netbsd_getgrgid_r, 0 }, +}; + +static int +netbsd_setpwent(void *rv, void *cb_data, va_list ap) +{ + NSS_STATUS s; + + s = _nss_ldap_setpwent(); + + return nss2netbsderr[s]; +} + +static int +netbsd_setpassent(void *rv, void *cb_data, va_list ap) +{ + NSS_STATUS s; + int *retval = va_arg(ap, int *); + int stayopen = va_arg(ap, int); + + /* XXX stayopen ignored */ + s = _nss_ldap_setpwent(); + + if (s == NSS_STATUS_SUCCESS) + *retval = 1; + else + *retval = 0; + + return nss2netbsderr[s]; +} + +static int +netbsd_endpwent(void *rv, void *cb_data, va_list ap) +{ + NSS_STATUS s; + + s = _nss_ldap_endpwent(); + + return nss2netbsderr[s]; +} + +static int +netbsd_getpwent(void *rv, void *cb_data, va_list ap) +{ + int err; + NSS_STATUS s; + struct passwd **retval = va_arg(ap, struct passwd **); + + memset(&rpw, 0, sizeof(rpw)); + s = _nss_ldap_getpwent_r(&rpw, pwbuf, sizeof(pwbuf), &err); + + if (s == NSS_STATUS_SUCCESS) { + rpw.pw_class = ""; /* XXX */ + *retval = &rpw; + } else + *retval = 0; + + return nss2netbsderr[s]; +} + +static int +netbsd_getpwent_r(void *rv, void *cb_data, va_list ap) +{ + int err; + NSS_STATUS s; + int *retval = va_arg(ap, int *); + struct passwd *pw = va_arg(ap, struct passwd *); + char *buf = va_arg(ap, char *); + size_t buflen = va_arg(ap, size_t); + struct passwd **result = va_arg(ap, struct passwd **); + + memset(pw, 0, sizeof(*pw)); + s = _nss_ldap_getpwent_r(pw, buf, buflen, &err); + + if (s == NSS_STATUS_SUCCESS) { + pw->pw_class = ""; /* XXX */ + *result = pw; + } else + *result = 0; + + if (s == NSS_STATUS_SUCCESS || s == NSS_STATUS_NOTFOUND) + *retval = 0; + else + *retval = 1; + + return nss2netbsderr[s]; +} + +static int +netbsd_getpwnam(void *rv, void *cb_data, va_list ap) +{ + int err; + NSS_STATUS s; + struct passwd **retval = va_arg(ap, struct passwd **); + const char *name = va_arg(ap, const char *); + + memset(&rpw, 0, sizeof(rpw)); + s = _nss_ldap_getpwnam_r(name, &rpw, pwbuf, sizeof(pwbuf), &err); + + if (s == NSS_STATUS_SUCCESS) { + rpw.pw_class = ""; /* XXX */ + *retval = &rpw; + } else + *retval = 0; + + return nss2netbsderr[s]; +} + +static int +netbsd_getpwnam_r(void *rv, void *cb_data, va_list ap) +{ + int err; + NSS_STATUS s; + int *retval = va_arg(ap, int *); + const char *name = va_arg(ap, const char *); + struct passwd *pw = va_arg(ap, struct passwd *); + char *buf = va_arg(ap, char *); + size_t buflen = va_arg(ap, size_t); + struct passwd **result = va_arg(ap, struct passwd **); + + memset(pw, 0, sizeof(*pw)); + s = _nss_ldap_getpwnam_r(name, pw, buf, buflen, &err); + + if (s == NSS_STATUS_SUCCESS) { + pw->pw_class = ""; /* XXX */ + *result = pw; + } else + *result = 0; + + if (s == NSS_STATUS_SUCCESS || s == NSS_STATUS_NOTFOUND) + *retval = 0; + else + *retval = 1; + + return nss2netbsderr[s]; +} + +static int +netbsd_getpwuid(void *rv, void *cb_data, va_list ap) +{ + int err; + NSS_STATUS s; + struct passwd **retval = va_arg(ap, struct passwd **); + uid_t uid = va_arg(ap, uid_t); + + memset(&rpw, 0, sizeof(rpw)); + s = _nss_ldap_getpwuid_r(uid, &rpw, pwbuf, sizeof(pwbuf), &err); + + if (s == NSS_STATUS_SUCCESS) { + rpw.pw_class = ""; /* XXX */ + *retval = &rpw; + } else + *retval = 0; + + return nss2netbsderr[s]; +} + +static int +netbsd_getpwuid_r(void *rv, void *cb_data, va_list ap) +{ + int err; + NSS_STATUS s; + int *retval = va_arg(ap, int *); + uid_t uid = va_arg(ap, uid_t); + struct passwd *pw = va_arg(ap, struct passwd *); + char *buf = va_arg(ap, char *); + size_t buflen = va_arg(ap, size_t); + struct passwd **result = va_arg(ap, struct passwd **); + + memset(pw, 0, sizeof(*pw)); + s = _nss_ldap_getpwuid_r(uid, pw, buf, buflen, &err); + + if (s == NSS_STATUS_SUCCESS) { + pw->pw_class = ""; /* XXX */ + *result = pw; + } else + *result = 0; + + if (s == NSS_STATUS_SUCCESS || s == NSS_STATUS_NOTFOUND) + *retval = 0; + else + *retval = 1; + + return nss2netbsderr[s]; +} + + +static int +netbsd_setgrent(void *rv, void *cb_data, va_list ap) +{ + NSS_STATUS s; + + s = _nss_ldap_setgrent(); + + return nss2netbsderr[s]; +} + +static int +netbsd_setgroupent(void *rv, void *cb_data, va_list ap) +{ + NSS_STATUS s; + int *retval = va_arg(ap, int *); + int stayopen = va_arg(ap, int); + + /* XXX stayopen ignored */ + s = _nss_ldap_setgrent(); + + if (s == NSS_STATUS_SUCCESS) + *retval = 1; + else + *retval = 0; + + return nss2netbsderr[s]; +} + +static int +netbsd_endgrent(void *rv, void *cb_data, va_list ap) +{ + NSS_STATUS s; + + s = _nss_ldap_endgrent(); + + return nss2netbsderr[s]; +} + +static int +netbsd_getgrent(void *rv, void *cb_data, va_list ap) +{ + int err; + NSS_STATUS s; + struct group **retval = va_arg(ap, struct group **); + + memset(&rg, 0, sizeof(rg)); + s = _nss_ldap_getgrent_r(&rg, grpbuf, sizeof(grpbuf), &err); + + if (s == NSS_STATUS_SUCCESS) + *retval = &rg; + else + *retval = 0; + + return nss2netbsderr[s]; +} + +static int +netbsd_getgrent_r(void *rv, void *cb_data, va_list ap) +{ + int err; + NSS_STATUS s; + int *retval = va_arg(ap, int *); + struct group *grp = va_arg(ap, struct group *); + char *buf = va_arg(ap, char *); + size_t buflen = va_arg(ap, size_t); + struct group **result = va_arg(ap, struct group **); + + memset(grp, 0, sizeof(*grp)); + s = _nss_ldap_getgrent_r(grp, buf, buflen, &err); + + if (s == NSS_STATUS_SUCCESS) + *result = grp; + else + *result = 0; + + if (s == NSS_STATUS_SUCCESS || s == NSS_STATUS_NOTFOUND) + *retval = 0; + else + *retval = 1; + + return nss2netbsderr[s]; +} + +static int +netbsd_getgrnam(void *rv, void *cb_data, va_list ap) +{ + int err; + NSS_STATUS s; + struct group **retval = va_arg(ap, struct group **); + const char *name = va_arg(ap, const char *); + + memset(&rg, 0, sizeof(rg)); + s = _nss_ldap_getgrnam_r(name, &rg, grpbuf, sizeof(grpbuf), &err); + + if (s == NSS_STATUS_SUCCESS) + *retval = &rg; + else + *retval = 0; + + return nss2netbsderr[s]; +} + +static int +netbsd_getgrnam_r(void *rv, void *cb_data, va_list ap) +{ + int err; + NSS_STATUS s; + int *retval = va_arg(ap, int *); + const char *name = va_arg(ap, const char *); + struct group *grp = va_arg(ap, struct group *); + char *buf = va_arg(ap, char *); + size_t buflen = va_arg(ap, size_t); + struct group **result = va_arg(ap, struct group **); + + memset(grp, 0, sizeof(*grp)); + s = _nss_ldap_getgrnam_r(name, grp, buf, buflen, &err); + + if (s == NSS_STATUS_SUCCESS) + *result = grp; + else + *result = 0; + + if (s == NSS_STATUS_SUCCESS || s == NSS_STATUS_NOTFOUND) + *retval = 0; + else + *retval = 1; + + return nss2netbsderr[s]; +} + +static int +netbsd_getgrgid(void *rv, void *cb_data, va_list ap) +{ + int err; + NSS_STATUS s; + struct group **retval = va_arg(ap, struct group **); + gid_t gid = va_arg(ap, gid_t); + + memset(&rg, 0, sizeof(rg)); + s = _nss_ldap_getgrgid_r(gid, &rg, grpbuf, sizeof(grpbuf), &err); + + if (s == NSS_STATUS_SUCCESS) + *retval = &rg; + else + *retval = 0; + + return nss2netbsderr[s]; +} + +static int +netbsd_getgrgid_r(void *rv, void *cb_data, va_list ap) +{ + int err; + NSS_STATUS s; + int *retval = va_arg(ap, int *); + gid_t gid = va_arg(ap, gid_t); + struct group *grp = va_arg(ap, struct group *); + char *buf = va_arg(ap, char *); + size_t buflen = va_arg(ap, size_t); + struct group **result = va_arg(ap, struct group **); + + memset(grp, 0, sizeof(*grp)); + s = _nss_ldap_getgrgid_r(gid, grp, buf, buflen, &err); + + if (s == NSS_STATUS_SUCCESS) + *result = grp; + else + *result = 0; + + if (s == NSS_STATUS_SUCCESS || s == NSS_STATUS_NOTFOUND) + *retval = 0; + else + *retval = 1; + + return nss2netbsderr[s]; +} + + +ns_mtab * +nss_module_register(const char *source, unsigned int *mtabsize, + nss_module_unregister_fn *unreg) +{ + *mtabsize = sizeof(methods)/sizeof(methods[0]); + *unreg = NULL; + return (methods); +} diff --git a/databases/nss_ldap/files/netbsd.h b/databases/nss_ldap/files/netbsd.h new file mode 100644 index 00000000000..e7b99067d29 --- /dev/null +++ b/databases/nss_ldap/files/netbsd.h @@ -0,0 +1,12 @@ +/* $NetBSD: netbsd.h,v 1.1.1.1 2005/08/08 09:47:42 drochner Exp $ */ + +#undef HAVE_NSSWITCH_H +#define HAVE_NSS_H + +enum nss_status { + NSS_STATUS_SUCCESS, + NSS_STATUS_NOTFOUND, + NSS_STATUS_UNAVAIL, + NSS_STATUS_TRYAGAIN, + NSS_STATUS_RETURN +}; diff --git a/databases/nss_ldap/patches/patch-ab b/databases/nss_ldap/patches/patch-ab new file mode 100644 index 00000000000..32d5d853b31 --- /dev/null +++ b/databases/nss_ldap/patches/patch-ab @@ -0,0 +1,12 @@ +$NetBSD: patch-ab,v 1.1.1.1 2005/08/08 09:47:42 drochner Exp $ + +--- ldap-nss.c.orig 2005-07-26 23:00:16.000000000 +0200 ++++ ldap-nss.c +@@ -33,6 +33,7 @@ static char rcsId[] = + #include + #endif + ++#include /* for PATH_MAX */ + #include + #include + #include diff --git a/databases/nss_ldap/patches/patch-af b/databases/nss_ldap/patches/patch-af new file mode 100644 index 00000000000..2cf5b2226fa --- /dev/null +++ b/databases/nss_ldap/patches/patch-af @@ -0,0 +1,30 @@ +$NetBSD: patch-af,v 1.1.1.1 2005/08/08 09:47:42 drochner Exp $ + +--- Makefile.in.orig 2005-05-24 02:53:19.000000000 +0200 ++++ Makefile.in +@@ -75,14 +75,14 @@ nss_ldap_so_LD = @nss_ldap_so_LD@ + noinst_PROGRAMS = nss_ldap.so $(authmod) + INST_UID = root + @AIX_TRUE@INST_GID = system +-@AIX_FALSE@INST_GID = root ++@AIX_FALSE@INST_GID = wheel + + EXTRA_DIST = CVSVersionInfo.txt ChangeLog AUTHORS ANNOUNCE NEWS INSTALL README LICENSE.OpenLDAP COPYING ldap.conf nss_ldap.spec nsswitch.ldap + + + man_MANS = nss_ldap.5 + +-nss_ldap_so_SOURCES = ldap-nss.c ldap-pwd.c ldap-grp.c ldap-netgrp.c ldap-rpc.c ldap-hosts.c ldap-network.c ldap-proto.c ldap-spwd.c ldap-alias.c ldap-service.c ldap-schema.c ldap-ethers.c ldap-bp.c util.c ltf.c snprintf.c resolve.c dnsconfig.c irs-nss.c pagectrl.c ++nss_ldap_so_SOURCES = ldap-nss.c ldap-pwd.c ldap-grp.c ldap-netgrp.c ldap-rpc.c ldap-hosts.c ldap-network.c ldap-proto.c ldap-spwd.c ldap-alias.c ldap-service.c ldap-schema.c ldap-ethers.c ldap-bp.c util.c ltf.c snprintf.c resolve.c dnsconfig.c irs-nss.c pagectrl.c netbsd.c + + + nss_ldap_so_LDFLAGS = @nss_ldap_so_LDFLAGS@ +@@ -121,7 +121,7 @@ LIBS = @LIBS@ + nss_ldap_so_OBJECTS = ldap-nss.o ldap-pwd.o ldap-grp.o ldap-netgrp.o \ + ldap-rpc.o ldap-hosts.o ldap-network.o ldap-proto.o ldap-spwd.o \ + ldap-alias.o ldap-service.o ldap-schema.o ldap-ethers.o ldap-bp.o \ +-util.o ltf.o snprintf.o resolve.o dnsconfig.o irs-nss.o pagectrl.o ++util.o ltf.o snprintf.o resolve.o dnsconfig.o irs-nss.o pagectrl.o netbsd.o + nss_ldap_so_LDADD = $(LDADD) + nss_ldap_so_DEPENDENCIES = + NSS_LDAP_OBJECTS = ldap-nss.o ldap-grp.o ldap-pwd.o ldap-netgrp.o \ diff --git a/databases/nss_ldap/patches/patch-ag b/databases/nss_ldap/patches/patch-ag new file mode 100644 index 00000000000..26997feef14 --- /dev/null +++ b/databases/nss_ldap/patches/patch-ag @@ -0,0 +1,12 @@ +$NetBSD: patch-ag,v 1.1.1.1 2005/08/08 09:47:42 drochner Exp $ + +--- config.h.in.orig 2005-08-04 21:29:33.000000000 +0200 ++++ config.h.in +@@ -302,3 +302,7 @@ + + /* Version number of package */ + #undef VERSION ++ ++#ifdef __NetBSD__ ++#include "netbsd.h" ++#endif -- cgit v1.2.3