summaryrefslogtreecommitdiff
path: root/databases/nss_ldap
diff options
context:
space:
mode:
authorasau <asau>2014-06-01 19:38:10 +0000
committerasau <asau>2014-06-01 19:38:10 +0000
commit09d7092ebfe489c211c5e128f0b1fcef9309dffc (patch)
tree0be12e48f55f3ac614d7613a6a62d219c2358833 /databases/nss_ldap
parent9c436583f6940e261762df5056760c0c195e73c1 (diff)
downloadpkgsrc-09d7092ebfe489c211c5e128f0b1fcef9309dffc.tar.gz
FreeBSD uses NetBSD-derived nsdispatch.
Cram FreeBSD support in with some force using some knowledge picked from FreeBSD ports collection. Not yet tested in field.
Diffstat (limited to 'databases/nss_ldap')
-rw-r--r--databases/nss_ldap/Makefile18
-rw-r--r--databases/nss_ldap/distinfo8
-rw-r--r--databases/nss_ldap/files/freebsd.c219
-rw-r--r--databases/nss_ldap/patches/patch-af12
-rw-r--r--databases/nss_ldap/patches/patch-ag7
-rw-r--r--databases/nss_ldap/patches/patch-ldap-ethers.c15
-rw-r--r--databases/nss_ldap/patches/patch-ldap-pwd.c11
7 files changed, 276 insertions, 14 deletions
diff --git a/databases/nss_ldap/Makefile b/databases/nss_ldap/Makefile
index 6b37938a67e..8d576e32d7c 100644
--- a/databases/nss_ldap/Makefile
+++ b/databases/nss_ldap/Makefile
@@ -1,4 +1,4 @@
-# $NetBSD: Makefile,v 1.28 2014/02/12 23:17:39 tron Exp $
+# $NetBSD: Makefile,v 1.29 2014/06/01 19:38:10 asau Exp $
DISTNAME= nss_ldap-265
PKGREVISION= 5
@@ -11,7 +11,7 @@ COMMENT= LDAP client for nsswitch
LICENSE= gnu-lgpl-v2
# needs nsswitch
-ONLY_FOR_PLATFORM= NetBSD-[3-9]*-*
+ONLY_FOR_PLATFORM= NetBSD-[3-9]*-* FreeBSD-*-*
USE_TOOLS+= gmake
GNU_CONFIGURE= yes
@@ -21,6 +21,8 @@ CONFIGURE_ARGS+= --with-ldap-lib=openldap
CONFIGURE_ARGS+= --with-ldap-dir=${BUILDLINK_PREFIX.openldap-client}
CONFIGURE_ARGS+= --with-ldap-conf-file=${PKG_SYSCONFDIR}/ldap.conf
CONFIGURE_ARGS+= --with-ldap-secret-file=${PKG_SYSCONFDIR}/ldap.secret
+CFLAGS.FreeBSD+= -DUID_NOBODY=65534 -DGID_NOBODY=65534 # see <sys/conf.h>
+CONFIGURE_ENV+= ac_cv_header_nsswitch_h=no
MAKE_FLAGS+= INST_UID=${BINOWN} INST_GID=${BINGRP}
# shared with security/pam-ldap
@@ -29,9 +31,19 @@ CONF_FILES= ${EGDIR}/ldap.conf ${PKG_SYSCONFDIR}/ldap.conf
INSTALL_MAKE_FLAGS= ${MAKE_FLAGS} sysconfdir=${EGDIR}
+SUBST_CLASSES+= fix-opsys
+SUBST_STAGE.fix-opsys= pre-configure
+SUBST_MESSAGE.fix-opsys= Fixing system name.
+SUBST_FILES.fix-opsys= Makefile.in
+SUBST_SED.fix-opsys= -e 's,@OPSYS@,${OPSYS:tl},g'
+
+.include "../../mk/bsd.prefs.mk"
+
pre-build:
- ${CP} ${FILESDIR}/netbsd.c ${FILESDIR}/netbsd.h ${WRKSRC}
+ ${CP} ${FILESDIR}/netbsd.c ${FILESDIR}/netbsd.h ${FILESDIR}/freebsd.c ${WRKSRC}
+.if ${OPSYS} == "NetBSD"
${LN} -fs /usr/include/nsswitch.h ${BUILDLINK_DIR}/include/nss.h
+.endif
.include "options.mk"
diff --git a/databases/nss_ldap/distinfo b/databases/nss_ldap/distinfo
index dbdea44c1ba..d3e00cbeaa4 100644
--- a/databases/nss_ldap/distinfo
+++ b/databases/nss_ldap/distinfo
@@ -1,8 +1,10 @@
-$NetBSD: distinfo,v 1.7 2010/11/03 11:39:07 adam Exp $
+$NetBSD: distinfo,v 1.8 2014/06/01 19:38:10 asau Exp $
SHA1 (nss_ldap-265.tar.gz) = 743581914fc8c9b4d33955c2cc7acd0c3c44a430
RMD160 (nss_ldap-265.tar.gz) = 0513f1b62aface531145f739ec8e9867c77eb3ce
Size (nss_ldap-265.tar.gz) = 280976 bytes
SHA1 (patch-ab) = 418fca750b9b6f40dd3a904af84fababf8c55022
-SHA1 (patch-af) = 27fa5ff0bbff4340ce92e109b35d900369e31a53
-SHA1 (patch-ag) = 880b8867b610b9602fc428beebdeb85dee215816
+SHA1 (patch-af) = 7a09ee93a903dc7df256a50d9e904b74e6e5747f
+SHA1 (patch-ag) = 4fa04f6b577b7c5a6977403dae3e91a3faab4152
+SHA1 (patch-ldap-ethers.c) = 0e4e27e4f03e7e8a821aaddabb91c443f5d1db22
+SHA1 (patch-ldap-pwd.c) = 5d4720aaa88e2e7b46d1c1cde9648466b82598e1
diff --git a/databases/nss_ldap/files/freebsd.c b/databases/nss_ldap/files/freebsd.c
new file mode 100644
index 00000000000..8b1601454ac
--- /dev/null
+++ b/databases/nss_ldap/files/freebsd.c
@@ -0,0 +1,219 @@
+#include <errno.h>
+#include <stdlib.h>
+#include <sys/param.h>
+#include <netinet/in.h>
+#include <pwd.h>
+#include <grp.h>
+#include <nss.h>
+#include <nsswitch.h>
+#include <netdb.h>
+
+extern enum nss_status _nss_ldap_getgrent_r(struct group *, char *, size_t,
+ int *);
+extern enum nss_status _nss_ldap_getgrnam_r(const char *, struct group *,
+ char *, size_t, int *);
+extern enum nss_status _nss_ldap_getgrgid_r(gid_t gid, struct group *, char *,
+ size_t, int *);
+extern enum nss_status _nss_ldap_setgrent(void);
+extern enum nss_status _nss_ldap_endgrent(void);
+extern enum nss_status _nss_ldap_initgroups_dyn(const char *, gid_t, long int *,
+ long int *, gid_t **, long int, int *);
+
+extern enum nss_status _nss_ldap_getpwent_r(struct passwd *, char *, size_t,
+ int *);
+extern enum nss_status _nss_ldap_getpwnam_r(const char *, struct passwd *,
+ char *, size_t, int *);
+extern enum nss_status _nss_ldap_getpwuid_r(gid_t gid, struct passwd *, char *,
+ size_t, int *);
+extern enum nss_status _nss_ldap_setpwent(void);
+extern enum nss_status _nss_ldap_endpwent(void);
+
+extern enum nss_status _nss_ldap_gethostbyname_r (const char *name, struct hostent * result,
+ char *buffer, size_t buflen, int *errnop,
+ int *h_errnop);
+
+extern enum nss_status _nss_ldap_gethostbyname2_r (const char *name, int af, struct hostent * result,
+ char *buffer, size_t buflen, int *errnop,
+ int *h_errnop);
+extern enum nss_status _nss_ldap_gethostbyaddr_r (struct in_addr * addr, int len, int type,
+ struct hostent * result, char *buffer,
+ size_t buflen, int *errnop, int *h_errnop);
+
+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);
+static NSS_METHOD_PROTOTYPE(__freebsd_getgroupmembership);
+
+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_gethostbyname);
+NSS_METHOD_PROTOTYPE(__nss_compat_gethostbyname2);
+NSS_METHOD_PROTOTYPE(__nss_compat_gethostbyaddr);
+
+static ns_mtab methods[] = {
+{ NSDB_GROUP, "getgrnam_r", __nss_compat_getgrnam_r, _nss_ldap_getgrnam_r },
+{ NSDB_GROUP, "getgrgid_r", __nss_compat_getgrgid_r, _nss_ldap_getgrgid_r },
+{ NSDB_GROUP, "getgrent_r", __nss_compat_getgrent_r, _nss_ldap_getgrent_r },
+{ NSDB_GROUP, "setgrent", __nss_compat_setgrent, _nss_ldap_setgrent },
+{ NSDB_GROUP, "endgrent", __nss_compat_endgrent, _nss_ldap_endgrent },
+{ NSDB_GROUP, "getgroupmembership", __freebsd_getgroupmembership, NULL },
+
+{ NSDB_PASSWD, "getpwnam_r", __nss_compat_getpwnam_r, _nss_ldap_getpwnam_r },
+{ NSDB_PASSWD, "getpwuid_r", __nss_compat_getpwuid_r, _nss_ldap_getpwuid_r },
+{ NSDB_PASSWD, "getpwent_r", __nss_compat_getpwent_r, _nss_ldap_getpwent_r },
+{ NSDB_PASSWD, "setpwent", __nss_compat_setpwent, _nss_ldap_setpwent },
+{ NSDB_PASSWD, "endpwent", __nss_compat_endpwent, _nss_ldap_endpwent },
+
+{ NSDB_HOSTS, "gethostbyname", __nss_compat_gethostbyname, _nss_ldap_gethostbyname_r },
+{ NSDB_HOSTS, "gethostbyaddr", __nss_compat_gethostbyaddr, _nss_ldap_gethostbyaddr_r },
+{ NSDB_HOSTS, "gethostbyname2", __nss_compat_gethostbyname2, _nss_ldap_gethostbyname2_r },
+
+{ NSDB_GROUP_COMPAT, "getgrnam_r", __nss_compat_getgrnam_r, _nss_ldap_getgrnam_r },
+{ NSDB_GROUP_COMPAT, "getgrgid_r", __nss_compat_getgrgid_r, _nss_ldap_getgrgid_r },
+{ NSDB_GROUP_COMPAT, "getgrent_r", __nss_compat_getgrent_r, _nss_ldap_getgrent_r },
+{ NSDB_GROUP_COMPAT, "setgrent", __nss_compat_setgrent, _nss_ldap_setgrent },
+{ NSDB_GROUP_COMPAT, "endgrent", __nss_compat_endgrent, _nss_ldap_endgrent },
+
+{ NSDB_PASSWD_COMPAT, "getpwnam_r", __nss_compat_getpwnam_r, _nss_ldap_getpwnam_r },
+{ NSDB_PASSWD_COMPAT, "getpwuid_r", __nss_compat_getpwuid_r, _nss_ldap_getpwuid_r },
+{ NSDB_PASSWD_COMPAT, "getpwent_r", __nss_compat_getpwent_r, _nss_ldap_getpwent_r },
+{ NSDB_PASSWD_COMPAT, "setpwent", __nss_compat_setpwent, _nss_ldap_setpwent },
+{ NSDB_PASSWD_COMPAT, "endpwent", __nss_compat_endpwent, _nss_ldap_endpwent },
+
+};
+
+
+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);
+}
+
+int __nss_compat_gethostbyname(void *retval, void *mdata, va_list ap)
+{
+ enum nss_status (*fn)(const char *, struct hostent *, char *, size_t, int *, int *);
+ const char *name;
+ struct hostent *result;
+ char buffer[1024];
+ size_t buflen = 1024;
+ int errnop;
+ int h_errnop;
+ int af;
+ enum nss_status status;
+ fn = mdata;
+ name = va_arg(ap, const char*);
+ af = va_arg(ap,int);
+ result = va_arg(ap,struct hostent *);
+ status = fn(name, result, buffer, buflen, &errnop, &h_errnop);
+ status = __nss_compat_result(status,errnop);
+ h_errno = h_errnop;
+ return (status);
+}
+
+int __nss_compat_gethostbyname2(void *retval, void *mdata, va_list ap)
+{
+ enum nss_status (*fn)(const char *, struct hostent *, char *, size_t, int *, int *);
+ const char *name;
+ struct hostent *result;
+ char buffer[1024];
+ size_t buflen = 1024;
+ int errnop;
+ int h_errnop;
+ int af;
+ enum nss_status status;
+ fn = mdata;
+ name = va_arg(ap, const char*);
+ af = va_arg(ap,int);
+ result = va_arg(ap,struct hostent *);
+ status = fn(name, result, buffer, buflen, &errnop, &h_errnop);
+ status = __nss_compat_result(status,errnop);
+ h_errno = h_errnop;
+ return (status);
+}
+
+int __nss_compat_gethostbyaddr(void *retval, void *mdata, va_list ap)
+{
+ struct in_addr *addr;
+ int len;
+ int type;
+ struct hostent *result;
+ char buffer[1024];
+ size_t buflen = 1024;
+ int errnop;
+ int h_errnop;
+ enum nss_status (*fn)(struct in_addr *, int, int, struct hostent *, char *, size_t, int *, int *);
+ enum nss_status status;
+ fn = mdata;
+ addr = va_arg(ap, struct in_addr*);
+ len = va_arg(ap,int);
+ type = va_arg(ap,int);
+ result = va_arg(ap, struct hostent*);
+ status = fn(addr, len, type, result, buffer, buflen, &errnop, &h_errnop);
+ status = __nss_compat_result(status,errnop);
+ h_errno = h_errnop;
+ return (status);
+}
+
+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 __freebsd_getgroupmembership(void *retval, void *mdata, va_list ap)
+{
+ int err;
+ enum nss_status s;
+ 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 == NULL)
+ return NS_TRYAGAIN;
+
+ /* insert primary membership */
+ __gr_addgid(group, groups, limit, size);
+
+ lstart = 0;
+ lsize = limit;
+ s = _nss_ldap_initgroups_dyn(user, group, &lstart, &lsize,
+ &tmpgroups, 0, &err);
+ if (s == NSS_STATUS_SUCCESS) {
+ for (i = 0; i < lstart; i++)
+ __gr_addgid(tmpgroups[i], groups, limit, size);
+ s = NSS_STATUS_NOTFOUND;
+ }
+
+ free(tmpgroups);
+
+ return __nss_compat_result(s, err);
+}
diff --git a/databases/nss_ldap/patches/patch-af b/databases/nss_ldap/patches/patch-af
index e1e8488fa5d..3d1645b8c6d 100644
--- a/databases/nss_ldap/patches/patch-af
+++ b/databases/nss_ldap/patches/patch-af
@@ -1,4 +1,4 @@
-$NetBSD: patch-af,v 1.6 2010/11/03 11:39:08 adam Exp $
+$NetBSD: patch-af,v 1.7 2014/06/01 19:38:10 asau Exp $
--- Makefile.in.orig 2009-11-06 10:28:08.000000000 +0000
+++ Makefile.in
@@ -7,7 +7,7 @@ $NetBSD: patch-af,v 1.6 2010/11/03 11:39:08 adam Exp $
resolve.$(OBJEXT) dnsconfig.$(OBJEXT) irs-nss.$(OBJEXT) \
pagectrl.$(OBJEXT) aix_authmeth.$(OBJEXT) \
- ldap-init-krb5-cache.$(OBJEXT) vers.$(OBJEXT)
-+ ldap-init-krb5-cache.$(OBJEXT) netbsd.$(OBJEXT)
++ ldap-init-krb5-cache.$(OBJEXT) @OPSYS@.$(OBJEXT)
NSS_LDAP_OBJECTS = $(am_NSS_LDAP_OBJECTS)
NSS_LDAP_LDADD = $(LDADD)
am_nss_ldap_so_OBJECTS = ldap-nss.$(OBJEXT) ldap-pwd.$(OBJEXT) \
@@ -16,7 +16,7 @@ $NetBSD: patch-af,v 1.6 2010/11/03 11:39:08 adam Exp $
snprintf.$(OBJEXT) resolve.$(OBJEXT) dnsconfig.$(OBJEXT) \
irs-nss.$(OBJEXT) pagectrl.$(OBJEXT) ldap-sldap.$(OBJEXT) \
- ldap-init-krb5-cache.$(OBJEXT) vers.$(OBJEXT)
-+ ldap-init-krb5-cache.$(OBJEXT) netbsd.$(OBJEXT)
++ ldap-init-krb5-cache.$(OBJEXT) @OPSYS@.$(OBJEXT)
nss_ldap_so_OBJECTS = $(am_nss_ldap_so_OBJECTS)
nss_ldap_so_LDADD = $(LDADD)
DEFAULT_INCLUDES = -I. -I$(srcdir) -I.
@@ -34,12 +34,12 @@ $NetBSD: patch-af,v 1.6 2010/11/03 11:39:08 adam Exp $
ldap-bp.c ldap-automount.c util.c ltf.c snprintf.c resolve.c \
dnsconfig.c irs-nss.c pagectrl.c ldap-sldap.c ldap-init-krb5-cache.c \
- vers.c
-+ netbsd.c
++ @OPSYS@.c
NSS_LDAP_SOURCES = ldap-nss.c ldap-grp.c ldap-pwd.c ldap-netgrp.c ldap-schema.c \
util.c ltf.c snprintf.c resolve.c dnsconfig.c \
- irs-nss.c pagectrl.c aix_authmeth.c ldap-init-krb5-cache.c vers.c
-+ irs-nss.c pagectrl.c aix_authmeth.c ldap-init-krb5-cache.c netbsd.c
++ irs-nss.c pagectrl.c aix_authmeth.c ldap-init-krb5-cache.c @OPSYS@.c
@GCC_FALSE@MULTI_OS_DIRECTORY = .
#INCLUDES = -I$(top_builddir) -I$(srcdir)
@@ -48,7 +48,7 @@ $NetBSD: patch-af,v 1.6 2010/11/03 11:39:08 adam Exp $
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/snprintf.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/util.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vers.Po@am__quote@
-+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/netbsd.Po@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/@OPSYS@.Po@am__quote@
.c.o:
@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
diff --git a/databases/nss_ldap/patches/patch-ag b/databases/nss_ldap/patches/patch-ag
index 87e2eb9a393..76cae715941 100644
--- a/databases/nss_ldap/patches/patch-ag
+++ b/databases/nss_ldap/patches/patch-ag
@@ -1,8 +1,8 @@
-$NetBSD: patch-ag,v 1.2 2010/10/29 13:47:12 adam Exp $
+$NetBSD: patch-ag,v 1.3 2014/06/01 19:38:10 asau Exp $
--- config.h.in.orig 2009-11-06 10:28:08.000000000 +0000
+++ config.h.in
-@@ -345,3 +345,7 @@
+@@ -345,3 +345,10 @@
/* Version number of package */
#undef VERSION
@@ -10,3 +10,6 @@ $NetBSD: patch-ag,v 1.2 2010/10/29 13:47:12 adam Exp $
+#ifdef __NetBSD__
+#include "netbsd.h"
+#endif
++#ifdef __FreeBSD__
++#include "nss.h"
++#endif
diff --git a/databases/nss_ldap/patches/patch-ldap-ethers.c b/databases/nss_ldap/patches/patch-ldap-ethers.c
new file mode 100644
index 00000000000..55d1836cc47
--- /dev/null
+++ b/databases/nss_ldap/patches/patch-ldap-ethers.c
@@ -0,0 +1,15 @@
+$NetBSD: patch-ldap-ethers.c,v 1.1 2014/06/01 19:38:10 asau Exp $
+
+--- ldap-ethers.c.orig 2009-11-06 10:28:08.000000000 +0000
++++ ldap-ethers.c
+@@ -96,6 +96,10 @@ static char *ether_ntoa (const struct et
+ static ent_context_t *ether_context = NULL;
+ #endif
+
++#ifdef __FreeBSD__
++#define ether_addr_octet octet
++#endif
++
+ static NSS_STATUS
+ _nss_ldap_parse_ether (LDAPMessage * e,
+ ldap_state_t * pvt,
diff --git a/databases/nss_ldap/patches/patch-ldap-pwd.c b/databases/nss_ldap/patches/patch-ldap-pwd.c
new file mode 100644
index 00000000000..40ed498d8a0
--- /dev/null
+++ b/databases/nss_ldap/patches/patch-ldap-pwd.c
@@ -0,0 +1,11 @@
+$NetBSD: patch-ldap-pwd.c,v 1.1 2014/06/01 19:38:10 asau Exp $
+
+--- ldap-pwd.c.orig 2009-11-06 10:28:08.000000000 +0000
++++ ldap-pwd.c
+@@ -23,2 +23,6 @@ static char rcsId[] =
+
++#if defined(__FreeBSD__)
++#include <sys/types.h>
++#include <unistd.h>
++#endif
+ #include "config.h"