ports/137349: New port: net/nss_ldapd nss_ldap advanced fork
Alexander V. Chernikov
melifaro at ipfw.ru
Sun Aug 2 11:20:03 UTC 2009
>Number: 137349
>Category: ports
>Synopsis: New port: net/nss_ldapd nss_ldap advanced fork
>Confidential: no
>Severity: non-critical
>Priority: low
>Responsible: freebsd-ports-bugs
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: change-request
>Submitter-Id: current-users
>Arrival-Date: Sun Aug 02 11:20:02 UTC 2009
>Closed-Date:
>Last-Modified:
>Originator: Alexander V. Chernikov
>Release: 8.0-BETA1
>Organization:
>Environment:
FreeBSD ws.ipfw.ru 8.0-BETA1 FreeBSD 8.0-BETA1 #9: Wed Jul 8 22:57:18 MSD 2009 root at ws.ipfw.ru:/usr/obj/usr/src/sys/WS amd64
>Description:
Key features:
* Moves all ldap_* queries to nslcd daemon
* nss client library is small and fast
* extendability of client<>server protocol
>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:
#
# nss_ldapd
# nss_ldapd/files
# nss_ldapd/files/patch-fbsd
# nss_ldapd/files/patch-getpw
# nss_ldapd/files/nslcd.in
# nss_ldapd/files/bsdnss.c
# nss_ldapd/files/nss_compat.diff
# nss_ldapd/files/patch-exports
# nss_ldapd/Makefile
# nss_ldapd/distinfo
# nss_ldapd/pkg-descr
# nss_ldapd/pkg-plist
#
echo c - nss_ldapd
mkdir -p nss_ldapd > /dev/null 2>&1
echo c - nss_ldapd/files
mkdir -p nss_ldapd/files > /dev/null 2>&1
echo x - nss_ldapd/files/patch-fbsd
sed 's/^X//' >nss_ldapd/files/patch-fbsd << 'END-of-nss_ldapd/files/patch-fbsd'
X--- nslcd/cfg.c.orig 2009-07-23 15:44:11.000000000 +0400
X+++ nslcd/cfg.c 2009-07-23 15:44:14.000000000 +0400
X@@ -36,9 +36,11 @@
X #include <errno.h>
X #include <netdb.h>
X #include <sys/socket.h>
X+#ifndef __FreeBSD__
X #ifdef HAVE_GSSAPI_H
X #include <gssapi.h>
X #endif /* HAVE_GSSAPI_H */
X+#endif
X #ifdef HAVE_GSSAPI_GSSAPI_KRB5_H
X #include <gssapi/gssapi.h>
X #include <gssapi/gssapi_krb5.h>
X--- nss/shadow.c.orig 2009-07-23 15:44:49.000000000 +0400
X+++ nss/shadow.c 2009-07-23 15:44:55.000000000 +0400
X@@ -22,6 +22,7 @@
X
X #include "config.h"
X
X+#ifdef HAVE_SHADOW_H
X #include <string.h>
X #include <nss.h>
X #include <errno.h>
X@@ -73,3 +74,6 @@
X {
X NSS_ENDENT(spentfp);
X }
X+
X+#endif
X+
X--- nslcd/common.c.orig 2009-07-23 15:46:05.000000000 +0400
X+++ nslcd/common.c 2009-07-23 15:46:20.000000000 +0400
X@@ -27,6 +27,9 @@
X #include <stdarg.h>
X #include <sys/types.h>
X #include <sys/socket.h>
X+#ifdef __FreeBSD__
X+#include <netinet/in.h>
X+#endif
X #include <arpa/inet.h>
X #include <strings.h>
X #include <limits.h>
X--- nss/prototypes.h.orig 2009-07-23 12:35:41.000000000 +0400
X+++ nss/prototypes.h 2009-07-23 15:21:43.000000000 +0400
X@@ -24,13 +24,40 @@
X #define _NSS_EXPORTS_H 1
X
X #include <nss.h>
X-#include <aliases.h>
X+#ifndef __FreeBSD__
X #include <netinet/ether.h>
X+#else
X+#include <net/ethernet.h>
X+#include <sys/socket.h>
X+#endif
X #include <sys/types.h>
X #include <grp.h>
X #include <netdb.h>
X #include <pwd.h>
X+#ifdef HAVE_SHADOW_H
X #include <shadow.h>
X+#endif
X+
X+#ifdef __FreeBSD__
X+/*
X+ * Import from aliases.h
X+ */
X+struct aliasent
X+ {
X+ char *alias_name;
X+ size_t alias_members_len;
X+ char **alias_members;
X+ int alias_local;
X+ };
X+
X+struct rpcent
X+{
X+ char *r_name; /* Name of server for this rpc program. */
X+ char **r_aliases; /* Alias list. */
X+ int r_number; /* RPC program number. */
X+};
X+
X+#endif
X
X /* We define struct etherent here because it does not seem to
X be defined in any publicly available header file exposed
X@@ -160,10 +187,12 @@
X enum nss_status _nss_ldap_getservent_r(struct servent *result,char *buffer,size_t buflen,int *errnop);
X enum nss_status _nss_ldap_endservent(void);
X
X+#ifdef HAVE_SHADOW_H
X /* shadow - extended user information */
X enum nss_status _nss_ldap_getspnam_r(const char *name,struct spwd *result,char *buffer,size_t buflen,int *errnop);
X enum nss_status _nss_ldap_setspent(int stayopen);
X enum nss_status _nss_ldap_getspent_r(struct spwd *result,char *buffer,size_t buflen,int *errnop);
X enum nss_status _nss_ldap_endspent(void);
X+#endif
X
X #endif /* not NSS_EXPORTS */
END-of-nss_ldapd/files/patch-fbsd
echo x - nss_ldapd/files/patch-getpw
sed 's/^X//' >nss_ldapd/files/patch-getpw << 'END-of-nss_ldapd/files/patch-getpw'
X--- nslcd/nslcd.c.orig 2009-08-02 13:29:40.000000000 +0400
X+++ nslcd/nslcd.c 2009-08-02 13:54:14.000000000 +0400
X@@ -398,9 +398,9 @@
X case NSLCD_ACTION_NETWORK_BYNAME: (void)nslcd_network_byname(fp,session); break;
X case NSLCD_ACTION_NETWORK_BYADDR: (void)nslcd_network_byaddr(fp,session); break;
X case NSLCD_ACTION_NETWORK_ALL: (void)nslcd_network_all(fp,session); break;
X- case NSLCD_ACTION_PASSWD_BYNAME: (void)nslcd_passwd_byname(fp,session); break;
X- case NSLCD_ACTION_PASSWD_BYUID: (void)nslcd_passwd_byuid(fp,session); break;
X- case NSLCD_ACTION_PASSWD_ALL: (void)nslcd_passwd_all(fp,session); break;
X+ case NSLCD_ACTION_PASSWD_BYNAME: (void)nslcd_passwd_byname(fp,session,uid); break;
X+ case NSLCD_ACTION_PASSWD_BYUID: (void)nslcd_passwd_byuid(fp,session,uid); break;
X+ case NSLCD_ACTION_PASSWD_ALL: (void)nslcd_passwd_all(fp,session,uid); break;
X case NSLCD_ACTION_PROTOCOL_BYNAME: (void)nslcd_protocol_byname(fp,session); break;
X case NSLCD_ACTION_PROTOCOL_BYNUMBER:(void)nslcd_protocol_bynumber(fp,session); break;
X case NSLCD_ACTION_PROTOCOL_ALL: (void)nslcd_protocol_all(fp,session); break;
X--- nslcd/common.h.orig 2009-08-02 13:39:07.000000000 +0400
X+++ nslcd/common.h 2009-08-02 14:15:20.000000000 +0400
X@@ -124,9 +124,9 @@
X int nslcd_network_byname(TFILE *fp,MYLDAP_SESSION *session);
X int nslcd_network_byaddr(TFILE *fp,MYLDAP_SESSION *session);
X int nslcd_network_all(TFILE *fp,MYLDAP_SESSION *session);
X-int nslcd_passwd_byname(TFILE *fp,MYLDAP_SESSION *session);
X-int nslcd_passwd_byuid(TFILE *fp,MYLDAP_SESSION *session);
X-int nslcd_passwd_all(TFILE *fp,MYLDAP_SESSION *session);
X+int nslcd_passwd_byname(TFILE *fp,MYLDAP_SESSION *session,uid_t uid);
X+int nslcd_passwd_byuid(TFILE *fp,MYLDAP_SESSION *session,uid_t uid);
X+int nslcd_passwd_all(TFILE *fp,MYLDAP_SESSION *session,uid_t uid);
X int nslcd_protocol_byname(TFILE *fp,MYLDAP_SESSION *session);
X int nslcd_protocol_bynumber(TFILE *fp,MYLDAP_SESSION *session);
X int nslcd_protocol_all(TFILE *fp,MYLDAP_SESSION *session);
X@@ -145,8 +145,12 @@
X int nslcd_pam_pwmod(TFILE *fp,MYLDAP_SESSION *session);
X
X /* macro for generating service handling code */
X-#define NSLCD_HANDLE(db,fn,readfn,logcall,action,mkfilter,writefn) \
X- int nslcd_##db##_##fn(TFILE *fp,MYLDAP_SESSION *session) \
X+#define COMMA ,
X+#define NSLCD_HANDLE(db,fn,readfn,logcall,action,mkfilter,writefn) NSLCD_HANDLE_PARAMS(db,fn,,readfn,logcall,action,mkfilter,writefn)
X+#define NSLCD_HANDLE_UID(db,fn,readfn,logcall,action,mkfilter,writefn) NSLCD_HANDLE_PARAMS(db,fn,COMMA uid_t calleruid,readfn,logcall,action,mkfilter,writefn)
X+
X+#define NSLCD_HANDLE_PARAMS(db,fn,params,readfn,logcall,action,mkfilter,writefn) \
X+ int nslcd_##db##_##fn(TFILE *fp,MYLDAP_SESSION *session params ) \
X { \
X /* define common variables */ \
X int32_t tmpint32; \
X--- nslcd/passwd.c.orig 2009-08-02 13:53:38.000000000 +0400
X+++ nslcd/passwd.c 2009-08-02 13:59:27.000000000 +0400
X@@ -292,7 +292,7 @@
X #define MAXUIDS_PER_ENTRY 5
X
X static int write_passwd(TFILE *fp,MYLDAP_ENTRY *entry,const char *requser,
X- const uid_t *requid)
X+ const uid_t *requid,uid_t calleruid)
X {
X int32_t tmpint32;
X const char **tmpvalues;
X@@ -323,7 +323,7 @@
X else
X {
X passwd=get_userpassword(entry,attmap_passwd_userPassword);
X- if (passwd==NULL)
X+ if ((passwd==NULL) || (calleruid!=0))
X passwd=default_passwd_userPassword;
X }
X /* get the uids for this entry */
X@@ -451,7 +451,7 @@
X return 0;
X }
X
X-NSLCD_HANDLE(
X+NSLCD_HANDLE_UID(
X passwd,byname,
X char name[256];
X char filter[1024];
X@@ -463,10 +463,10 @@
X log_log(LOG_DEBUG,"nslcd_passwd_byname(%s)",name);,
X NSLCD_ACTION_PASSWD_BYNAME,
X mkfilter_passwd_byname(name,filter,sizeof(filter)),
X- write_passwd(fp,entry,name,NULL)
X+ write_passwd(fp,entry,name,NULL,calleruid)
X )
X
X-NSLCD_HANDLE(
X+NSLCD_HANDLE_UID(
X passwd,byuid,
X uid_t uid;
X char filter[1024];
X@@ -474,15 +474,15 @@
X log_log(LOG_DEBUG,"nslcd_passwd_byuid(%d)",(int)uid);,
X NSLCD_ACTION_PASSWD_BYUID,
X mkfilter_passwd_byuid(uid,filter,sizeof(filter)),
X- write_passwd(fp,entry,NULL,&uid)
X+ write_passwd(fp,entry,NULL,&uid,calleruid)
X )
X
X-NSLCD_HANDLE(
X+NSLCD_HANDLE_UID(
X passwd,all,
X const char *filter;
X /* no parameters to read */,
X log_log(LOG_DEBUG,"nslcd_passwd_all()");,
X NSLCD_ACTION_PASSWD_ALL,
X (filter=passwd_filter,0),
X- write_passwd(fp,entry,NULL,NULL)
X+ write_passwd(fp,entry,NULL,NULL,calleruid)
X )
END-of-nss_ldapd/files/patch-getpw
echo x - nss_ldapd/files/nslcd.in
sed 's/^X//' >nss_ldapd/files/nslcd.in << 'END-of-nss_ldapd/files/nslcd.in'
X#!/bin/sh
X#
X# $FreeBSD: ports/net/nslcd4/files/nslcd.in,v 1.1 2006/10/31 02:42:33 marcus Exp $
X#
X# PROVIDE: nslcd
X# REQUIRE: DAEMON
X#
X# Add the following line to /etc/rc.conf to enable the nslcd daemon:
X#
X# nslcd_enable="YES"
X#
X
Xnslcd_enable=${nslcd_enable-"NO"}
X
X. %%RC_SUBR%%
X
Xname=nslcd
Xrcvar=`set_rcvar`
X
Xcommand="/usr/local/sbin/nslcd"
Xpidfile="/var/run/${name}.pid"
X
Xload_rc_config ${name}
Xrun_rc_command "$1"
END-of-nss_ldapd/files/nslcd.in
echo x - nss_ldapd/files/bsdnss.c
sed 's/^X//' >nss_ldapd/files/bsdnss.c << 'END-of-nss_ldapd/files/bsdnss.c'
X#include <errno.h>
X#include <sys/param.h>
X#include <netinet/in.h>
X#include <pwd.h>
X#include <grp.h>
X#include <nss.h>
X#include <netdb.h>
X
Xextern enum nss_status _nss_ldap_getgrent_r(struct group *, char *, size_t,
X int *);
Xextern enum nss_status _nss_ldap_getgrnam_r(const char *, struct group *,
X char *, size_t, int *);
Xextern enum nss_status _nss_ldap_getgrgid_r(gid_t gid, struct group *, char *,
X size_t, int *);
Xextern enum nss_status _nss_ldap_setgrent(void);
Xextern enum nss_status _nss_ldap_endgrent(void);
X
Xextern enum nss_status _nss_ldap_getpwent_r(struct passwd *, char *, size_t,
X int *);
Xextern enum nss_status _nss_ldap_getpwnam_r(const char *, struct passwd *,
X char *, size_t, int *);
Xextern enum nss_status _nss_ldap_getpwuid_r(gid_t gid, struct passwd *, char *,
X size_t, int *);
Xextern enum nss_status _nss_ldap_setpwent(void);
Xextern enum nss_status _nss_ldap_endpwent(void);
X
Xextern enum nss_status _nss_ldap_gethostbyname_r (const char *name, struct hostent * result,
X char *buffer, size_t buflen, int *errnop,
X int *h_errnop);
X
Xextern enum nss_status _nss_ldap_gethostbyname2_r (const char *name, int af, struct hostent * result,
X char *buffer, size_t buflen, int *errnop,
X int *h_errnop);
Xextern enum nss_status _nss_ldap_gethostbyaddr_r (struct in_addr * addr, int len, int type,
X struct hostent * result, char *buffer,
X size_t buflen, int *errnop, int *h_errnop);
X
XNSS_METHOD_PROTOTYPE(__nss_compat_getgrnam_r);
XNSS_METHOD_PROTOTYPE(__nss_compat_getgrgid_r);
XNSS_METHOD_PROTOTYPE(__nss_compat_getgrent_r);
XNSS_METHOD_PROTOTYPE(__nss_compat_setgrent);
XNSS_METHOD_PROTOTYPE(__nss_compat_endgrent);
X
XNSS_METHOD_PROTOTYPE(__nss_compat_getpwnam_r);
XNSS_METHOD_PROTOTYPE(__nss_compat_getpwuid_r);
XNSS_METHOD_PROTOTYPE(__nss_compat_getpwent_r);
XNSS_METHOD_PROTOTYPE(__nss_compat_setpwent);
XNSS_METHOD_PROTOTYPE(__nss_compat_endpwent);
X
XNSS_METHOD_PROTOTYPE(__nss_compat_gethostbyname);
XNSS_METHOD_PROTOTYPE(__nss_compat_gethostbyname2);
XNSS_METHOD_PROTOTYPE(__nss_compat_gethostbyaddr);
X
Xstatic ns_mtab methods[] = {
X{ NSDB_GROUP, "getgrnam_r", __nss_compat_getgrnam_r, _nss_ldap_getgrnam_r },
X{ NSDB_GROUP, "getgrgid_r", __nss_compat_getgrgid_r, _nss_ldap_getgrgid_r },
X{ NSDB_GROUP, "getgrent_r", __nss_compat_getgrent_r, _nss_ldap_getgrent_r },
X{ NSDB_GROUP, "setgrent", __nss_compat_setgrent, _nss_ldap_setgrent },
X{ NSDB_GROUP, "endgrent", __nss_compat_endgrent, _nss_ldap_endgrent },
X
X{ NSDB_PASSWD, "getpwnam_r", __nss_compat_getpwnam_r, _nss_ldap_getpwnam_r },
X{ NSDB_PASSWD, "getpwuid_r", __nss_compat_getpwuid_r, _nss_ldap_getpwuid_r },
X{ NSDB_PASSWD, "getpwent_r", __nss_compat_getpwent_r, _nss_ldap_getpwent_r },
X{ NSDB_PASSWD, "setpwent", __nss_compat_setpwent, _nss_ldap_setpwent },
X{ NSDB_PASSWD, "endpwent", __nss_compat_endpwent, _nss_ldap_endpwent },
X
X{ NSDB_HOSTS, "gethostbyname", __nss_compat_gethostbyname, _nss_ldap_gethostbyname_r },
X{ NSDB_HOSTS, "gethostbyaddr", __nss_compat_gethostbyaddr, _nss_ldap_gethostbyaddr_r },
X{ NSDB_HOSTS, "gethostbyname2", __nss_compat_gethostbyname2, _nss_ldap_gethostbyname2_r },
X
X{ NSDB_GROUP_COMPAT, "getgrnam_r", __nss_compat_getgrnam_r, _nss_ldap_getgrnam_r },
X{ NSDB_GROUP_COMPAT, "getgrgid_r", __nss_compat_getgrgid_r, _nss_ldap_getgrgid_r },
X{ NSDB_GROUP_COMPAT, "getgrent_r", __nss_compat_getgrent_r, _nss_ldap_getgrent_r },
X{ NSDB_GROUP_COMPAT, "setgrent", __nss_compat_setgrent, _nss_ldap_setgrent },
X{ NSDB_GROUP_COMPAT, "endgrent", __nss_compat_endgrent, _nss_ldap_endgrent },
X
X{ NSDB_PASSWD_COMPAT, "getpwnam_r", __nss_compat_getpwnam_r, _nss_ldap_getpwnam_r },
X{ NSDB_PASSWD_COMPAT, "getpwuid_r", __nss_compat_getpwuid_r, _nss_ldap_getpwuid_r },
X{ NSDB_PASSWD_COMPAT, "getpwent_r", __nss_compat_getpwent_r, _nss_ldap_getpwent_r },
X{ NSDB_PASSWD_COMPAT, "setpwent", __nss_compat_setpwent, _nss_ldap_setpwent },
X{ NSDB_PASSWD_COMPAT, "endpwent", __nss_compat_endpwent, _nss_ldap_endpwent },
X
X};
X
X
Xns_mtab *
Xnss_module_register(const char *source, unsigned int *mtabsize,
X nss_module_unregister_fn *unreg)
X{
X *mtabsize = sizeof(methods)/sizeof(methods[0]);
X *unreg = NULL;
X return (methods);
X}
X
Xint __nss_compat_gethostbyname(void *retval, void *mdata, va_list ap)
X{
X enum nss_status (*fn)(const char *, struct hostent *, char *, size_t, int *, int *);
X const char *name;
X struct hostent *result;
X char buffer[1024];
X size_t buflen = 1024;
X int errnop;
X int h_errnop;
X int af;
X enum nss_status status;
X fn = mdata;
X name = va_arg(ap, const char*);
X af = va_arg(ap,int);
X result = va_arg(ap,struct hostent *);
X status = fn(name, result, buffer, buflen, &errnop, &h_errnop);
X status = __nss_compat_result(status,errnop);
X h_errno = h_errnop;
X return (status);
X}
X
Xint __nss_compat_gethostbyname2(void *retval, void *mdata, va_list ap)
X{
X enum nss_status (*fn)(const char *, struct hostent *, char *, size_t, int *, int *);
X const char *name;
X struct hostent *result;
X char buffer[1024];
X size_t buflen = 1024;
X int errnop;
X int h_errnop;
X int af;
X enum nss_status status;
X fn = mdata;
X name = va_arg(ap, const char*);
X af = va_arg(ap,int);
X result = va_arg(ap,struct hostent *);
X status = fn(name, result, buffer, buflen, &errnop, &h_errnop);
X status = __nss_compat_result(status,errnop);
X h_errno = h_errnop;
X return (status);
X}
X
Xint __nss_compat_gethostbyaddr(void *retval, void *mdata, va_list ap)
X{
X struct in_addr *addr;
X int len;
X int type;
X struct hostent *result;
X char buffer[1024];
X size_t buflen = 1024;
X int errnop;
X int h_errnop;
X enum nss_status (*fn)(struct in_addr *, int, int, struct hostent *, char *, size_t, int *, int *);
X enum nss_status status;
X fn = mdata;
X addr = va_arg(ap, struct in_addr*);
X len = va_arg(ap,int);
X type = va_arg(ap,int);
X result = va_arg(ap, struct hostent*);
X status = fn(addr, len, type, result, buffer, buflen, &errnop, &h_errnop);
X status = __nss_compat_result(status,errnop);
X h_errno = h_errnop;
X return (status);
X}
END-of-nss_ldapd/files/bsdnss.c
echo x - nss_ldapd/files/nss_compat.diff
sed 's/^X//' >nss_ldapd/files/nss_compat.diff << 'END-of-nss_ldapd/files/nss_compat.diff'
X--- nslcd/cfg.c.orig 2009-08-02 04:47:26.000000000 +0400
X+++ nslcd/cfg.c 2009-08-02 04:51:49.000000000 +0400
X@@ -33,6 +33,7 @@
X #include <sys/types.h>
X #include <sys/stat.h>
X #include <unistd.h>
X+#include <libgen.h>
X #include <errno.h>
X #include <netdb.h>
X #include <sys/socket.h>
X@@ -651,13 +652,30 @@
X {
X FILE *fp;
X int lnr=0;
X- char linebuf[MAX_LINE_LENGTH];
X+ char linebuf[MAX_LINE_LENGTH], secret_path[512];
X char *line;
X char keyword[32];
X char token[64];
X int i;
X int rc;
X char *value;
X+
X+ /* get secret password */
X+ snprintf(secret_path, sizeof(secret_path), "%s/nss_ldap.secret", dirname(filename));
X+ if ((fp=fopen(secret_path,"r"))==NULL)
X+ {
X+ log_log(LOG_ERR,"cannot open secret file (%s): %s",secret_path,strerror(errno));
X+ /* exit(EXIT_FAILURE); */
X+ }
X+ if (fgets(linebuf,MAX_LINE_LENGTH,fp)!=NULL)
X+ {
X+ i=strlen(linebuf);
X+ if (i>0)
X+ linebuf[i-1]='\0';
X+ cfg->ldc_bindpw=strdup(linebuf);
X+ }
X+ fclose(fp);
X+
X /* open config file */
X if ((fp=fopen(filename,"r"))==NULL)
X {
X@@ -726,13 +744,14 @@
X get_int(filename,lnr,keyword,&line,&cfg->ldc_version);
X get_eol(filename,lnr,keyword,&line);
X }
X- else if (strcasecmp(keyword,"binddn")==0)
X+ else if (strcasecmp(keyword,"rootbinddn")==0)
X {
X get_restdup(filename,lnr,keyword,&line,&cfg->ldc_binddn);
X }
X else if (strcasecmp(keyword,"bindpw")==0)
X {
X- get_restdup(filename,lnr,keyword,&line,&cfg->ldc_bindpw);
X+ if (cfg->ldc_bindpw == NULL)
X+ get_restdup(filename,lnr,keyword,&line,&cfg->ldc_bindpw);
X }
X /* SASL authentication options */
X else if (strcasecmp(keyword,"sasl_authcid")==0)
X@@ -933,12 +952,14 @@
X get_int(filename,lnr,keyword,&line,&cfg->ldc_pagesize);
X get_eol(filename,lnr,keyword,&line);
X }
X+#if 0
X /* fallthrough */
X else
X {
X log_log(LOG_ERR,"%s:%d: unknown keyword: '%s'",filename,lnr,keyword);
X exit(EXIT_FAILURE);
X }
X+#endif
X }
X /* we're done reading file, close */
X fclose(fp);
END-of-nss_ldapd/files/nss_compat.diff
echo x - nss_ldapd/files/patch-exports
sed 's/^X//' >nss_ldapd/files/patch-exports << 'END-of-nss_ldapd/files/patch-exports'
X--- nss/exports.linux 2009-07-26 16:29:19.000000000 +0400
X+++ nss/exports.freebsd 2009-07-26 16:29:16.000000000 +0400
X@@ -78,6 +78,27 @@
X _nss_ldap_getspent_r;
X _nss_ldap_endspent;
X
X+ # compat 4 bsd
X+ __nss_compat_getgrnam_r;
X+ __nss_compat_getgrgid_r;
X+ __nss_compat_getgrent_r;
X+ __nss_compat_setgrent;
X+ __nss_compat_endgrent;
X+
X+ __nss_compat_getpwnam_r;
X+ __nss_compat_getpwuid_r;
X+ __nss_compat_getpwent_r;
X+ __nss_compat_setpwent;
X+ __nss_compat_endpwent;
X+
X+ __nss_compat_gethostbyname;
X+ __nss_compat_gethostbyname2;
X+ __nss_compat_gethostbyaddr;
X+
X+ # module init
X+ nss_module_register;
X+
X+
X # everything else should not be exported
X local:
X *;
END-of-nss_ldapd/files/patch-exports
echo x - nss_ldapd/Makefile
sed 's/^X//' >nss_ldapd/Makefile << 'END-of-nss_ldapd/Makefile'
X# Ports collection Makefile for: nss_ldapd
X# Date created: 23/7/2009
X# Whom: nectar at FreeBSD.org
X#
X# $FreeBSD$
X#
X
XPORTNAME= nss_ldapd
XPORTVERSION= 0.6.11
XCATEGORIES= net
XMASTER_SITES= http://arthurdejong.org/nss-ldapd/
XDISTNAME= nss-ldapd-${PORTVERSION}
X
XMAINTAINER= melifaro at ipfw.ru
XCOMMENT= nss_ldap advanced fork
X
XGNU_CONFIGURE= yes
XUSE_GMAKE= yes
XUSE_LDCONFIG= yes
XUSE_OPENLDAP= yes
XUSE_RC_SUBR= nslcd
X
XOPTIONS= NSS_COMPAT "Enable nss_ldap compatibility" on \
X SASL "Enable SASL" off
X
X.include <bsd.port.pre.mk>
X
X.if ${OSVERSION} < 700000
XBROKEN=Problems with nss/libc? TLS
X.endif
X
XCONFIGURE_ENV= CPPFLAGS="-I${LOCALBASE}/include" \
X LDFLAGS="-L${LOCALBASE}/lib"
X
XCONFIGURE_ARGS+= --with-nslcd-pidfile=/var/run/nslcd.pid \
X --with-nslcd-socket=/var/run/nslcd.ctl
X
X.if defined(WITHOUT_NSS)
X.undef NSS_COMPAT
X.endif
X
X.if defined(WITH_NSS_COMPAT)
XCONFIGURE_ARGS+= --with-ldap-conf-file=${PREFIX}/etc/nss_ldap.conf
XPLIST_SUB+= COMPAT="nss_ldap"
XEXTRA_PATCHES+= ${PATCHDIR}/nss_compat.diff
X.else
XCONFIGURE_ARGS+= --with-ldap-conf-file=${PREFIX}/etc/nss_ldapd.conf
XPLIST_SUB+= COMPAT="nss_ldapd"
X.endif
X
X.if defined(WITH_SASL)
XWANT_OPENLDAP_SASL=yes
XCONFIGURE_ARGS+= --enable-sasl
X.else
XCONFIGURE_ARGS+= --disable-sasl
X.endif
X
X.if defined(WITH_PAM)
XCONFIGURE_ARGS+= --enable-pam
X.else
XCONFIGURE_ARGS+= --disable-pam
X.endif
X
X.if defined(WITHOUT_NSS)
XCONFIGURE_ARGS+= --disable-nss
XPLIST_SUB+= NSS="@comment "
X.else
XCONFIGURE_ARGS+= --enable-nss
XCONFLICTS+= nss_ldap-.*
XPLIST_SUB+= NSS=""
X.endif
X
X.if defined(WITHOUT_NSLCD)
XCONFIGURE_ARGS+= --disable-nslcd
XPLIST_SUB+= NSLCD="@comment "
X.else
XCONFIGURE_ARGS+= --enable-nslcd
XPLIST_SUB+= NSLCD=""
XMAN8= nslcd.8
X.endif
X
XMAN5= nss-ldapd.conf.5
X
Xpost-extract:
X @${REINPLACE_CMD} -e 's/\(INSTALL_\)\(.*\)) -D /\1\2) /' ${WRKSRC}/Makefile.in ${WRKSRC}/nss/Makefile.in
X @${REINPLACE_CMD} -e 's/shadow.$$(OBJEXT)/shadow.$$(OBJEXT) bsdnss.$$(OBJEXT)/;s/shadow\.c/shadow.c bsdnss.c/;s/exports\.linux/exports.freebsd/' ${WRKSRC}/nss/Makefile.in
X @${REINPLACE_CMD} -e 's/^NSS_VERS = .*/NSS_VERS = 1/;s/libnss_ldap\.so/nss_ldap.so/' ${WRKSRC}/nss/Makefile.in
X @${CP} ${FILESDIR}/bsdnss.c ${WRKSRC}/nss/
X @${MV} ${WRKSRC}/nss/exports.linux ${WRKSRC}/nss/exports.freebsd
X @${REINPLACE_CMD} -e 's/$$(DESTDIR)$$(NSS_LDAP_PATH_CONF)/$$(DESTDIR)$$(NSS_LDAP_PATH_CONF).sample/' ${WRKSRC}/Makefile.in
X
Xpost-install:
X @${ECHO_MSG}
X @${ECHO_MSG} =====================================================================
X @${ECHO_MSG}
X.if defined(WITH_NSS_COMPAT)
X @${ECHO_MSG} " NSS_LDAP compatibility ENABLED."
X @${ECHO_MSG}
X @${ECHO_MSG} " LDAP configuration: ${PREFIX}/etc/nss_ldap.conf"
X @${ECHO_MSG} " Secret file: ${PREFIX}/etc/nss_ldap.secret"
X @${ECHO_MSG} " Sample configuration: ${PREFIX}/etc/nss_ldap.conf.sample"
X @${ECHO_MSG}
X @${ECHO_MSG} " Check if you need to adjust reconnect_* parameters"
X @${ECHO_MSG} " WARNING: nss_ldapd will use ONLY rootbinddn to access LDAP data"
X.else
X @${ECHO_MSG} " LDAP configuration: ${PREFIX}/etc/nss_ldapd.conf"
X @${ECHO_MSG} " Sample configuration: ${PREFIX}/etc/nss_ldapd.conf.sample"
X @${ECHO_MSG}
X.endif
X.if !defined(WITHOUT_NSS)
X @${ECHO_MSG} " WARNING: Be sure to set uid and gid configuration parameters"
X @${ECHO_MSG} " WARNING: to make nslcd run under unprivileged user"
X.endif
X @${ECHO_MSG}
X @${ECHO_MSG} =====================================================================
X @${ECHO_MSG}
X
X
X.include <bsd.port.post.mk>
END-of-nss_ldapd/Makefile
echo x - nss_ldapd/distinfo
sed 's/^X//' >nss_ldapd/distinfo << 'END-of-nss_ldapd/distinfo'
XMD5 (nss-ldapd-0.6.11.tar.gz) = 8e5087f74a128f2c12f974c176803747
XSHA256 (nss-ldapd-0.6.11.tar.gz) = ac41292c8c7c2a4fb2e77ee9bc165ecefc84e8c33682f8c87ee69381830a8aff
XSIZE (nss-ldapd-0.6.11.tar.gz) = 415271
END-of-nss_ldapd/distinfo
echo x - nss_ldapd/pkg-descr
sed 's/^X//' >nss_ldapd/pkg-descr << 'END-of-nss_ldapd/pkg-descr'
Xnss_ldapd is a NSS module which provides an LDAP backend for C library
Xfunctions such as getpwnam(3), getgrnam(3), and gethostbyname(3). It
Xis compliant with RFC 2307, ``An Approach for Using LDAP as a Network
XInformation Service''.
X
XKey differences from nss_ldap:
X* lighter nss library (no ldap* dependings)
X* server-side connection caching
X
X
XWWW: http://arthurdejong.org/nss-ldapd/
END-of-nss_ldapd/pkg-descr
echo x - nss_ldapd/pkg-plist
sed 's/^X//' >nss_ldapd/pkg-plist << 'END-of-nss_ldapd/pkg-plist'
Xetc/%%COMPAT%%.conf.sample
X%%NSS%%lib/nss_ldap.so.1
X%%NSLCD%%sbin/nslcd
END-of-nss_ldapd/pkg-plist
exit
>Release-Note:
>Audit-Trail:
>Unformatted:
More information about the freebsd-ports-bugs
mailing list