[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

rpms/autofs/devel autofs-5.0.0_beta5-auth-config.patch, NONE, 1.1 autofs-5.0.0_beta5-compile-warnings.patch, NONE, 1.1 autofs-5.0.0_beta5-get-dn-update.patch, NONE, 1.1 autofs-5.0.0_beta5-get-dn.patch, NONE, 1.1 autofs-5.0.0_beta5-ldap-default-auth.patch, NONE, 1.1 autofs-5.0.0_beta5-mapclass.patch, NONE, 1.1 autofs-5.0.0_beta5-parse-old-style-dn.patch, NONE, 1.1 autofs.spec, 1.112, 1.113



Author: ikent

Update of /cvs/dist/rpms/autofs/devel
In directory cvs.devel.redhat.com:/tmp/cvs-serv26863

Modified Files:
	autofs.spec 
Added Files:
	autofs-5.0.0_beta5-auth-config.patch 
	autofs-5.0.0_beta5-compile-warnings.patch 
	autofs-5.0.0_beta5-get-dn-update.patch 
	autofs-5.0.0_beta5-get-dn.patch 
	autofs-5.0.0_beta5-ldap-default-auth.patch 
	autofs-5.0.0_beta5-mapclass.patch 
	autofs-5.0.0_beta5-parse-old-style-dn.patch 
Log Message:
* Mon Jun 26 2006 Ian Kent <ikent redhat com> - 5.0.0_beta5-4
- correct spelling error in default config.
- fix default auth config not being installed.
- change LDAP query method as my test db was incorrect.
- change ldap defaults code to handle missing auth config.
- fix mistake in parsing old style LDAP specs.
- update LDAP so that new query method also works for old syntax.


autofs-5.0.0_beta5-auth-config.patch:
 CHANGELOG                     |    1 
 samples/Makefile              |   48 +++++++++++++++++++++++++++++++-----------
 samples/autofs_ldap_auth.conf |    2 -
 3 files changed, 38 insertions(+), 13 deletions(-)

--- NEW FILE autofs-5.0.0_beta5-auth-config.patch ---
diff --git a/CHANGELOG b/CHANGELOG
index 7c193e8..3397b3b 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -5,6 +5,7 @@
 - fix couple of memory leaks in lookup_yp.c.
 - fix pasre error in replicated server module.
 - correct spelling error in default config.
+- fix default auth config not being installed.
 
 20/6/2006 autofs-5.0.0_beta5
 ---------------------------
diff --git a/samples/Makefile b/samples/Makefile
index 2123dc8..f65658a 100644
--- a/samples/Makefile
+++ b/samples/Makefile
@@ -30,7 +30,7 @@ autofs.init:
 	@echo
 ifneq ($(initdir),)
 	install -d -m 755 $(INSTALLROOT)$(initdir)
-	install -c rc.autofs -m 755 $(INSTALLROOT)$(initdir)/autofs
+	install rc.autofs -m 755 $(INSTALLROOT)$(initdir)/autofs
 else
 	if test -d $(INSTALLROOT)/etc/rc.d ; then \
 		install -c rc.autofs -m 755 $(INSTALLROOT)/etc/rc.d ; \
@@ -46,12 +46,12 @@ autofs.conf: autofs.conf.default
 	@echo "Installing autofs default configuation in $(autofsconfdir)"
 	@if test -z "$(CONFIG)" ; \
 	then \
-		install -v -c autofs.conf.default -m 755 \
+		install -v autofs.conf.default -m 755 \
 			$(INSTALLROOT)$(autofsconfdir)/autofs.conf.new ; \
 		echo "Found existing backup of configuration file." ; \
 		echo "Installed package default configuration file as \"autofs.conf.new\"." ; \
 	else \
-		install -v -c autofs.conf.default -m 755 $(CONFIG) \
+		install -v autofs.conf.default -m 755 $(CONFIG) \
 				$(INSTALLROOT)$(autofsconfdir)/autofs ; \
 		echo "Installed package configuration configuration as \"autofs\"." ; \
 		if test -z "$(CEXISTS)" ; \
@@ -60,6 +60,29 @@ autofs.conf: autofs.conf.default
 		fi ; \
 	fi
 
+AUTH = $(shell test -e $(INSTALLROOT)$(autofsmapdir)/autofs_ldap_auth.conf.orig || echo "-b --suffix=.orig")
+AEXISTS = $(shell test -e $(INSTALLROOT)$(autofsmapdir)/autofs_ldap_auth.conf || echo "no")
+
+.PHONY: autofs_ldap_auth.conf
+autofs_ldap_auth.conf:
+	@echo
+	@echo "Installing autofs ldap auth config \"autofs_ldap_auth.conf\" in $(autofsmapdir)"
+	@if test -z "$(AUTH)" ; \
+	then \
+		install -v autofs_ldap_auth.conf -m 600 \
+			$(INSTALLROOT)$(autofsmapdir)/autofs_ldap_auth.conf.new ; \
+		echo "Found existing backup of auth config \"autofs_ldap_auth.conf\"." ; \
+		echo "Installed package auth config as \"autofs_ldap_auth.conf.new\"." ; \
+	else \
+		install -v autofs_ldap_auth.conf -m 600 $(AUTH) \
+				$(INSTALLROOT)$(autofsmapdir)/autofs_ldap_auth.conf ; \
+		echo "Installed package auth config as \"autofs_ldap_auth.conf\"." ; \
+		if test -z "$(SEXISTS)" ; \
+		then \
+			echo "Backup of existing auth config made to \".utofs_ldap_auth.conf.orig\"." ; \
+		fi ; \
+	fi
+
 MASTER = $(shell test -e $(INSTALLROOT)$(autofsmapdir)/auto.master.orig || echo "-b --suffix=.orig")
 MEXISTS = $(shell test -e $(INSTALLROOT)$(autofsmapdir)/auto.master || echo "no")
 
@@ -69,12 +92,12 @@ auto.master:
 	@echo "Installing autofs default master map in $(autofsmapdir)"
 	@if test -z "$(MASTER)" ; \
 	then \
-		install -v -c auto.master -m 644 \
+		install -v auto.master -m 644 \
 			$(INSTALLROOT)$(autofsmapdir)/auto.master.new ; \
 		echo "Found existing backup of master map." ; \
 		echo "Installed package default master map as \"auto.master.new\"." ; \
 	else \
-		install -v -c auto.master -m 644 $(MASTER) \
+		install -v auto.master -m 644 $(MASTER) \
 				$(INSTALLROOT)$(autofsmapdir)/auto.master ; \
 		echo "Installed package master map as \"auto.master\"." ; \
 		if test -z "$(MEXISTS)" ; \
@@ -92,12 +115,12 @@ auto.misc:
 	@echo "Installing autofs sample map \"auto.misc\" in $(autofsmapdir)"
 	@if test -z "$(MISC)" ; \
 	then \
-		install -v -c auto.misc -m 644 \
+		install -v auto.misc -m 644 \
 			$(INSTALLROOT)$(autofsmapdir)/auto.misc.new ; \
 		echo "Found existing backup of sample map \"auto.misc\"." ; \
 		echo "Installed package sample as \"auto.misc.new\"." ; \
 	else \
-		install -v -c auto.misc -m 644 $(MISC) \
+		install -v auto.misc -m 644 $(MISC) \
 				$(INSTALLROOT)$(autofsmapdir)/auto.misc ; \
 		echo "Installed package sample map as \"auto.misc\"." ; \
 		if test -z "$(MEXISTS)" ; \
@@ -115,12 +138,12 @@ auto.net:
 	@echo "Installing autofs sample map \"auto.net\" in $(autofsmapdir)"
 	@if test -z "$(NET)" ; \
 	then \
-		install -v -c auto.net -m 755 \
+		install -v auto.net -m 755 \
 			$(INSTALLROOT)$(autofsmapdir)/auto.net.new ; \
 		echo "Found existing backup of sample map \"auto.net\"." ; \
 		echo "Installed package sample as \"auto.net.new\"." ; \
 	else \
-		install -v -c auto.net -m 755 $(NET) \
+		install -v auto.net -m 755 $(NET) \
 				$(INSTALLROOT)$(autofsmapdir)/auto.net ; \
 		echo "Installed package sample map as \"auto.net\"." ; \
 		if test -z "$(NEXISTS)" ; \
@@ -138,12 +161,12 @@ auto.smb:
 	@echo "Installing autofs sample map \"auto.smb\" in $(autofsmapdir)"
 	@if test -z "$(SMB)" ; \
 	then \
-		install -v -c auto.smb -m 755 \
+		install -v auto.smb -m 755 \
 			$(INSTALLROOT)$(autofsmapdir)/auto.smb.new ; \
 		echo "Found existing backup of sample map \"auto.smb\"." ; \
 		echo "Installed package sample as \"auto.smb.new\"." ; \
 	else \
-		install -v -c auto.net -m 755 $(SMB) \
+		install -v auto.net -m 755 $(SMB) \
 				$(INSTALLROOT)$(autofsmapdir)/auto.smb ; \
 		echo "Installed package sample map as \"auto.smb\"." ; \
 		if test -z "$(SEXISTS)" ; \
@@ -152,7 +175,8 @@ auto.smb:
 		fi ; \
 	fi
 
-install: rc.autofs autofs.conf.default dirs autofs.init autofs.conf $(SAMPLES)
+install: rc.autofs autofs.conf.default dirs autofs.init autofs.conf \
+		autofs_ldap_auth.conf $(SAMPLES)
 	@echo
 
 clean:
diff --git a/samples/autofs_ldap_auth.conf b/samples/autofs_ldap_auth.conf
index feb6a2e..265571e 100644
--- a/samples/autofs_ldap_auth.conf
+++ b/samples/autofs_ldap_auth.conf
@@ -1,6 +1,6 @@
 <?xml version="1.0" ?>
 <autofs_ldap_sasl_conf
-	usetls="yes"
+	usetls="no"
 	tlsrequired="no"
 	authrequired="no"
 	authtype="DIGEST-MD5"

autofs-5.0.0_beta5-compile-warnings.patch:
 lib/master.c          |    4 +---
 lib/rpc_subs.c        |    1 +
 modules/lookup_ldap.c |    2 --
 modules/lookup_yp.c   |    2 +-
 modules/mount_nfs.c   |    2 +-
 5 files changed, 4 insertions(+), 7 deletions(-)

--- NEW FILE autofs-5.0.0_beta5-compile-warnings.patch ---
diff --git a/lib/master.c b/lib/master.c
index d61df03..a0a7ae8 100644
--- a/lib/master.c
+++ b/lib/master.c
@@ -616,8 +616,6 @@ void master_remove_mapent(struct master_
 
 void master_free_mapent_sources(struct master_mapent *entry, unsigned int free_cache)
 {
-	int status;
-
 	master_source_writelock(entry);
 
 	if (entry->maps) {
@@ -659,7 +657,7 @@ void master_free_mapent(struct master_ma
 struct master *master_new(const char *name, unsigned int timeout, unsigned int ghost)
 {
 	struct master *master;
-	char *tmp;
+	const char *tmp;
 
 	master = malloc(sizeof(struct master));
 	if (!master)
diff --git a/lib/rpc_subs.c b/lib/rpc_subs.c
index 143dbdd..6ce4cf7 100644
--- a/lib/rpc_subs.c
+++ b/lib/rpc_subs.c
@@ -28,6 +28,7 @@ #include <netdb.h>
 #include <netinet/in.h>
 #include <arpa/inet.h>
 #include <sys/fcntl.h>
+#include <rpcsvc/ypclnt.h>
 #include <errno.h>
 
 #include "mount.h"
diff --git a/modules/lookup_ldap.c b/modules/lookup_ldap.c
index 7fa2157..130a0c6 100644
--- a/modules/lookup_ldap.c
+++ b/modules/lookup_ldap.c
@@ -1227,8 +1227,6 @@ int lookup_read_map(struct autofs_point 
 {
 	struct lookup_context *ctxt = (struct lookup_context *) context;
 	int rv = LDAP_SUCCESS;
-	char *key;
-	int keylen;
 	int ret;
 
 	ret = read_one_map(ap, ctxt, age, &rv);
diff --git a/modules/lookup_yp.c b/modules/lookup_yp.c
index 36563a9..25bc6db 100644
--- a/modules/lookup_yp.c
+++ b/modules/lookup_yp.c
@@ -436,7 +436,7 @@ static int check_map_indirect(struct aut
 {
 	struct map_source *source = ap->entry->current;
 	struct mapent_cache *mc = source->mc;
-	struct mapent *me, *exists;
+	struct mapent *exists;
 	unsigned int map_order;
 	int need_map = 0;
 	int ret = 0;
diff --git a/modules/mount_nfs.c b/modules/mount_nfs.c
index e25988d..a67d01c 100644
--- a/modules/mount_nfs.c
+++ b/modules/mount_nfs.c
@@ -47,7 +47,7 @@ int mount_init(void **context)
 {
 	/* Make sure we have the local mount method available */
 	if (!mount_bind) {
-		if (mount_bind = open_mount("bind", MODPREFIX));
+		if ((mount_bind = open_mount("bind", MODPREFIX)));
 			init_ctr++;
 	} else
 		init_ctr++;

autofs-5.0.0_beta5-get-dn-update.patch:
 CHANGELOG             |    2 ++
 modules/lookup_ldap.c |   22 ++++++++++++----------
 2 files changed, 14 insertions(+), 10 deletions(-)

--- NEW FILE autofs-5.0.0_beta5-get-dn-update.patch ---
diff --git a/CHANGELOG b/CHANGELOG
index 77fde7e..ced35cc 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -9,6 +9,8 @@
 - change LDAP query method as my test db was incorrect.
 - change ldap defaults code to handle missing auth config.
 - fix mistake in parsing old style LDAP specs.
+- update LDAP so that new query methos also works for old
+  syntax.
 
 20/6/2006 autofs-5.0.0_beta5
 ---------------------------
diff --git a/modules/lookup_ldap.c b/modules/lookup_ldap.c
index 9794c5f..7fa2157 100644
--- a/modules/lookup_ldap.c
+++ b/modules/lookup_ldap.c
@@ -709,6 +709,8 @@ static void free_context(struct lookup_c
 		free(ctxt->secret);
 	if (ctxt->mapname)
 		free(ctxt->mapname);
+	if (ctxt->qdn)
+		ldap_memfree(ctxt->qdn);
 	if (ctxt->server)
 		free(ctxt->server);
 	if (ctxt->base)
@@ -725,6 +727,7 @@ static int get_query_dn(LDAP *ldap, stru
 	LDAPMessage *result, *e;
 	char *class, *key;
 	char *attrs[2];
+	int scope;
 	int rv, l;
 
 	class = ctxt->map_obj_class;
@@ -761,17 +764,18 @@ static int get_query_dn(LDAP *ldap, stru
 			      MODPREFIX "error forming query string");
 			return 0;
 		}
+		scope = LDAP_SCOPE_ONE;
 	} else {
 		if (sprintf(query, "(objectclass=%s)", class) >= l) {
 			debug(LOGOPT_NONE,
 			      MODPREFIX "error forming query string");
 			return 0;
 		}
+		scope = LDAP_SCOPE_BASE;
 	}
 	query[l] = '\0';
 
-	rv = ldap_search_s(ldap, ctxt->base, LDAP_SCOPE_ONE,
-			   query, attrs, 0, &result);
+	rv = ldap_search_s(ldap, ctxt->base, scope, query, attrs, 0, &result);
 
 	if ((rv != LDAP_SUCCESS) || !result) {
 		error(LOGOPT_NONE,
@@ -898,6 +902,7 @@ int lookup_read_master(struct master *ma
 	char **keyValue = NULL;
 	char **values = NULL;
 	char *attrs[3];
+	int scope = LDAP_SCOPE_SUBTREE;
 	LDAP *ldap;
 
 	class = ctxt->entry_obj_class;
@@ -932,8 +937,7 @@ int lookup_read_master(struct master *ma
 	debug(LOGOPT_NONE,
 	      MODPREFIX "searching for \"%s\" under \"%s\"", query, ctxt->qdn);
 
-	rv = ldap_search_s(ldap, ctxt->qdn,
-			   LDAP_SCOPE_SUBTREE, query, attrs, 0, &result);
+	rv = ldap_search_s(ldap, ctxt->qdn, scope, query, attrs, 0, &result);
 
 	if ((rv != LDAP_SUCCESS) || !result) {
 		error(LOGOPT_NONE,
@@ -1043,6 +1047,7 @@ static int read_one_map(struct autofs_po
 	char **keyValue = NULL;
 	char **values = NULL;
 	char *attrs[3];
+	int scope = LDAP_SCOPE_SUBTREE;
 	LDAP *ldap;
 
 	if (ctxt == NULL) {
@@ -1083,8 +1088,7 @@ static int read_one_map(struct autofs_po
 	debug(ap->logopt,
 	      MODPREFIX "searching for \"%s\" under \"%s\"", query, ctxt->qdn);
 
-	rv = ldap_search_s(ldap, ctxt->qdn, LDAP_SCOPE_SUBTREE,
-			   query, attrs, 0, &result);
+	rv = ldap_search_s(ldap, ctxt->qdn, scope, query, attrs, 0, &result);
 
 	if ((rv != LDAP_SUCCESS) || !result) {
 		debug(ap->logopt,
@@ -1253,6 +1257,7 @@ static int lookup_one(struct autofs_poin
 	char **keyValue;
 	char **values = NULL;
 	char *attrs[3];
+	int scope = LDAP_SCOPE_SUBTREE;
 	LDAP *ldap;
 	char *mapent = NULL;
 	int ret = CHE_OK;
@@ -1303,8 +1308,7 @@ static int lookup_one(struct autofs_poin
 	if (!ldap)
 		return CHE_FAIL;
 
-	rv = ldap_search_s(ldap, ctxt->qdn, LDAP_SCOPE_SUBTREE,
-			   query, attrs, 0, &result);
+	rv = ldap_search_s(ldap, ctxt->qdn, scope, query, attrs, 0, &result);
 
 	if ((rv != LDAP_SUCCESS) || !result) {
 		crit(ap->logopt, MODPREFIX "query failed for %s", query);
@@ -1565,8 +1569,6 @@ #if WITH_SASL
 	EVP_cleanup();
 	ERR_free_strings();
 #endif
-	if (ctxt->qdn)
-		ldap_memfree(ctxt->qdn);
 	free_context(ctxt);
 	return rv;
 }

autofs-5.0.0_beta5-get-dn.patch:
 CHANGELOG             |    1 
 include/lookup_ldap.h |    1 
 modules/lookup_ldap.c |  207 +++++++++++++++++++++++++++-----------------------
 3 files changed, 116 insertions(+), 93 deletions(-)

--- NEW FILE autofs-5.0.0_beta5-get-dn.patch ---
diff --git a/CHANGELOG b/CHANGELOG
index 3397b3b..c5fb124 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -6,6 +6,7 @@
 - fix pasre error in replicated server module.
 - correct spelling error in default config.
 - fix default auth config not being installed.
+- change LDAP query method as my test db was incorrect.
 
 20/6/2006 autofs-5.0.0_beta5
 ---------------------------
diff --git a/include/lookup_ldap.h b/include/lookup_ldap.h
index 0d14b1b..db6389c 100644
--- a/include/lookup_ldap.h
+++ b/include/lookup_ldap.h
@@ -14,6 +14,7 @@ struct lookup_context {
 
 	char *server;
 	char *base;
+	char *qdn;
 
 	/* LDAP version 2 or 3 */
 	int version;
diff --git a/modules/lookup_ldap.c b/modules/lookup_ldap.c
index 8a6faca..2910d38 100644
--- a/modules/lookup_ldap.c
+++ b/modules/lookup_ldap.c
@@ -683,6 +683,88 @@ static void free_context(struct lookup_c
 	return;
 }
 
+static int get_query_dn(LDAP *ldap, struct lookup_context *ctxt)
+{
+	char buf[PARSE_MAX_BUF];
+	char *query, *dn;
+	LDAPMessage *result, *e;
+	char *class, *key;
+	char *attrs[2];
+	int rv, l;
+
+	class = ctxt->map_obj_class;
+	key = ctxt->map_attr;
+
+	attrs[0] = LDAP_NO_ATTRS;
+	attrs[1] = NULL;
+
+	if (!ctxt->mapname && !ctxt->base) {
+		error(LOGOPT_ANY, MODPREFIX "no master map to lookup");
+		return 0;
+	}
+
+	/* Build a query string. */
+	l = strlen("(objectclass=)") + strlen(class) + 1;
+	if (ctxt->mapname)
+		l += strlen(key) + strlen(ctxt->mapname) + strlen("(&(=))");
+
+	query = alloca(l);
+	if (query == NULL) {
+		char *estr = strerror_r(errno, buf, MAX_ERR_BUF);
+		crit(LOGOPT_ANY, MODPREFIX "alloca: %s", estr);
+		return NSS_STATUS_UNAVAIL;
+	}
+
+	/*
+	 * If we have a master mapname construct a query using it
+	 * otherwise assume the base dn will catch it.
+	 */
+	if (ctxt->mapname) {
+		if (sprintf(query, "(&(objectclass=%s)(%s=%.*s))", class,
+		     key, (int) strlen(ctxt->mapname), ctxt->mapname) >= l) {
+			debug(LOGOPT_NONE,
+			      MODPREFIX "error forming query string");
+			return 0;
+		}
+	} else {
+		if (sprintf(query, "(objectclass=%s)", class) >= l) {
+			debug(LOGOPT_NONE,
+			      MODPREFIX "error forming query string");
+			return 0;
+		}
+	}
+	query[l] = '\0';
+
+	rv = ldap_search_s(ldap, ctxt->base, LDAP_SCOPE_ONE,
+			   query, attrs, 0, &result);
+
+	if ((rv != LDAP_SUCCESS) || !result) {
+		error(LOGOPT_NONE,
+		      MODPREFIX "query failed for %s: %s",
+		      query, ldap_err2string(rv));
+		ldap_unbind_connection(ldap, ctxt);
+		return 0;
+	}
+
+	e = ldap_first_entry(ldap, result);
+	if (e) {
+		dn = ldap_get_dn(ldap, e);
+		debug(LOGOPT_NONE, MODPREFIX "query dn %s", dn);
+		ldap_msgfree(result);
+	} else {
+		debug(LOGOPT_NONE,
+		      MODPREFIX "query succeeded, no matches for %s",
+		      query);
+		ldap_msgfree(result);
+		ldap_unbind_connection(ldap, ctxt);
+		return 0;
+	}
+
+	ctxt->qdn = dn;
+
+	return 1;
+}
+
 /*
  * This initializes a context (persistent non-global data) for queries to
  * this module.  Return zero if we succeed.
@@ -746,6 +828,13 @@ #endif
 		return 1;
 	}
 
+	if (!get_query_dn(ldap, ctxt)) {
+		error(LOGOPT_ANY, MODPREFIX "failed to get query dn");
+		ldap_unbind_connection(ldap, ctxt);
+		free_context(ctxt);
+		return 1;
+	}
+
 	/* Okay, we're done here. */
 	ldap_unbind_connection(ldap, ctxt);
 
@@ -770,14 +859,13 @@ int lookup_read_master(struct master *ma
 	char buf[PARSE_MAX_BUF];
 	char *query;
 	LDAPMessage *result, *e;
-	char *class, *key, *info, *entry;
+	char *class, *info, *entry;
 	char **keyValue = NULL;
 	char **values = NULL;
 	char *attrs[3];
 	LDAP *ldap;
 
 	class = ctxt->entry_obj_class;
-	key = ctxt->map_attr;
 	entry = ctxt->entry_attr;
 	info = ctxt->value_attr;
 
@@ -785,15 +873,7 @@ int lookup_read_master(struct master *ma
 	attrs[1] = info;
 	attrs[2] = NULL;
 
-	if (!ctxt->mapname && !ctxt->base) {
-		error(LOGOPT_ANY, MODPREFIX "no master map to lookup");
-		return NSS_STATUS_UNAVAIL;
-	}
-
-	/* Build a query string. */
 	l = strlen("(objectclass=)") + strlen(class) + 1;
-	if (ctxt->mapname)
-		l += strlen(key) + strlen(ctxt->mapname) + strlen("(&(=))");
 
 	query = alloca(l);
 	if (query == NULL) {
@@ -802,22 +882,9 @@ int lookup_read_master(struct master *ma
 		return NSS_STATUS_UNAVAIL;
 	}
 
-	/*
-	 * If we have a master mapname construct a query using it
-	 * otherwise assume the base dn will catch it.
-	 */
-	memset(query, '\0', l);
-	if (ctxt->mapname) {
-		if (sprintf(query, "(&(objectclass=%s)(%s=%.*s))", class,
-		     key, (int) strlen(ctxt->mapname), ctxt->mapname) >= l) {
-			debug(LOGOPT_NONE,
-			      MODPREFIX "error forming query string");
-		}
-	} else {
-		if (sprintf(query, "(objectclass=%s)", class) >= l) {
-			debug(LOGOPT_NONE,
-			      MODPREFIX "error forming query string");
-		}
+	if (sprintf(query, "(objectclass=%s)", class) >= l) {
+		debug(LOGOPT_NONE, MODPREFIX "error forming query string");
+		return NSS_STATUS_UNAVAIL;
 	}
 	query[l] = '\0';
 
@@ -828,11 +895,10 @@ int lookup_read_master(struct master *ma
 
 	/* Look around. */
 	debug(LOGOPT_NONE,
-	      MODPREFIX "searching for \"%s\" under \"%s\"",
-	      query, ctxt->base ? ctxt->base : "(default)");
+	      MODPREFIX "searching for \"%s\" under \"%s\"", query, ctxt->qdn);
 
-	rv = ldap_search_s(ldap, ctxt->base, LDAP_SCOPE_SUBTREE,
-			   query, attrs, 0, &result);
+	rv = ldap_search_s(ldap, ctxt->qdn,
+			   LDAP_SCOPE_SUBTREE, query, attrs, 0, &result);
 
 	if ((rv != LDAP_SUCCESS) || !result) {
 		error(LOGOPT_NONE,
@@ -929,7 +995,6 @@ next:
 }
 
 static int read_one_map(struct autofs_point *ap,
-			const char *keyval, int keyvallen,
 			struct lookup_context *ctxt,
 			time_t age, int *result_ldap)
 {
@@ -939,7 +1004,7 @@ static int read_one_map(struct autofs_po
 	char buf[MAX_ERR_BUF];
 	char *query;
 	LDAPMessage *result, *e;
-	char *class, *key, *info, *entry;
+	char *class, *info, *entry;
 	char **keyValue = NULL;
 	char **values = NULL;
 	char *attrs[3];
@@ -951,7 +1016,6 @@ static int read_one_map(struct autofs_po
 	}
 
 	class = ctxt->entry_obj_class;
-	key = ctxt->map_attr;
 	entry = ctxt->entry_attr;
 	info = ctxt->value_attr;
 
@@ -961,9 +1025,6 @@ static int read_one_map(struct autofs_po
 
 	/* Build a query string. */
 	l = strlen("(objectclass=)") + strlen(class) + 1;
-	if (keyvallen > 0) {
-		l += strlen(key) + keyvallen + strlen("(&(=))");
-	}
 
 	query = alloca(l);
 	if (query == NULL) {
@@ -972,22 +1033,9 @@ static int read_one_map(struct autofs_po
 		return NSS_STATUS_UNAVAIL;
 	}
 
-	/*
-	 * If we have a mapname (keyval) construct a query using it
-	 * otherwise assume the base dn will catch it.
-	 */
-	memset(query, 0, l);
-	if (keyvallen > 0) {
-		if (sprintf(query, "(&(objectclass=%s)(%s=%.*s))", class,
-			    key, keyvallen, keyval) >= l) {
-			error(ap->logopt,
-			      MODPREFIX "error forming query string");
-		}
-	} else {
-		if (sprintf(query, "(objectclass=%s)", class) >= l) {
-			error(ap->logopt,
-			      MODPREFIX "error forming query string");
-		}
+	if (sprintf(query, "(objectclass=%s)", class) >= l) {
+		error(ap->logopt, MODPREFIX "error forming query string");
+		return NSS_STATUS_UNAVAIL;
 	}
 	query[l] = '\0';
 
@@ -998,10 +1046,9 @@ static int read_one_map(struct autofs_po
 
 	/* Look around. */
 	debug(ap->logopt,
-	      MODPREFIX "searching for \"%s\" under \"%s\"",
-	      query, ctxt->base ? ctxt->base : "(default)");
+	      MODPREFIX "searching for \"%s\" under \"%s\"", query, ctxt->qdn);
 
-	rv = ldap_search_s(ldap, ctxt->base, LDAP_SCOPE_SUBTREE,
+	rv = ldap_search_s(ldap, ctxt->qdn, LDAP_SCOPE_SUBTREE,
 			   query, attrs, 0, &result);
 
 	if ((rv != LDAP_SUCCESS) || !result) {
@@ -1145,14 +1192,7 @@ int lookup_read_map(struct autofs_point 
 	int keylen;
 	int ret;
 
-	key = ctxt->mapname;
-	keylen = strlen(ctxt->mapname);
-
-	if (key)
-		ret = read_one_map(ap, key, keylen, ctxt, age, &rv);
-	else
-		ret = read_one_map(ap, NULL, 0, ctxt, age, &rv);
-
+	ret = read_one_map(ap, ctxt, age, &rv);
 	if (ret != NSS_STATUS_SUCCESS) {
 		switch (rv) {
 		case LDAP_SIZELIMIT_EXCEEDED:
@@ -1174,7 +1214,7 @@ static int lookup_one(struct autofs_poin
 	time_t age = time(NULL);
 	char *query;
 	LDAPMessage *result, *e;
-	char *class, *info, *map, *entry;
+	char *class, *info, *entry;
 	char **keyValue;
 	char **values = NULL;
 	char *attrs[3];
@@ -1188,7 +1228,6 @@ static int lookup_one(struct autofs_poin
 	}
 
 	class = ctxt->entry_obj_class;
-	map = ctxt->map_attr;
 	entry = ctxt->entry_attr;
 	info = ctxt->value_attr;
 
@@ -1200,13 +1239,7 @@ static int lookup_one(struct autofs_poin
 		*qKey = '/';
 
 	/* Build a query string. */
-	if (ctxt->mapname) {
-		l = strlen(class) 
-			+ strlen(map) + strlen(ctxt->mapname)
-			+ strlen(entry) + strlen(qKey) + 28;
-	} else {
-		l = strlen(class) + strlen(entry) + strlen(qKey) + 21;
-	}
+	l = strlen(class) + strlen(entry) + strlen(qKey) + 21;
 
 	query = alloca(l);
 	if (query == NULL) {
@@ -1215,24 +1248,11 @@ static int lookup_one(struct autofs_poin
 		return CHE_FAIL;
 	}
 
-	/* Look around. */
-	memset(query, 0, l);
-	if (ctxt->mapname) {
-		/*
-		 * Look for an entry in class containing map
-		 * ctxt->mapname whose entry is equal to qKey.
-		 */
-		ql = sprintf(query,
-			 "(&(&(objectclass=%s)(%s=%s)(%s=%s)))",
-			 class, map, ctxt->mapname, entry, qKey);
-	} else {
-		/*
-		 * Look for an entry in class under ctxt-base
-		 * whose entry is equal to qKey.
-		 */
-		ql = sprintf(query,
-			 "(&(objectclass=%s)(%s=%s))", class, entry, qKey);
-	}
+	/*
+	 * Look for an entry in class under ctxt-base
+	 * whose entry is equal to qKey.
+	 */
+	ql = sprintf(query, "(&(objectclass=%s)(%s=%s))", class, entry, qKey);
 	if (ql >= l) {
 		error(ap->logopt,
 		      MODPREFIX "error forming query string");
@@ -1241,15 +1261,14 @@ static int lookup_one(struct autofs_poin
 	query[ql] = '\0';
 
 	debug(ap->logopt,
-	      MODPREFIX "searching for \"%s\" under \"%s\"",
-	      query, ctxt->base ? ctxt->base : "(default)");
+	      MODPREFIX "searching for \"%s\" under \"%s\"", query, ctxt->qdn);
 
 	/* Initialize the LDAP context. */
 	ldap = do_connect(ctxt);
 	if (!ldap)
 		return CHE_FAIL;
 
-	rv = ldap_search_s(ldap, ctxt->base, LDAP_SCOPE_SUBTREE,
+	rv = ldap_search_s(ldap, ctxt->qdn, LDAP_SCOPE_SUBTREE,
 			   query, attrs, 0, &result);
 
 	if ((rv != LDAP_SUCCESS) || !result) {
@@ -1511,6 +1530,8 @@ #if WITH_SASL
 	EVP_cleanup();
 	ERR_free_strings();
 #endif
+	if (ctxt->qdn)
+		ldap_memfree(ctxt->qdn);
 	free_context(ctxt);
 	return rv;
 }

autofs-5.0.0_beta5-ldap-default-auth.patch:
 CHANGELOG             |    1 +
 lib/defaults.c        |   14 +++++++-------
 lib/master.c          |    2 +-
 modules/lookup_ldap.c |   25 ++++++++++++++++++++++---
 4 files changed, 31 insertions(+), 11 deletions(-)

--- NEW FILE autofs-5.0.0_beta5-ldap-default-auth.patch ---
diff --git a/CHANGELOG b/CHANGELOG
index c5fb124..13d0679 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -7,6 +7,7 @@
 - correct spelling error in default config.
 - fix default auth config not being installed.
 - change LDAP query method as my test db was incorrect.
+- change ldap defaults code to handle missing auth config.
 
 20/6/2006 autofs-5.0.0_beta5
 ---------------------------
diff --git a/lib/defaults.c b/lib/defaults.c
index 3e6ec8a..0170f9b 100644
--- a/lib/defaults.c
+++ b/lib/defaults.c
@@ -185,7 +185,7 @@ const char *defaults_get_master_map(void
 
 	master = get_env_string(ENV_NAME_MASTER_MAP);
 	if (!master)
-		return default_master_map_name;
+		return strdup(default_master_map_name);
 
 	return (const char *) master;
 }
@@ -253,7 +253,7 @@ const char *defaults_get_map_obj_class(v
 
 	moc = get_env_string(ENV_NAME_MAP_OBJ_CLASS);
 	if (!moc)
-		return default_map_obj_class;
+		return strdup(default_map_obj_class);
 
 	return (const char *) moc;
 }
@@ -264,7 +264,7 @@ const char *defaults_get_entry_obj_class
 
 	eoc = get_env_string(ENV_NAME_ENTRY_OBJ_CLASS);
 	if (!eoc)
-		return default_entry_obj_class;
+		return strdup(default_entry_obj_class);
 
 	return (const char *) eoc;
 }
@@ -275,7 +275,7 @@ const char *defaults_get_map_attr(void)
 
 	ma = get_env_string(ENV_NAME_MAP_ATTR);
 	if (!ma)
-		return default_map_attr;
+		return strdup(default_map_attr);
 
 	return (const char *) ma;
 }
@@ -286,7 +286,7 @@ const char *defaults_get_entry_attr(void
 
 	ea = get_env_string(ENV_NAME_ENTRY_ATTR);
 	if (!ea)
-		return default_entry_attr;
+		return strdup(default_entry_attr);
 
 	return (const char *) ea;
 }
@@ -297,7 +297,7 @@ const char *defaults_get_value_attr(void
 
 	va = get_env_string(ENV_NAME_VALUE_ATTR);
 	if (!va)
-		return default_value_attr;
+		return strdup(default_value_attr);
 
 	return (const char *) va;
 }
@@ -308,7 +308,7 @@ const char *defaults_get_auth_conf_file(
 
 	cf = get_env_string(ENV_AUTH_CONF_FILE);
 	if (!cf)
-		return default_auth_conf_file;
+		return strdup(default_auth_conf_file);
 
 	return (const char *) cf;
 }
diff --git a/lib/master.c b/lib/master.c
index b0c5b58..d61df03 100644
--- a/lib/master.c
+++ b/lib/master.c
@@ -666,7 +666,7 @@ struct master *master_new(const char *na
 		return NULL;
 
 	if (!name)
-		tmp = strdup(defaults_get_master_map());
+		tmp = defaults_get_master_map();
 	else
 		tmp = strdup(name);
 
diff --git a/modules/lookup_ldap.c b/modules/lookup_ldap.c
index 2910d38..45d755d 100644
--- a/modules/lookup_ldap.c
+++ b/modules/lookup_ldap.c
@@ -251,7 +251,7 @@ int authtype_requires_creds(const char *
  *  The idea is that a -1 return value should abort the program.  A 0
  *  return value requires more checking.  If ctxt->authtype is filled in,
  *  then no further action is necessary.  If it is not, the caller is free
- *  to then use another method to determine how to connec to the server.
+ *  to then use another method to determine how to connect to the server.
  */
 int parse_ldap_config(struct lookup_context *ctxt)
 {
@@ -281,6 +281,17 @@ int parse_ldap_config(struct lookup_cont
 	 */
 	memset(&st, 0, sizeof(st));
 	if (stat(auth_conf, &st) == -1 || st.st_size == 0) {
+		/* Auth config doesn't exist so disable TLS and auth */
+		if (errno == EEXIST) {
+			ctxt->auth_conf = auth_conf;
+			ctxt->use_tls = LDAP_TLS_DONT_USE;
+			ctxt->tls_required = LDAP_TLS_DONT_USE;
+			ctxt->auth_required = 0;
+			ctxt->sasl_mech = NULL;
+			ctxt->user = NULL;
+			ctxt->secret = NULL;
+			return 0;
+		}
 		error(LOGOPT_ANY,
 		      MODPREFIX "stat(2) failed with error %s.",
 		      strerror(errno));
@@ -485,9 +496,9 @@ int ldap_auth_init(struct lookup_context
 	/*
 	 *  If sasl_mech was not filled in, it means that there was no
 	 *  mechanism specified in the configuration file.  Try to auto-
-	 *  select one.
+	 *  select one if there are credentials.
 	 */
-	if (ctxt->sasl_mech == NULL) {
+	if (ctxt->sasl_mech == NULL && ctxt->user != NULL) {
 		ret = sasl_choose_mech(ctxt, &ctxt->sasl_mech);
 		if (ret != 0)
 			return -1;
@@ -666,6 +677,14 @@ free_moc:
 
 static void free_context(struct lookup_context *ctxt)
 {
+	if (ctxt->map_obj_class) {
+		free(ctxt->map_obj_class);
+		free(ctxt->entry_obj_class);
+		free(ctxt->map_attr);
+		free(ctxt->entry_attr);
+	}
+	if (ctxt->auth_conf)
+		free(ctxt->auth_conf);
 	if (ctxt->sasl_mech)
 		free(ctxt->sasl_mech);
 	if (ctxt->user)

autofs-5.0.0_beta5-mapclass.patch:
 CHANGELOG                      |    1 +
 samples/autofs.conf.default.in |    6 +++---
 2 files changed, 4 insertions(+), 3 deletions(-)

--- NEW FILE autofs-5.0.0_beta5-mapclass.patch ---
diff --git a/CHANGELOG b/CHANGELOG
index 144c0c8..7c193e8 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -4,6 +4,7 @@
 - use nis map order to check if update is needed.
 - fix couple of memory leaks in lookup_yp.c.
 - fix pasre error in replicated server module.
+- correct spelling error in default config.
 
 20/6/2006 autofs-5.0.0_beta5
 ---------------------------
diff --git a/samples/autofs.conf.default.in b/samples/autofs.conf.default.in
index 9c4b1ca..eca1392 100644
--- a/samples/autofs.conf.default.in
+++ b/samples/autofs.conf.default.in
@@ -21,7 +21,7 @@ # Define the default LDAP schema to use 
 #
 # System default
 #
-#DEFAULT_MAP_OBJECT_CALSS="nisMap"
+#DEFAULT_MAP_OBJECT_CLASS="nisMap"
 #DEFAULT_ENTRY_OBJECT_CLASS="nisObject"
 #DEFAULT_MAP_ATTRIBUTE="nisMapName"
 #DEFAULT_ENTRY_ATTRIBUTE="cn"
@@ -29,13 +29,13 @@ #DEFAULT_VALUE_ATTRIBUTE="nisMapEntry"
 #
 # Other common LDAP nameing
 #
-#DEFAULT_MAP_OBJECT_CALSS="automountMap"
+#DEFAULT_MAP_OBJECT_CLASS="automountMap"
 #DEFAULT_ENTRY_OBJECT_CLASS="automount"
 #DEFAULT_MAP_ATTRIBUTE="ou"
 #DEFAULT_ENTRY_ATTRIBUTE="cn"
 #DEFAULT_VALUE_ATTRIBUTE="automountInformation"
 #
-#DEFAULT_MAP_OBJECT_CALSS="automountMap"
+#DEFAULT_MAP_OBJECT_CLASS="automountMap"
 #DEFAULT_ENTRY_OBJECT_CLASS="automount"
 #DEFAULT_MAP_ATTRIBUTE="automountMapName"
 #DEFAULT_ENTRY_ATTRIBUTE="automountKey"

autofs-5.0.0_beta5-parse-old-style-dn.patch:
 CHANGELOG             |    1 +
 lib/master_parse.y    |    1 +
 lib/master_tok.l      |    9 ++++++++-
 modules/lookup_ldap.c |   30 +++++++++++++++++++++++-------
 4 files changed, 33 insertions(+), 8 deletions(-)

--- NEW FILE autofs-5.0.0_beta5-parse-old-style-dn.patch ---
diff --git a/CHANGELOG b/CHANGELOG
index 13d0679..77fde7e 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -8,6 +8,7 @@
 - fix default auth config not being installed.
 - change LDAP query method as my test db was incorrect.
 - change ldap defaults code to handle missing auth config.
+- fix mistake in parsing old style LDAP specs.
 
 20/6/2006 autofs-5.0.0_beta5
 ---------------------------
diff --git a/lib/master_parse.y b/lib/master_parse.y
index 54543af..4def672 100644
--- a/lib/master_parse.y
+++ b/lib/master_parse.y
@@ -514,6 +514,7 @@ int master_parse_entry(const char *buffe
 	source = master_add_map_source(entry, type, format, age, 
 					local_argc, (const char **) local_argv);
 	if (!source) {
+		error(LOGOPT_ANY, "failed to add source");
 		if (new)
 			master_free_mapent(new);
 		return 0;
diff --git a/lib/master_tok.l b/lib/master_tok.l
index 1f8a7ea..2abdfc3 100644
--- a/lib/master_tok.l
+++ b/lib/master_tok.l
@@ -80,7 +80,9 @@ OPTIONSTR	([\-]?([[:alpha:]_]([[:alnum:]
 MACROSTR	(-D{OPTWS}([[:alpha:]_]([[:alnum:]_\-])*)=([[:alnum:]_\-])+)
 NUMBER		[0-9]+
 
-DNSERVERSTR	(\/\/[[:alpha:]][[:alnum:]\-.]*(:[0-9])?\/)
+DNSERVSTR1	([[:alpha:]][[:alnum:]\-.]*(:[0-9]+)?:)
+DNSERVSTR2	(\/\/[[:alpha:]][[:alnum:]\-.]*(:[0-9]+)?\/)
+DNSERVERSTR	{DNSERVSTR1}|{DNSERVSTR2}
 DNATTRSTR	(ou|cn|nisMapName|automountMapName|dc)
 DNNAMESTR	([[:alnum:]_.\-]+)
 
@@ -198,6 +200,11 @@ MTYPE           ((file|program|yp|nis|ni
 		yyless(0);
 	}
 
+	{DNSERVERSTR} {
+		BEGIN(DNSTR);
+		yyless(0);
+	}
+
 	{DNATTRSTR}= {
 		BEGIN(DNSTR);
 		yyless(0);
diff --git a/modules/lookup_ldap.c b/modules/lookup_ldap.c
index 45d755d..9794c5f 100644
--- a/modules/lookup_ldap.c
+++ b/modules/lookup_ldap.c
@@ -510,7 +510,7 @@ #endif
 
 /*
  *  Take an input string as specified in the master map, and break it
- *  down into a basedn, servername, and port.
+ *  down into a server name and basedn.
  */
 static int parse_server_string(const char *url, struct lookup_context *ctxt)
 {
@@ -528,11 +528,7 @@ static int parse_server_string(const cha
 		const char *s = ptr + 2;
 		const char *q = NULL;
 
-		/*
-		 * Isolate the server(s).  The ':' breaks the SUN
-		 * parser for submounts, so we can't actually
-		 * use it.
-		 */
+		/* Isolate the server(s). */
 		if ((q = strchr(s, '/'))) {
 			l = q - s;
 			tmp = malloc(l + 1);
@@ -547,6 +543,10 @@ static int parse_server_string(const cha
 			memcpy(ctxt->server, s, l);
 			ptr = q + 1;
 		} else {
+			crit(LOGOPT_ANY,
+			     MODPREFIX "invalid LDAP map syntax %s", ptr);
+			return 0;
+/* TODO: why did I put this here, the parser shouldn't let this by
 			l = strlen(ptr);
 			tmp = malloc(l + 1);
 			if (!tmp) {
@@ -558,9 +558,24 @@ static int parse_server_string(const cha
 			ctxt->server = tmp;
 			memset(ctxt->server, 0, l + 1);
 			memcpy(ctxt->server, s, l);
+*/
 		}
 	} else if (strchr(ptr, ':') != NULL) {
-		l = strchr(ptr, ':') - ptr;
+		char *q = NULL;
+
+		/* Isolate the server(s). Include the port spec */
+		q = strchr(ptr, ':');
+		if (isdigit(*q))
+			while (isdigit(*q))
+				q++;
+
+		if (*q != ':') {
+			crit(LOGOPT_ANY,
+			     MODPREFIX "invalid LDAP map syntax %s", ptr);
+			return 0;
+		}
+
+		l = q - ptr;
 		/* Isolate the server's name. */
 		tmp = malloc(l + 1);
 		if (!tmp) {
@@ -575,6 +590,7 @@ static int parse_server_string(const cha
 		ptr += l + 1;
 	}
 
+	/* TODO: why did I do this - how can the map name "and" base dn be missing? */
 	if (!ptr)
 		goto done;
 


Index: autofs.spec
===================================================================
RCS file: /cvs/dist/rpms/autofs/devel/autofs.spec,v
retrieving revision 1.112
retrieving revision 1.113
diff -u -r1.112 -r1.113
--- autofs.spec	23 Jun 2006 06:04:11 -0000	1.112
+++ autofs.spec	26 Jun 2006 12:53:19 -0000	1.113
@@ -4,7 +4,7 @@
 Summary: A tool for automatically mounting and unmounting filesystems.
 Name: autofs
 %define version 5.0.0_beta5
-%define release 3
+%define release 4
 Version: %{version}
 Release: %{release}
 Epoch: 1
@@ -15,6 +15,13 @@
 Patch2: autofs-5.0.0_beta5-use-yp-map-order.patch
 Patch3: autofs-5.0.0_beta5-lookup_yp-leaks.patch
 Patch4: autofs-5.0.0_beta5-replicated-parse-error.patch
+Patch5: autofs-5.0.0_beta5-mapclass.patch
+Patch6: autofs-5.0.0_beta5-auth-config.patch
+Patch7: autofs-5.0.0_beta5-get-dn.patch
+Patch8: autofs-5.0.0_beta5-ldap-default-auth.patch
+Patch9: autofs-5.0.0_beta5-parse-old-style-dn.patch
+Patch10: autofs-5.0.0_beta5-get-dn-update.patch
+Patch11: autofs-5.0.0_beta5-compile-warnings.patch
 Buildroot: /var/tmp/autofs-tmp
 BuildRequires: autoconf, hesiod-devel, openldap-devel, bison, flex, libxml2-devel, cyrus-sasl-devel, openssl-devel
 Prereq: chkconfig
@@ -57,6 +64,13 @@
 %patch2 -p1
 %patch3 -p1
 %patch4 -p1
+%patch5 -p1
+%patch6 -p1
+%patch7 -p1
+%patch8 -p1
+%patch9 -p1
+%patch10 -p1
+%patch11 -p1
 
 %build
 #CFLAGS="$RPM_OPT_FLAGS" ./configure --prefix=/usr --libdir=%{_libdir}
@@ -105,6 +119,7 @@
 %config(noreplace,missingok) /etc/auto.net
 %config(noreplace,missingok) /etc/auto.smb
 %config(noreplace) /etc/sysconfig/autofs
+%config(noreplace) /etc/autofs_ldap_auth.conf
 %dir /misc
 %dir %{_libdir}/autofs
 %{_sbindir}/automount
@@ -112,6 +127,14 @@
 %{_libdir}/autofs/*
 
 %changelog
+* Mon Jun 26 2006 Ian Kent <ikent redhat com> - 5.0.0_beta5-4
+- correct spelling error in default config.
+- fix default auth config not being installed.
+- change LDAP query method as my test db was incorrect.
+- change ldap defaults code to handle missing auth config.
+- fix mistake in parsing old style LDAP specs.
+- update LDAP so that new query method also works for old syntax.
+
 * Fri Jun 23 2006 Ian Kent <ikent redhat com> - 5.0.0_beta5-3
 - lookup_init cleanup and fix missed memory leak.
 - use nis map order to check if update is needed.


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]