New port: net/libnss-pgsql

libNSS-PostgreSQL allows you to authenticate UNIX groups and users
using a PostgreSQL database. It uses the NSS API which provides an
abstraction layer between the UNIX authentication API and the related
data. NSS-PostgreSQL currently supports the passwd and groups services.

WWW: https://ftp.postgresql.org/pub/projects/pgFoundry/sysauth/NSS/

PR:		178333
Submitted by:	berend@pobox.com, felix@userspace.com.au
Reviewed by:	lippe, robak
This commit is contained in:
pi
2016-04-10 12:27:48 +00:00
parent 2c224bea41
commit bcffb3207d
10 changed files with 180 additions and 0 deletions
+1
View File
@@ -331,6 +331,7 @@
SUBDIR += libnids
SUBDIR += libnss-cache
SUBDIR += libnss-mysql
SUBDIR += libnss-pgsql
SUBDIR += liboauth
SUBDIR += libopennet
SUBDIR += liboping
+28
View File
@@ -0,0 +1,28 @@
# Created by: Felix Hanley <felix@userspace.com.au>
# $FreeBSD$
PORTNAME= libnss-pgsql
PORTVERSION= 1.5.0
CATEGORIES= net
MASTER_SITES= ${MASTER_SITE_PGSQL}
MASTER_SITE_SUBDIR= projects/pgFoundry/sysauth/NSS/nss1.5.0-beta
DISTNAME= ${PORTNAME}-${PORTVERSION}-beta
MAINTAINER= felix@userspace.com.au
COMMENT= NSS module using a PostgreSQL database for backend
LICENSE= GPLv2
BUILD_DEPENDS= xmlto:${PORTSDIR}/textproc/xmlto
USES= autoreconf gmake libtool pgsql tar:tgz
CONFIGURE_ARGS= --sysconfdir=${PREFIX}/etc --includedir=${PREFIX}/include --libdir=${PREFIX}/lib --with-docdir=${DOCSDIR}
USE_LDCONFIG= yes
GNU_CONFIGURE= yes
post-install:
${MKDIR} ${STAGEDIR}${DOCSDIR}
${INSTALL_DATA} ${WRKSRC}/README ${WRKSRC}/conf/* ${STAGEDIR}${DOCSDIR}
${INSTALL_DATA} files/nsswitch.conf ${STAGEDIR}${DOCSDIR}
.include <bsd.port.mk>
+2
View File
@@ -0,0 +1,2 @@
SHA256 (libnss-pgsql-1.5.0-beta.tgz) = 84808c47fd21a09e2c487a0efc72cc18b352275082335be8c6de39d325e6c000
SIZE (libnss-pgsql-1.5.0-beta.tgz) = 305543
+17
View File
@@ -0,0 +1,17 @@
#
# nsswitch.conf(5) - name service switch configuration file
# $FreeBSD$
#
#group: compat
group: files [notfound=continue] pgsql
group_compat: nis
hosts: files dns
networks: files
#passwd: compat
passwd: files [notfound=continue] pgsql
passwd_compat: nis
shells: files
services: compat
services_compat: nis
protocols: files
rpc: files
+11
View File
@@ -0,0 +1,11 @@
--- configure.ac.orig 2015-12-21 07:52:02 UTC
+++ configure.ac
@@ -26,7 +26,7 @@ AC_CHECK_LIB([pq], [PQsetdbLogin])
# Checks for header files.
AC_HEADER_STDC
-AC_CHECK_HEADERS([stdlib.h string.h unistd.h nss.h])
+AC_CHECK_HEADERS([stdlib.h string.h unistd.h nss.h shadow.h])
# Checks for typedefs, structures, and compiler characteristics.
AC_C_CONST
@@ -0,0 +1,11 @@
--- src/backend.c.orig 2015-12-21 07:40:53 UTC
+++ 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>
@@ -0,0 +1,60 @@
--- src/interface.c.orig 2015-12-21 07:49:44 UTC
+++ src/interface.c
@@ -285,3 +285,57 @@ _nss_pgsql_getspnam_r(const char *spnam,
return retval;
}
+
+/* Thanks to Clement Laforet for most of this */
+#if defined(__FreeBSD__)
+
+NSS_METHOD_PROTOTYPE(__nss_compat_getpwnam_r);
+NSS_METHOD_PROTOTYPE(__nss_compat_getpwuid_r);
+NSS_METHOD_PROTOTYPE(__nss_compat_getpwent_r);
+NSS_METHOD_PROTOTYPE(__nss_compat_setpwent);
+NSS_METHOD_PROTOTYPE(__nss_compat_endpwent);
+NSS_METHOD_PROTOTYPE(__nss_compat_getgrnam_r);
+NSS_METHOD_PROTOTYPE(__nss_compat_getgrgid_r);
+NSS_METHOD_PROTOTYPE(__nss_compat_getgrent_r);
+NSS_METHOD_PROTOTYPE(__nss_compat_setgrent);
+NSS_METHOD_PROTOTYPE(__nss_compat_endgrent);
+
+enum nss_status _nss_pgsql_getpwnam_r (const char *, struct passwd *, char *,
+ size_t, int *);
+enum nss_status _nss_pgsql_getpwuid_r (uid_t, struct passwd *, char *,
+ size_t, int *);
+enum nss_status _nss_pgsql_getpwent_r (struct passwd *, char *, size_t, int *);
+enum nss_status _nss_pgsql_setpwent (void);
+enum nss_status _nss_pgsql_endpwent (void);
+
+enum nss_status _nss_pgsql_getgrnam_r (const char *, struct group *, char *,
+ size_t, int *);
+enum nss_status _nss_pgsql_getgrgid_r (gid_t, struct group *, char *,
+ size_t, int *);
+enum nss_status _nss_pgsql_getgrent_r (struct group *, char *, size_t, int *);
+enum nss_status _nss_pgsql_setgrent (void);
+enum nss_status _nss_pgsql_endgrent (void);
+
+static ns_mtab methods[] = {
+ { NSDB_PASSWD, "getpwnam_r", __nss_compat_getpwnam_r, _nss_pgsql_getpwnam_r },
+ { NSDB_PASSWD, "getpwuid_r", __nss_compat_getpwuid_r, _nss_pgsql_getpwuid_r },
+ { NSDB_PASSWD, "getpwent_r", __nss_compat_getpwent_r, _nss_pgsql_getpwent_r },
+ { NSDB_PASSWD, "endpwent", __nss_compat_setpwent, _nss_pgsql_setpwent },
+ { NSDB_PASSWD, "setpwent", __nss_compat_endpwent, _nss_pgsql_endpwent },
+ { NSDB_GROUP, "getgrnam_r", __nss_compat_getgrnam_r, _nss_pgsql_getgrnam_r },
+ { NSDB_GROUP, "getgrgid_r", __nss_compat_getgrgid_r, _nss_pgsql_getgrgid_r },
+ { NSDB_GROUP, "getgrent_r", __nss_compat_getgrent_r, _nss_pgsql_getgrent_r },
+ { NSDB_GROUP, "endgrent", __nss_compat_setgrent, _nss_pgsql_setgrent },
+ { NSDB_GROUP, "setgrent", __nss_compat_endgrent, _nss_pgsql_endgrent },
+};
+
+ns_mtab *
+nss_module_register (const char *name, unsigned int *size,
+ nss_module_unregister_fn *unregister)
+{
+ *size = sizeof (methods) / sizeof (methods[0]);
+ *unregister = NULL;
+ return (methods);
+}
+
+#endif /* defined(__FreeBSD__) */
@@ -0,0 +1,33 @@
--- src/nss-pgsql.h.orig 2015-12-21 07:47:28 UTC
+++ src/nss-pgsql.h
@@ -15,9 +15,30 @@
# include <pwd.h>
# include <grp.h>
+#ifdef HAVE_SHADOW_H
# include <shadow.h>
+#endif
# include <sys/types.h>
+#ifndef HAVE_SHADOW_H
+/* Structure of the password file. */
+struct spwd
+ {
+ char *sp_namp; /* Login name. */
+ char *sp_pwdp; /* Encrypted password. */
+ long int sp_lstchg; /* Date of last change. */
+ long int sp_min; /* Minimum number of days between changes. */
+ long int sp_max; /* Maximum number of days between changes. */
+ long int sp_warn; /* Number of days to warn user to change
+ the password. */
+ long int sp_inact; /* Number of days the account may be
+ inactive. */
+ long int sp_expire; /* Number of days since 1970-01-01 until
+ account expires. */
+ unsigned long int sp_flag; /* Reserved. */
+ };
+#endif
+
#define CFGFILE SYSCONFDIR"/nss-pgsql.conf"
#define CFGROOTFILE SYSCONFDIR"/nss-pgsql-root.conf"
+6
View File
@@ -0,0 +1,6 @@
libNSS-PostgreSQL allows you to authenticate UNIX groups and users
using a PostgreSQL database. It uses the NSS API which provides an
abstraction layer between the UNIX authentication API and the related
data. NSS-PostgreSQL currently supports the passwd and groups services.
WWW: https://ftp.postgresql.org/pub/projects/pgFoundry/sysauth/NSS/
+11
View File
@@ -0,0 +1,11 @@
lib/libnss_pgsql.a
lib/libnss_pgsql.so
lib/libnss_pgsql.so.2
lib/libnss_pgsql.so.2.0.0
%%PORTDOCS%%%%DOCSDIR%%/README
%%PORTDOCS%%%%DOCSDIR%%/caution.png
%%PORTDOCS%%%%DOCSDIR%%/dbschema.sql
%%PORTDOCS%%%%DOCSDIR%%/nss-pgsql-root.conf
%%PORTDOCS%%%%DOCSDIR%%/nss-pgsql.conf
%%PORTDOCS%%%%DOCSDIR%%/nss-pgsql.html
%%PORTDOCS%%%%DOCSDIR%%/nsswitch.conf