From owner-freebsd-ports-bugs@FreeBSD.ORG Tue May 4 11:20:01 2004 Return-Path: Delivered-To: freebsd-ports-bugs@hub.freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id D54D416A4CE for ; Tue, 4 May 2004 11:20:01 -0700 (PDT) Received: from freefall.freebsd.org (freefall.freebsd.org [216.136.204.21]) by mx1.FreeBSD.org (Postfix) with ESMTP id 36AE843D49 for ; Tue, 4 May 2004 11:20:01 -0700 (PDT) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (gnats@localhost [127.0.0.1]) i44IK1Ap081822 for ; Tue, 4 May 2004 11:20:01 -0700 (PDT) (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.12.11/8.12.11/Submit) id i44IK1JR081821; Tue, 4 May 2004 11:20:01 -0700 (PDT) (envelope-from gnats) Resent-Date: Tue, 4 May 2004 11:20:01 -0700 (PDT) Resent-Message-Id: <200405041820.i44IK1JR081821@freefall.freebsd.org> Resent-From: FreeBSD-gnats-submit@FreeBSD.org (GNATS Filer) Resent-To: freebsd-ports-bugs@FreeBSD.org Resent-Reply-To: FreeBSD-gnats-submit@FreeBSD.org, Yen-Shuo Su Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 0828A16A4CE for ; Tue, 4 May 2004 11:17:32 -0700 (PDT) Received: from smtp.8lanet.com (220-135-20-160.HINET-IP.hinet.net [220.135.20.160]) by mx1.FreeBSD.org (Postfix) with ESMTP id 779D543D1F for ; Tue, 4 May 2004 11:17:21 -0700 (PDT) (envelope-from root@8lanet.com) Received: by smtp.8lanet.com (Postfix, from userid 0) id D5C7FA540; Wed, 5 May 2004 02:17:19 +0800 (CST) Message-Id: <20040504181719.D5C7FA540@smtp.8lanet.com> Date: Wed, 5 May 2004 02:17:19 +0800 (CST) From: Yen-Shuo Su To: FreeBSD-gnats-submit@FreeBSD.org X-Send-Pr-Version: 3.113 cc: yssu@CCCA.Net Subject: ports/66266: ports/net/yptransitd: support FreeBSD NIS Map (master.passwd.*) X-BeenThere: freebsd-ports-bugs@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list Reply-To: Yen-Shuo Su List-Id: Ports bug reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 04 May 2004 18:20:01 -0000 >Number: 66266 >Category: ports >Synopsis: ports/net/yptransitd: support FreeBSD NIS Map (master.passwd.*) >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: Tue May 04 11:20:00 PDT 2004 >Closed-Date: >Last-Modified: >Originator: Yen-Shuo Su >Release: FreeBSD 4.9-RELEASE-p5 i386 >Organization: Campus Computer Communication Association >Environment: System: FreeBSD WaterMelon 4.9-RELEASE-p5 FreeBSD 4.9-RELEASE-p5 #3: Mon Apr 26 15:57:26 CST 2004 root@WaterMelon:/usr/obj/usr/src/sys/GIGABYTE-2U-XEON i386 >Description: orignal yptransitd does not support FreeBSD NIS Map: master.passwd.* >How-To-Repeat: you cannot ypcat -k master.passwd from yptransitd >Fix: 1. Upgrade Makefile by using USE_OPENLDAP *** Makefile.orig Wed May 5 02:12:01 2004 --- Makefile Wed May 5 02:11:55 2004 *************** *** 14,20 **** MAINTAINER= mjoyner@hq.dyns.cx COMMENT= A replacement for nss_ldap ! LIB_DEPENDS= ldap.2:${PORTSDIR}/net/openldap20-client USE_BISON= yes INSTALLS_SHLIB= yes --- 14,20 ---- MAINTAINER= mjoyner@hq.dyns.cx COMMENT= A replacement for nss_ldap ! USE_OPENLDAP= yes USE_BISON= yes INSTALLS_SHLIB= yes 2. New patch in ports/net/yptransitd/files/patch-freebsd-master-passwd diff -rc /services/build/usr/ports/net/yptransitd/work/yptransitd-0.5/src/modules/ldap/cache.c ./src/modules/ldap/cache.c *** /services/build/usr/ports/net/yptransitd/work/yptransitd-0.5/src/modules/ldap/cache.c Tue Oct 9 10:34:51 2001 --- ./src/modules/ldap/cache.c Wed May 5 01:51:16 2004 *************** *** 278,285 **** } else if(!strcasecmp(attr, "userpassword")) { ! pwinfo->userpassword = fix_password(values); ! pwinfo->size += strlen(pwinfo->userpassword); } else if(!strcasecmp(attr, "uidnumber")) { --- 278,285 ---- } else if(!strcasecmp(attr, "userpassword")) { ! pwinfo->userpassword = safe_strdup("*"); ! pwinfo->size += strlen("*"); } else if(!strcasecmp(attr, "uidnumber")) { *************** *** 322,327 **** --- 322,394 ---- return (rval); } + int assemble_master_passwd(valdat *val, LDAPMessage *user, struct pwinfo *pwinfo) + { + ypstat rval; + char *attr; + BerElement *ber = NULL; + + rval = YP_YPERR; + fill_pwinfo(pwinfo); + + for (attr = ldap_first_attribute (ldaprefs.ldap, user, &ber); attr; attr = ldap_next_attribute (ldaprefs.ldap, user, ber)) + { + char **values; + + values = ldap_get_values (ldaprefs.ldap, user, attr); + if (values) + { + if(!strcasecmp(attr, "uid")) + { + pwinfo->uid = safe_strdup(values[0]); + pwinfo->size += strlen(values[0]); + } else + if(!strcasecmp(attr, "userpassword")) + { + pwinfo->userpassword = fix_password(values); + pwinfo->size += strlen(pwinfo->userpassword); + } else + if(!strcasecmp(attr, "uidnumber")) + { + pwinfo->uidnumber = safe_strdup(values[0]); + pwinfo->size += strlen(values[0]); + } else + if(!strcasecmp(attr, "gidnumber")) + { + pwinfo->gidnumber = safe_strdup(values[0]); + pwinfo->size += strlen(values[0]); + } else + if(!strcasecmp(attr, "gecos")) + { + pwinfo->gecos = safe_strdup(values[0]); + pwinfo->size += strlen(values[0]); + } else + if(!strcasecmp(attr, "homedirectory")) + { + pwinfo->homedirectory = safe_strdup(values[0]); + pwinfo->size += strlen(values[0]); + } else + if(!strcasecmp(attr, "loginshell")) + { + pwinfo->loginshell = safe_strdup(values[0]); + pwinfo->size += strlen(values[0]); + } + ldap_value_free(values); + } + } + if (check_pwinfo(pwinfo) == YP_TRUE) + { + val->valdat_len = pwinfo->size + MPWLINE_SIZE; + val->valdat_val = safe_malloc(val->valdat_len + 1); + sprintf(val->valdat_val, MPWLINE, pwinfo->uid, pwinfo->userpassword, pwinfo->uidnumber, pwinfo->gidnumber, pwinfo->gecos, pwinfo->homedirectory, pwinfo->loginshell); + rval = YP_TRUE; + } else { + rval = YP_NOKEY; + } + + return (rval); + } + int assemble_group(valdat *val, LDAPMessage *group, struct gwinfo *gwinfo) { ypstat rval; *************** *** 538,548 **** free(filter); free(base); } else if (!strcmp((char *) mapcache_current->map, "group.byname")) { /* XXX Add preferences for filter and basedn */ base = safe_malloc(strlen(ldaprefs.basedn) + strlen("ou=Group,") + 1); sprintf(base, "%s%s", "ou=Group,", ldaprefs.basedn); filter = safe_strdup("(objectClass=posixGroup)"); if(ldap_search_s(ldaprefs.ldap, --- 605,689 ---- free(filter); free(base); } + else if (!strcmp((char *) mapcache_current->map, "master.passwd.byname")) + { + /* XXX Add preferences for filter and basedn */ + base = safe_malloc(strlen(ldaprefs.basedn) + strlen("ou=Staffs,") + 1); + sprintf(base, "%s%s", "ou=Staffs,", ldaprefs.basedn); + filter = safe_strdup("(objectClass=posixAccount)"); + + if(ldap_search_s(ldaprefs.ldap, + base, + LDAP_SCOPE_ONELEVEL, + filter, + user_attributes, + 0, + &ldapreturn) != -1) + { + for (record = ldap_first_entry(ldaprefs.ldap, ldapreturn); record; record = ldap_next_entry(ldaprefs.ldap, record)) + { + pwinfo = safe_malloc(sizeof(struct pwinfo)); + rval = assemble_master_passwd(val, record, pwinfo); + if(rval == YP_TRUE); + { + if(check_unique(mapcache_current, pwinfo->uid) == YP_NOKEY) + { + mapentry_current = safe_malloc(sizeof(struct mapentry)); + mapentry_current->key = safe_strdup(pwinfo->uid); + mapentry_current->val = val->valdat_val; + mapentry_current->next = mapcache_current->mapentry; + mapcache_current->mapentry = mapentry_current; + } + } + clean_pwinfo(pwinfo); + } + } + ldap_msgfree(ldapreturn); + free(filter); + free(base); + } + else if (!strcmp((char *) mapcache_current->map, "master.passwd.byuid")) + { + /* XXX Add preferences for filter and basedn */ + base = safe_malloc(strlen(ldaprefs.basedn) + strlen("ou=Staffs,") + 1); + sprintf(base, "%s%s", "ou=Staffs,", ldaprefs.basedn); + filter = safe_strdup("(objectClass=posixAccount)"); + + if(ldap_search_s(ldaprefs.ldap, + base, + LDAP_SCOPE_ONELEVEL, + filter, + user_attributes, + 0, + &ldapreturn) != -1) + { + for (record = ldap_first_entry(ldaprefs.ldap, ldapreturn); record; record = ldap_next_entry(ldaprefs.ldap, record)) + { + pwinfo = safe_malloc(sizeof(struct pwinfo)); + rval = assemble_master_passwd(val, record, pwinfo); + if(rval == YP_TRUE); + { + if(check_unique(mapcache_current, pwinfo->uidnumber) == YP_NOKEY) + { + mapentry_current = safe_malloc(sizeof(struct mapentry)); + mapentry_current->key = safe_strdup(pwinfo->uidnumber); + mapentry_current->val = val->valdat_val; + mapentry_current->next = mapcache_current->mapentry; + mapcache_current->mapentry = mapentry_current; + } + } + clean_pwinfo(pwinfo); + } + } + ldap_msgfree(ldapreturn); + free(filter); + free(base); + } else if (!strcmp((char *) mapcache_current->map, "group.byname")) { /* XXX Add preferences for filter and basedn */ base = safe_malloc(strlen(ldaprefs.basedn) + strlen("ou=Group,") + 1); sprintf(base, "%s%s", "ou=Group,", ldaprefs.basedn); filter = safe_strdup("(objectClass=posixGroup)"); if(ldap_search_s(ldaprefs.ldap, diff -rc /services/build/usr/ports/net/yptransitd/work/yptransitd-0.5/src/modules/ldap/ldap.c ./src/modules/ldap/ldap.c *** /services/build/usr/ports/net/yptransitd/work/yptransitd-0.5/src/modules/ldap/ldap.c Wed Oct 3 09:45:29 2001 --- ./src/modules/ldap/ldap.c Wed May 5 01:39:20 2004 *************** *** 60,66 **** --- 60,69 ---- #include "cache.h" #define CONFIG_FILE CONFDIR "/ldap.conf" + /* #define MAPS "auto.home auto_home amd.home passwd.byname passwd.byuid group.byname group.bygid" + */ + #define MAPS "auto.home auto_home amd.home master.passwd.byname master.passwd.byuid passwd.byname passwd.byuid group.byname group.bygid" struct ldaprefs ldaprefs; diff -rc /services/build/usr/ports/net/yptransitd/work/yptransitd-0.5/src/modules/ldap/ldap.h ./src/modules/ldap/ldap.h *** /services/build/usr/ports/net/yptransitd/work/yptransitd-0.5/src/modules/ldap/ldap.h Wed Oct 3 08:59:53 2001 --- ./src/modules/ldap/ldap.h Wed May 5 01:49:57 2004 *************** *** 42,47 **** --- 42,50 ---- #define PWLINE "%s:%s:%s:%s:%s:%s:%s" #define PWLINE_SIZE 6 + #define MPWLINE "%s:%s:%s:%s::0:0:%s:%s:%s" + #define MPWLINE_SIZE 11 + #define GWLINE "%s:%s:%s:%s" #define GWLINE_SIZE 3 >Release-Note: >Audit-Trail: >Unformatted: