ports/178333: net/libnss-pgsql: allow user accounts to be stored in postgresql
Berend de Boer
berend at pobox.com
Sat May 4 11:30:04 UTC 2013
>Number: 178333
>Category: ports
>Synopsis: net/libnss-pgsql: allow user accounts to be stored in postgresql
>Confidential: no
>Severity: non-critical
>Priority: low
>Responsible: freebsd-ports-bugs
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: update
>Submitter-Id: current-users
>Arrival-Date: Sat May 04 11:30:03 UTC 2013
>Closed-Date:
>Last-Modified:
>Originator: Berend de Boer
>Release: 9.1
>Organization:
Xplain Hosting
>Environment:
FreeBSD vfreebsd91 9.1-RELEASE FreeBSD 9.1-RELEASE #0 r243825: Tue Dec 4 09:23:10 UTC 2012 root at farrell.cse.buffalo.edu:/usr/obj/usr/src/sys/GENERIC amd64
>Description:
Allow pgsql in /etc/nssswitch.conf, similar to libnss-mysql.
>How-To-Repeat:
>Fix:
Patch attached with submission follows:
# This is a shell archive. Save it in a file, remove anything before
# this line, and then unpack it by entering "sh file". Note, it may
# create directories; files and directories will be owned by you and
# have default permissions.
#
# This archive contains:
#
# libnss-pgsql
# libnss-pgsql/files
# libnss-pgsql/files/patch-configure.in
# libnss-pgsql/files/patch-backend.c
# libnss-pgsql/files/patch-nss-pgsql.h
# libnss-pgsql/files/patch-freebsd.sym
# libnss-pgsql/files/patch-interface.c
# libnss-pgsql/files/patch-src-Makefile.am
# libnss-pgsql/Makefile
# libnss-pgsql/distinfo
# libnss-pgsql/pkg-descr
# libnss-pgsql/pkg-plist
#
echo c - libnss-pgsql
mkdir -p libnss-pgsql > /dev/null 2>&1
echo c - libnss-pgsql/files
mkdir -p libnss-pgsql/files > /dev/null 2>&1
echo x - libnss-pgsql/files/patch-configure.in
sed 's/^X//' >libnss-pgsql/files/patch-configure.in << '5b1b9743b35f2ea07dfc43c2d86b1e83'
X--- configure.ac 2006-01-10 15:35:34.000000000 +1300
X+++ configure.ac 2013-05-04 15:03:26.000000000 +1200
X@@ -26,7 +26,7 @@
X
X # Checks for header files.
X AC_HEADER_STDC
X-AC_CHECK_HEADERS([stdlib.h string.h unistd.h nss.h])
X+AC_CHECK_HEADERS([stdlib.h string.h unistd.h nss.h shadow.h])
X
X # Checks for typedefs, structures, and compiler characteristics.
X AC_C_CONST
5b1b9743b35f2ea07dfc43c2d86b1e83
echo x - libnss-pgsql/files/patch-backend.c
sed 's/^X//' >libnss-pgsql/files/patch-backend.c << 'd72dd59247c8f83f38a967e2ce1b4626'
X--- src/backend.c 2008-08-19 21:44:37.000000000 +1200
X+++ src/backend.c 2013-04-27 21:05:16.000000000 +1200
X@@ -11,7 +11,7 @@
X */
X
X #include "nss-pgsql.h"
X-#include <postgresql/libpq-fe.h>
X+#include <libpq-fe.h>
X #include <stdlib.h>
X #include <string.h>
X #include <stdio.h>
d72dd59247c8f83f38a967e2ce1b4626
echo x - libnss-pgsql/files/patch-nss-pgsql.h
sed 's/^X//' >libnss-pgsql/files/patch-nss-pgsql.h << 'a689ec8ebd67804f9764de8cc5400e02'
X--- src/nss-pgsql.h 2006-01-10 11:33:07.000000000 +1300
X+++ src/nss-pgsql.h 2013-05-04 15:07:33.000000000 +1200
X@@ -15,9 +15,30 @@
X
X # include <pwd.h>
X # include <grp.h>
X+#ifdef HAVE_SHADOW_H
X # include <shadow.h>
X+#endif
X # include <sys/types.h>
X
X+#ifndef HAVE_SHADOW_H
X+/* Structure of the password file. */
X+struct spwd
X+ {
X+ char *sp_namp; /* Login name. */
X+ char *sp_pwdp; /* Encrypted password. */
X+ long int sp_lstchg; /* Date of last change. */
X+ long int sp_min; /* Minimum number of days between changes. */
X+ long int sp_max; /* Maximum number of days between changes. */
X+ long int sp_warn; /* Number of days to warn user to change
X+ the password. */
X+ long int sp_inact; /* Number of days the account may be
X+ inactive. */
X+ long int sp_expire; /* Number of days since 1970-01-01 until
X+ account expires. */
X+ unsigned long int sp_flag; /* Reserved. */
X+ };
X+#endif
X+
X #define CFGFILE SYSCONFDIR"/nss-pgsql.conf"
X #define CFGROOTFILE SYSCONFDIR"/nss-pgsql-root.conf"
X
a689ec8ebd67804f9764de8cc5400e02
echo x - libnss-pgsql/files/patch-freebsd.sym
sed 's/^X//' >libnss-pgsql/files/patch-freebsd.sym << '64a3be747f3d733b40fee405f82c7371'
X--- src/freebsd.sym 1970-01-01 12:00:00.000000000 +1200
X+++ src/freebsd.sym 2004-04-12 11:02:12.000000000 +1200
X@@ -0,0 +1 @@
X+nss_module_register
64a3be747f3d733b40fee405f82c7371
echo x - libnss-pgsql/files/patch-interface.c
sed 's/^X//' >libnss-pgsql/files/patch-interface.c << 'cb3fcae78a0be37fda871e16db8d1af7'
X--- /usr/ports/net/libnss-pgsql/work/libnss-pgsql-1.5.0-beta/src/interface.c 2008-08-19 21:44:37.000000000 +1200
X+++ src/interface.c 2013-05-04 14:30:42.000000000 +1200
X@@ -285,3 +285,57 @@
X
X return retval;
X }
X+
X+/* Thanks to Clement Laforet for most of this */
X+#if defined(__FreeBSD__)
X+
X+NSS_METHOD_PROTOTYPE(__nss_compat_getpwnam_r);
X+NSS_METHOD_PROTOTYPE(__nss_compat_getpwuid_r);
X+NSS_METHOD_PROTOTYPE(__nss_compat_getpwent_r);
X+NSS_METHOD_PROTOTYPE(__nss_compat_setpwent);
X+NSS_METHOD_PROTOTYPE(__nss_compat_endpwent);
X+NSS_METHOD_PROTOTYPE(__nss_compat_getgrnam_r);
X+NSS_METHOD_PROTOTYPE(__nss_compat_getgrgid_r);
X+NSS_METHOD_PROTOTYPE(__nss_compat_getgrent_r);
X+NSS_METHOD_PROTOTYPE(__nss_compat_setgrent);
X+NSS_METHOD_PROTOTYPE(__nss_compat_endgrent);
X+
X+enum nss_status _nss_pgsql_getpwnam_r (const char *, struct passwd *, char *,
X+ size_t, int *);
X+enum nss_status _nss_pgsql_getpwuid_r (uid_t, struct passwd *, char *,
X+ size_t, int *);
X+enum nss_status _nss_pgsql_getpwent_r (struct passwd *, char *, size_t, int *);
X+enum nss_status _nss_pgsql_setpwent (void);
X+enum nss_status _nss_pgsql_endpwent (void);
X+
X+enum nss_status _nss_pgsql_getgrnam_r (const char *, struct group *, char *,
X+ size_t, int *);
X+enum nss_status _nss_pgsql_getgrgid_r (gid_t, struct group *, char *,
X+ size_t, int *);
X+enum nss_status _nss_pgsql_getgrent_r (struct group *, char *, size_t, int *);
X+enum nss_status _nss_pgsql_setgrent (void);
X+enum nss_status _nss_pgsql_endgrent (void);
X+
X+static ns_mtab methods[] = {
X+ { NSDB_PASSWD, "getpwnam_r", __nss_compat_getpwnam_r, _nss_pgsql_getpwnam_r },
X+ { NSDB_PASSWD, "getpwuid_r", __nss_compat_getpwuid_r, _nss_pgsql_getpwuid_r },
X+ { NSDB_PASSWD, "getpwent_r", __nss_compat_getpwent_r, _nss_pgsql_getpwent_r },
X+ { NSDB_PASSWD, "endpwent", __nss_compat_setpwent, _nss_pgsql_setpwent },
X+ { NSDB_PASSWD, "setpwent", __nss_compat_endpwent, _nss_pgsql_endpwent },
X+ { NSDB_GROUP, "getgrnam_r", __nss_compat_getgrnam_r, _nss_pgsql_getgrnam_r },
X+ { NSDB_GROUP, "getgrgid_r", __nss_compat_getgrgid_r, _nss_pgsql_getgrgid_r },
X+ { NSDB_GROUP, "getgrent_r", __nss_compat_getgrent_r, _nss_pgsql_getgrent_r },
X+ { NSDB_GROUP, "endgrent", __nss_compat_setgrent, _nss_pgsql_setgrent },
X+ { NSDB_GROUP, "setgrent", __nss_compat_endgrent, _nss_pgsql_endgrent },
X+};
X+
X+ns_mtab *
X+nss_module_register (const char *name, unsigned int *size,
X+ nss_module_unregister_fn *unregister)
X+{
X+ *size = sizeof (methods) / sizeof (methods[0]);
X+ *unregister = NULL;
X+ return (methods);
X+}
X+
X+#endif /* defined(__FreeBSD__) */
cb3fcae78a0be37fda871e16db8d1af7
echo x - libnss-pgsql/files/patch-src-Makefile.am
sed 's/^X//' >libnss-pgsql/files/patch-src-Makefile.am << '2a3adefac0281151caaf5c6797d7bea8'
X--- src/Makefile.am 2006-01-10 13:07:32.000000000 +1300
X+++ src/Makefile.am 2013-05-04 15:02:08.000000000 +1200
X@@ -1,5 +1,4 @@
X lib_LTLIBRARIES = libnss_pgsql.la
X libnss_pgsql_la_SOURCES = interface.c config.c backend.c util.c
X-libnss_pgsql_la_LDFLAGS = -module -version-info 2
X+libnss_pgsql_la_LDFLAGS = -module -version-info 2 -export-symbols $(srcdir)/freebsd.sym
X EXTRA_DIST = nss-pgsql.h
X-
2a3adefac0281151caaf5c6797d7bea8
echo x - libnss-pgsql/Makefile
sed 's/^X//' >libnss-pgsql/Makefile << '11a997cc07f18b86271f02b244bc060d'
X# Created by: Berend de Boer <berend at pobox.com>
X# $FreeBSD$
X#
X
XPORTNAME= libnss-pgsql
XPORTVERSION= 1.5.0
XPORTREVISION= 1
XCATEGORIES= security net
XMASTER_SITES= http://pgfoundry.org/frs/download.php/1878/
XDISTNAME= ${PORTNAME}-${PORTVERSION}-beta
X
XMAINTAINER= berend at pobox.com
XCOMMENT= NSS module using a PostgreSQL database for backend
X
XBUILD_DEPENDS= ${LOCALBASE}/bin/xmlto:${PORTSDIR}/textproc/xmlto
X
XUSE_PGSQL= yes
XUSE_AUTOTOOLS= libtool autoconf
XCONFIGURE_ARGS= --sysconfdir=${PREFIX}/etc --includedir=${PREFIX}/include --libdir=${PREFIX}/lib
XUSE_LDCONFIG= yes
XGNU_CONFIGURE= yes
XUSE_GMAKE= yes
XUSE_PGSQL= yes
X
Xpost-install:
X.if !defined(PORT_OPTIONS:MDOCS)
X @${MKDIR} ${DOCSDIR}
X @${INSTALL_DATA} ${WRKSRC}/README ${DOCSDIR}
X @${INSTALL_DATA} ${WRKSRC}/conf/nss-pgsql-root.conf ${PREFIX}/etc/nss-pgsql-root.conf.dist
X @${INSTALL_DATA} ${WRKSRC}/conf/nss-pgsql.conf ${PREFIX}/etc/nss-pgsql.conf.dist
X.endif
X
X.include <bsd.port.mk>
11a997cc07f18b86271f02b244bc060d
echo x - libnss-pgsql/distinfo
sed 's/^X//' >libnss-pgsql/distinfo << '394b14bef0d8a841bf6abda7ac83ea56'
XSHA256 (libnss-pgsql-1.5.0-beta.tar.gz) = 84808c47fd21a09e2c487a0efc72cc18b352275082335be8c6de39d325e6c000
XSIZE (libnss-pgsql-1.5.0-beta.tar.gz) = 305543
394b14bef0d8a841bf6abda7ac83ea56
echo x - libnss-pgsql/pkg-descr
sed 's/^X//' >libnss-pgsql/pkg-descr << '8abaaed3ac781e358ba0af8fa990d1b6'
XlibNSS-PostgreSQL allows you to authenticate UNIX groups and users
Xusing a PostgreSQL database. It uses the NSS API which provides an
Xabstraction layer between the UNIX authentication API and the related
Xdata. NSS-PostgreSQL currently supports the passwd and groups services.
X
XNote that on FreeBSD the order in /etc/nssswitch must be:
X
X group: pgsql files
X passwd: pgsql files
X
XSo pgsql must be first, files last.
X
XWWW: http://pgfoundry.org/projects/sysauth/
8abaaed3ac781e358ba0af8fa990d1b6
echo x - libnss-pgsql/pkg-plist
sed 's/^X//' >libnss-pgsql/pkg-plist << '1e51cc1ba5abdaff5929bd79ca921ae7'
Xetc/nss-pgsql.conf.dist
Xetc/nss-pgsql-root.conf.dist
Xlib/libnss_pgsql.a
Xlib/libnss_pgsql.la
Xlib/libnss_pgsql.so
Xlib/libnss_pgsql.so.2
1e51cc1ba5abdaff5929bd79ca921ae7
exit
>Release-Note:
>Audit-Trail:
>Unformatted:
More information about the freebsd-ports-bugs
mailing list