This patch fixes a bug in the ldap search which will only use the first mount point found in an LDAP entry.

For example if an ldap entry looks like this:

dn: cn=%T%I_apps, nisMapName=auto_home, ou=foo.bar
nismapname: auto_home
objectClass: top
objectClass: nisobject
nismapentry: foo.bar.ti.com:/vol/vol6/TI_apps
cn: %T%I_apps
cn: TI_apps

Then the auto_home map will only be used in /%T%I_apps

If you try to cd into TI_apps you'll just get an error. The patch forces ldap_search to iterate through all of the different cn's in an entry so you can cd into either %T%I_apps or TI_apps and the proper directory will still be automounted.

Thanks,
Chris
--- autofs-4.1.3/modules/lookup_ldap.c.orig	2004-04-03 01:14:33.000000000 -0600
+++ autofs-4.1.3/modules/lookup_ldap.c	2004-12-10 13:06:21.470895667 -0600
@@ -154,7 +154,7 @@
 			struct lookup_context *context)
 {
 	struct lookup_context *ctxt = (struct lookup_context *) context;
-	int rv, i, l, count;
+	int rv, i, j, l, count, keycount;
 	time_t age = time(NULL);
 	char *query;
 	LDAPMessage *result, *e;
@@ -250,10 +250,14 @@
 		}
 
 		count = ldap_count_values(values);
+		keycount = ldap_count_values(keyValue);
 		for (i = 0; i < count; i++) {
-			if (**keyValue == '/' && strlen(*keyValue) == 1)
-				**keyValue = '*';
-			cache_update(*keyValue, values[i], age);
+		  	for (j = 0; j < keycount; j++) {
+				if (*(keyValue[j]) == '/' &&
+				    strlen(keyValue[j]) == 1)
+			  		*(keyValue[j]) = '*';
+				cache_update(keyValue[j], values[i], age);
+			}
 		}
 		ldap_value_free(values);
 
_______________________________________________
autofs mailing list
[EMAIL PROTECTED]
http://linux.kernel.org/mailman/listinfo/autofs

Reply via email to