mirror of
https://git.freebsd.org/ports.git
synced 2025-07-01 17:40:40 -04:00
no longer applies by modern FreeBSD patch(1). Patch was applied on the FreeBSD 8.4 and new patches generated with ``make makepatch''. Repocopy was waived since three-way split would make the diff unnecessarily noisy and there's not much history to preserve anyways as the patch had not been modified since its inception. While here, unbreak the build against modern compilers (Clang 11, GCC 10) by forcing the `-fcommon' mode. Reported by: pkg-fallout
177 lines
5.5 KiB
C
177 lines
5.5 KiB
C
--- src/modules/ldap/cache.c.orig 2001-10-09 02:34:51 UTC
|
|
+++ src/modules/ldap/cache.c
|
|
@@ -278,8 +278,8 @@ int assemble_passwd(valdat *val, LDAPMes
|
|
} else
|
|
if(!strcasecmp(attr, "userpassword"))
|
|
{
|
|
- pwinfo->userpassword = fix_password(values);
|
|
- pwinfo->size += strlen(pwinfo->userpassword);
|
|
+ pwinfo->userpassword = safe_strdup("*");
|
|
+ pwinfo->size += strlen("*");
|
|
} else
|
|
if(!strcasecmp(attr, "uidnumber"))
|
|
{
|
|
@@ -322,6 +322,73 @@ int assemble_passwd(valdat *val, LDAPMes
|
|
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;
|
|
@@ -452,7 +519,7 @@ struct mapcache *create_cache (ypmaplist
|
|
valdat *val;
|
|
int rval;
|
|
|
|
- (void *) mapcache_current = (void *) mapcache_head = (void *) ldapreturn = (void *) record = NULL;
|
|
+ mapcache_current = mapcache_head = ldapreturn = record = NULL;
|
|
val = safe_malloc(sizeof(valdat));
|
|
|
|
for(maplist_current = maps; maplist_current; maplist_current = maplist_current->next)
|
|
@@ -538,6 +605,80 @@ struct mapcache *create_cache (ypmaplist
|
|
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 */
|