diff options
author | asau <asau> | 2013-03-17 14:12:02 +0000 |
---|---|---|
committer | asau <asau> | 2013-03-17 14:12:02 +0000 |
commit | 2a20b1e7134580d5ea7244b0d557bbd042188254 (patch) | |
tree | 7b6c852c97c0431dcf16dc34df9d4ba356f4960c /databases/nss-pgsql | |
parent | 9b5816b14d57bf456d6ef26f8cdcf815c17935f8 (diff) | |
download | pkgsrc-2a20b1e7134580d5ea7244b0d557bbd042188254.tar.gz |
Import libnss-pgsql version 1.5.0-beta as databases/nss-pgsql
Packaged by Matthew Bauer <matthew.justin.bauer@gmail.com> during Google Code-In.
Name Service Switch module for PostgreSQL.
Diffstat (limited to 'databases/nss-pgsql')
-rw-r--r-- | databases/nss-pgsql/DEINSTALL | 7 | ||||
-rw-r--r-- | databases/nss-pgsql/DESCR | 1 | ||||
-rw-r--r-- | databases/nss-pgsql/INSTALL | 7 | ||||
-rw-r--r-- | databases/nss-pgsql/Makefile | 38 | ||||
-rw-r--r-- | databases/nss-pgsql/PLIST | 14 | ||||
-rw-r--r-- | databases/nss-pgsql/distinfo | 9 | ||||
-rw-r--r-- | databases/nss-pgsql/files/netbsd.c | 544 | ||||
-rw-r--r-- | databases/nss-pgsql/files/netbsd.h | 14 | ||||
-rw-r--r-- | databases/nss-pgsql/patches/patch-config.h.in | 30 | ||||
-rw-r--r-- | databases/nss-pgsql/patches/patch-src_Makefile.in | 15 | ||||
-rw-r--r-- | databases/nss-pgsql/patches/patch-src_backend.c | 76 | ||||
-rw-r--r-- | databases/nss-pgsql/patches/patch-src_nss-pgsql.h | 39 |
12 files changed, 794 insertions, 0 deletions
diff --git a/databases/nss-pgsql/DEINSTALL b/databases/nss-pgsql/DEINSTALL new file mode 100644 index 00000000000..b444346ac5e --- /dev/null +++ b/databases/nss-pgsql/DEINSTALL @@ -0,0 +1,7 @@ +# $NetBSD: DEINSTALL + +case ${STAGE} in +POST-DEINSTALL) + rm -f /usr/lib/libnss_pgsql.so.2 + ;; +esac diff --git a/databases/nss-pgsql/DESCR b/databases/nss-pgsql/DESCR new file mode 100644 index 00000000000..7a65220a7ac --- /dev/null +++ b/databases/nss-pgsql/DESCR @@ -0,0 +1 @@ +Name Service Switch module for PostgreSQL. diff --git a/databases/nss-pgsql/INSTALL b/databases/nss-pgsql/INSTALL new file mode 100644 index 00000000000..249a856a247 --- /dev/null +++ b/databases/nss-pgsql/INSTALL @@ -0,0 +1,7 @@ +# $NetBSD: INSTALL + +case ${STAGE} in +POST-INSTALL) + ln -sf ${PREFIX}/lib/libnss_pgsql.so.2 /usr/lib/libnss_pgsql.so.2 + ;; +esac diff --git a/databases/nss-pgsql/Makefile b/databases/nss-pgsql/Makefile new file mode 100644 index 00000000000..711e85d5744 --- /dev/null +++ b/databases/nss-pgsql/Makefile @@ -0,0 +1,38 @@ +# $NetBSD: Makefile,v 1.1.1.1 2013/03/17 14:12:02 asau Exp $ + +DISTNAME= libnss-pgsql-1.5.0-beta +PKGNAME= nss-pgsql-1.5.0b +CATEGORIES= databases +MASTER_SITES= http://pgfoundry.org/frs/download.php/1878/ +EXTRACT_SUFX= .tgz + +MAINTAINER= pkgsrc-users@NetBSD.org +HOMEPAGE= http://pgfoundry.org/projects/sysauth +COMMENT= Name Service Switch module for PostgreSQL +LICENSE= gnu-gpl-v2 + +GNU_CONFIGURE= yes +USE_LIBTOOL= yes +USE_TOOLS+= gmake + +CONFIGURE_ARGS+= --with-docdir=${PREFIX}/share/doc/nss-pgsql/ + +EGDIR= ${PREFIX}/share/examples/nss-pgsql + +CONF_FILES+= ${EGDIR}/nss-pgsql.conf ${PKG_SYSCONFDIR}/nss-pgsql.conf +INSTALLATION_DIRS+= share/doc/nss-pgsql ${EGDIR} + +post-extract: + ${CP} ${FILESDIR}/netbsd.c ${FILESDIR}/netbsd.h ${WRKSRC}/src/ + +post-install: + ${INSTALL_DATA} ${WRKSRC}/conf/* ${DESTDIR}${EGDIR}/ + ${INSTALL_DATA} ${WRKSRC}/README ${DESTDIR}${PREFIX}/share/doc/nss-pgsql/ + ${INSTALL_DATA} ${WRKSRC}/INSTALL ${DESTDIR}${PREFIX}/share/doc/nss-pgsql/ + ${INSTALL_DATA} ${WRKSRC}/TODO ${DESTDIR}${PREFIX}/share/doc/nss-pgsql/ + ${INSTALL_DATA} ${WRKSRC}/NEWS ${DESTDIR}${PREFIX}/share/doc/nss-pgsql/ + ${INSTALL_DATA} ${WRKSRC}/COPYING ${DESTDIR}${PREFIX}/share/doc/nss-pgsql/ + ${INSTALL_DATA} ${WRKSRC}/AUTHORS ${DESTDIR}${PREFIX}/share/doc/nss-pgsql/ + +.include "../../mk/pgsql.buildlink3.mk" +.include "../../mk/bsd.pkg.mk" diff --git a/databases/nss-pgsql/PLIST b/databases/nss-pgsql/PLIST new file mode 100644 index 00000000000..fc9844ff5e0 --- /dev/null +++ b/databases/nss-pgsql/PLIST @@ -0,0 +1,14 @@ +@comment $NetBSD: PLIST,v 1.1.1.1 2013/03/17 14:12:02 asau Exp $ +lib/libnss_pgsql.la +share/doc/nss-pgsql/AUTHORS +share/doc/nss-pgsql/COPYING +share/doc/nss-pgsql/INSTALL +share/doc/nss-pgsql/NEWS +share/doc/nss-pgsql/README +share/doc/nss-pgsql/TODO +share/doc/nss-pgsql/caution.png +share/doc/nss-pgsql/nss-pgsql.html +share/examples/nss-pgsql/dbschema.sql +share/examples/nss-pgsql/nss-pgsql-root.conf +share/examples/nss-pgsql/nss-pgsql.conf +share/examples/nss-pgsql/nsswitch.conf diff --git a/databases/nss-pgsql/distinfo b/databases/nss-pgsql/distinfo new file mode 100644 index 00000000000..fb08ae36ef7 --- /dev/null +++ b/databases/nss-pgsql/distinfo @@ -0,0 +1,9 @@ +$NetBSD: distinfo,v 1.1.1.1 2013/03/17 14:12:02 asau Exp $ + +SHA1 (libnss-pgsql-1.5.0-beta.tgz) = 69cc58a849a58226a6321c0cd02e150f2d4a81ad +RMD160 (libnss-pgsql-1.5.0-beta.tgz) = 9a81a636d69211a27e07084a3303f55e76e9786f +Size (libnss-pgsql-1.5.0-beta.tgz) = 305543 bytes +SHA1 (patch-config.h.in) = 988a8f524d73b053b15617dfe83eeb80851fd941 +SHA1 (patch-src_Makefile.in) = 416c72f8ccdeeee6e832245097ee34890684e5fe +SHA1 (patch-src_backend.c) = 7a718b1419b39adbe657c82ece62d0e538ef0059 +SHA1 (patch-src_nss-pgsql.h) = 5e77c19649be46cdefbdfe307aca90eb10453fc7 diff --git a/databases/nss-pgsql/files/netbsd.c b/databases/nss-pgsql/files/netbsd.c new file mode 100644 index 00000000000..8d56e386a5c --- /dev/null +++ b/databases/nss-pgsql/files/netbsd.c @@ -0,0 +1,544 @@ +// $NetBSD: netbsd.c,v 1.1.1.1 2013/03/17 14:12:02 asau Exp $ + +// Add necessary functions not provided by NetBSD's NSS + +#include <sys/param.h> +#include <pwd.h> +#include <grp.h> +#include <nsswitch.h> +#include <stdarg.h> +#include <stdlib.h> +#include <string.h> +#include <errno.h> + +#include "netbsd.h" +typedef enum nss_status NSS_STATUS; + +extern NSS_STATUS _nss_pgsql_setpwent(void); +static int netbsd_setpwent(void *, void *, va_list); +static int netbsd_setpassent(void *, void *, va_list); +extern NSS_STATUS _nss_pgsql_endpwent(void); +static int netbsd_endpwent(void *, void *, va_list); +extern NSS_STATUS _nss_pgsql_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_pgsql_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_pgsql_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_pgsql_setgrent(void); +static int netbsd_setgrent(void *, void *, va_list); +static int netbsd_setgroupent(void *, void *, va_list); +extern NSS_STATUS _nss_pgsql_endgrent(void); +static int netbsd_endgrent(void *, void *, va_list); +extern NSS_STATUS _nss_pgsql_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_pgsql_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_pgsql_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); +extern NSS_STATUS _nss_pgsql_initgroups_dyn(const char *, gid_t, long int *, + long int *, gid_t **, long int, int *); +static int netbsd_getgroupmembership(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]; +static char *grpbuf; +static size_t grpbuflen; + +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 }, + { NSDB_GROUP, "getgroupmembership", netbsd_getgroupmembership, 0 }, +}; + +static int +netbsd_setpwent(void *rv, void *cb_data, va_list ap) +{ + NSS_STATUS s; + + s = _nss_pgsql_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_pgsql_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_pgsql_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_pgsql_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_pgsql_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_pgsql_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_pgsql_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_pgsql_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_pgsql_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 +resize_grpbuf() +{ + + if (grpbuflen > 50000) /* safety guard */ + return (-1); + grpbuflen += 1024; + if (grpbuf) + free(grpbuf); + grpbuf = malloc(grpbuflen); + if (!grpbuf) + return (-1); + return (0); +} + +static int +netbsd_setgrent(void *rv, void *cb_data, va_list ap) +{ + NSS_STATUS s; + + s = _nss_pgsql_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_pgsql_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_pgsql_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 **); + +tryagain: + memset(&rg, 0, sizeof(rg)); + s = _nss_pgsql_getgrent_r(&rg, grpbuf, grpbuflen, &err); + + if (s == NSS_STATUS_SUCCESS) + *retval = &rg; + else if ((s == NSS_STATUS_TRYAGAIN) && (err == ERANGE) + && (resize_grpbuf() == 0)) + goto tryagain; + 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_pgsql_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 *); + +tryagain: + memset(&rg, 0, sizeof(rg)); + s = _nss_pgsql_getgrnam_r(name, &rg, grpbuf, grpbuflen, &err); + + if (s == NSS_STATUS_SUCCESS) + *retval = &rg; + else if ((s == NSS_STATUS_TRYAGAIN) && (err == ERANGE) + && (resize_grpbuf() == 0)) + goto tryagain; + 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_pgsql_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); + +tryagain: + memset(&rg, 0, sizeof(rg)); + s = _nss_pgsql_getgrgid_r(gid, &rg, grpbuf, grpbuflen, &err); + + if (s == NSS_STATUS_SUCCESS) + *retval = &rg; + else if ((s == NSS_STATUS_TRYAGAIN) && (err == ERANGE) + && (resize_grpbuf() == 0)) + goto tryagain; + 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_pgsql_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]; +} + +/* addgid helper from NetBSD's getgroupmembership.c */ +static int +__gr_addgid(gid_t gid, gid_t *groups, int maxgrp, int *groupc) +{ + int ret, dupc; + + /* skip duplicates */ + for (dupc = 0; dupc < MIN(maxgrp, *groupc); dupc++) { + if (groups[dupc] == gid) + return 1; + } + + ret = 1; + if (*groupc < maxgrp) /* add this gid */ + groups[*groupc] = gid; + else + ret = 0; + (*groupc)++; + return ret; +} + + +static int +netbsd_getgroupmembership(void *rv, void *cb_data, va_list ap) +{ + int err; + NSS_STATUS s; + int *retval = va_arg(ap, int *); + const char *user = va_arg(ap, const char *); + gid_t group = va_arg(ap, gid_t); + gid_t *groups = va_arg(ap, gid_t *); + int limit = va_arg(ap, int); + int *size = va_arg(ap, int*); + gid_t *tmpgroups; + long int lstart, lsize; + int i; + + tmpgroups = malloc(limit * sizeof(gid_t)); + if (!tmpgroups) + return NS_TRYAGAIN; + /* insert primary membership */ + __gr_addgid(group, groups, limit, size); + + lstart = 0; + lsize = limit; + s = _nss_pgsql_initgroups_dyn(user, group, &lstart, &lsize, + &tmpgroups, 0, &err); + if (s == NSS_STATUS_SUCCESS) { + for (i = 0; i < lstart; i++) + if (! __gr_addgid(tmpgroups[i], groups, limit, size)) + *retval = -1; + s = NSS_STATUS_NOTFOUND; + } + free(tmpgroups); + + 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; + + if (resize_grpbuf()) + return 0; + + return (methods); +} diff --git a/databases/nss-pgsql/files/netbsd.h b/databases/nss-pgsql/files/netbsd.h new file mode 100644 index 00000000000..b6a81beeaeb --- /dev/null +++ b/databases/nss-pgsql/files/netbsd.h @@ -0,0 +1,14 @@ +// $NetBSD: netbsd.h,v 1.1.1.1 2013/03/17 14:12:02 asau Exp $ + +// add necessary functions that is not provided by NetBSD's NSS + +#ifndef _NSS_PGSQL_NETBSD_H +#define _NSS_PGSQL_NETBSD_H +enum nss_status { + NSS_STATUS_SUCCESS, + NSS_STATUS_NOTFOUND, + NSS_STATUS_UNAVAIL, + NSS_STATUS_TRYAGAIN, + NSS_STATUS_RETURN +}; +#endif /* _NSS_PGSQL_NETBSD_H */ diff --git a/databases/nss-pgsql/patches/patch-config.h.in b/databases/nss-pgsql/patches/patch-config.h.in new file mode 100644 index 00000000000..9bb883f4ca5 --- /dev/null +++ b/databases/nss-pgsql/patches/patch-config.h.in @@ -0,0 +1,30 @@ +# $NetBSD: patch-config.h.in,v 1.1.1.1 2013/03/17 14:12:02 asau Exp $ + +Defines NSSWITCH_H and SHADOW_H variables + +--- config.h.in.orig 2008-08-19 10:10:55.000000000 +0000 ++++ config.h.in +@@ -25,10 +25,14 @@ + /* Define to 1 if you have the <nss.h> header file. */ + #undef HAVE_NSS_H + ++#undef HAVE_NSSWITCH_H ++ + /* Define to 1 if your system has a GNU libc compatible `realloc' function, + and to 0 otherwise. */ + #undef HAVE_REALLOC + ++#undef HAVE_SHADOW_H ++ + /* Define to 1 if you have the <stdint.h> header file. */ + #undef HAVE_STDINT_H + +@@ -106,3 +110,8 @@ + + /* Define to `int' if <sys/types.h> doesn't define. */ + #undef uid_t ++ ++#ifdef __NetBSD__ ++#include "netbsd.h" ++#endif ++ diff --git a/databases/nss-pgsql/patches/patch-src_Makefile.in b/databases/nss-pgsql/patches/patch-src_Makefile.in new file mode 100644 index 00000000000..428b1d9f94f --- /dev/null +++ b/databases/nss-pgsql/patches/patch-src_Makefile.in @@ -0,0 +1,15 @@ +# $NetBSD: patch-src_Makefile.in,v 1.1.1.1 2013/03/17 14:12:02 asau Exp $ + +Adds netbsd.c to source list - should we make it only used by NetBSD? + +--- src/Makefile.in.orig 2008-08-19 10:10:56.000000000 +0000 ++++ src/Makefile.in +@@ -86,7 +86,7 @@ VERSION = @VERSION@ + docdir = @docdir@ + + lib_LTLIBRARIES = libnss_pgsql.la +-libnss_pgsql_la_SOURCES = interface.c config.c backend.c util.c ++libnss_pgsql_la_SOURCES = interface.c config.c backend.c util.c netbsd.c + libnss_pgsql_la_LDFLAGS = -module -version-info 2 + EXTRA_DIST = nss-pgsql.h + mkinstalldirs = $(SHELL) $(top_srcdir)/autoconf/mkinstalldirs diff --git a/databases/nss-pgsql/patches/patch-src_backend.c b/databases/nss-pgsql/patches/patch-src_backend.c new file mode 100644 index 00000000000..667a1483344 --- /dev/null +++ b/databases/nss-pgsql/patches/patch-src_backend.c @@ -0,0 +1,76 @@ +# $NetBSD: patch-src_backend.c,v 1.1.1.1 2013/03/17 14:12:02 asau Exp $ + +Changes name of libpq-fe.h so it works on our PostgreSQL installation +Reorders list of copy_attr_colname as it references copy_attr_string + +--- src/backend.c.orig 2008-08-19 09:44:37.000000000 +0000 ++++ src/backend.c +@@ -11,7 +11,7 @@ + */ + + #include "nss-pgsql.h" +-#include <postgresql/libpq-fe.h> ++#include <libpq-fe.h> + #include <stdlib.h> + #include <string.h> + #include <stdio.h> +@@ -205,22 +205,6 @@ inline void getent_close(char type) + Assign a single value to *valptr from the specified row in the result + */ + enum nss_status +-copy_attr_colnum(PGresult *res, int attrib_number, char **valptr, +- char **buffer, size_t *buflen, int *errnop, int row) +-{ +- +- const char *sptr; +- size_t slen; +- +- sptr = PQgetvalue(res, row, attrib_number); +- return copy_attr_string(sptr, valptr, buffer, buflen, errnop); +-} +- +-/* +- With apologies to nss_ldap... +- Assign a single value to *valptr from the specified row in the result +-*/ +-enum nss_status + copy_attr_string(char *sptr, char **valptr, + char **buffer, size_t *buflen, int *errnop) + { +@@ -244,6 +228,22 @@ copy_attr_string(char *sptr, char **valp + } + + /* ++ With apologies to nss_ldap... ++ Assign a single value to *valptr from the specified row in the result ++*/ ++enum nss_status ++copy_attr_colnum(PGresult *res, int attrib_number, char **valptr, ++ char **buffer, size_t *buflen, int *errnop, int row) ++{ ++ ++ const char *sptr; ++ size_t slen; ++ ++ sptr = PQgetvalue(res, row, attrib_number); ++ return copy_attr_string(sptr, valptr, buffer, buflen, errnop); ++} ++ ++/* + * return array of strings containing usernames that are member of group with gid 'gid' + */ + enum nss_status getgroupmem(gid_t gid, +@@ -778,6 +778,7 @@ size_t backend_initgroups_dyn(const char + return *start; + } + ++#ifdef HAVE_SHADOW_H + /* + * 'convert' a PGresult to struct shadow + */ +@@ -863,4 +864,4 @@ enum nss_status backend_getspnam(const c + + return status; + } +- ++#endif diff --git a/databases/nss-pgsql/patches/patch-src_nss-pgsql.h b/databases/nss-pgsql/patches/patch-src_nss-pgsql.h new file mode 100644 index 00000000000..a1e70482792 --- /dev/null +++ b/databases/nss-pgsql/patches/patch-src_nss-pgsql.h @@ -0,0 +1,39 @@ +# $NetBSD: patch-src_nss-pgsql.h,v 1.1.1.1 2013/03/17 14:12:02 asau Exp $ + +Adds checks for header files + +--- src/nss-pgsql.h.orig 2006-01-09 22:33:07.000000000 +0000 ++++ src/nss-pgsql.h +@@ -11,11 +11,15 @@ + + # ifdef HAVE_NSS_H + # include <nss.h> ++# elsif HAVE_NSSWITCH_H ++# include <nsswitch.h> + # endif + + # include <pwd.h> + # include <grp.h> +-# include <shadow.h> ++# ifdef HAVE_SHADOW_H ++# include <shadow.h> ++# endif + # include <sys/types.h> + + #define CFGFILE SYSCONFDIR"/nss-pgsql.conf" +@@ -71,6 +75,7 @@ size_t backend_initgroups_dyn(const char + long int limit, + int *errnop); + ++#ifdef HAVE_SHADOW_H + enum nss_status backend_getspent(struct spwd *result, + char *buffer, + size_t buflen, +@@ -82,6 +87,7 @@ enum nss_status backend_getspnam(const c + size_t buflen, + int *errnop); + ++#endif + void print_err(const char *msg, ...); + void print_msg(const char *msg, ...); + |