[autofs] * Tue Nov 8 2011 Ian Kent <ikent at redhat.com> - 1:5.0.6-3 - improve mount location error reporting. -

Ian Kent iankent at fedoraproject.org
Tue Nov 8 05:13:54 UTC 2011


commit ca38f0b091a3903f5b0c213ef3b0a416d743fad4
Author: Ian Kent <ikent at redhat.com>
Date:   Tue Nov 8 13:13:22 2011 +0800

    * Tue Nov 8 2011 Ian Kent <ikent at redhat.com> - 1:5.0.6-3
    - improve mount location error reporting.
    - fix paged query more results check.
    - fix dumpmaps not reading maps.
    - fix result null check in read_one_map().
    - Fix LDAP result leaks on error paths.
    - code analysis fixes 1.
    - fix not bind mounting local filesystem.
    - update dir map-type patch for changed patch order.
    - fix wait for master source mutex.
    - fix submount shutdown race
    - fix fix map source check in file lookup.
    - add disable move mount configure option.

 autofs-5.0.6-add-dir-map-type.patch                |   15 +-
 ...6-add-disable-move-mount-configure-option.patch |  334 ++++++++++++++++++++
 autofs-5.0.6-code-analysis-fixes-1.patch           |  101 ++++++
 ....0.6-fix-LDAP-result-leaks-on-error-paths.patch |   56 ++++
 autofs-5.0.6-fix-dumpmaps-not-reading-maps.patch   |   47 +++
 ...6-fix-fix-map-source-check-in-file-lookup.patch |   40 +++
 ....6-fix-not-bind-mounting-local-filesystem.patch |   56 ++++
 ...-5.0.6-fix-paged-query-more-results-check.patch |   87 +++++
 ...0.6-fix-result-null-check-in-read_one_map.patch |   58 ++++
 autofs-5.0.6-fix-submount-shutdown-race.patch      |  141 ++++++++
 ...fs-5.0.6-fix-wait-for-master-source-mutex.patch |   84 +++++
 ....6-improve-mount-location-error-reporting.patch |  117 +++++++
 autofs.spec                                        |   42 +++-
 13 files changed, 1174 insertions(+), 4 deletions(-)
---
diff --git a/autofs-5.0.6-add-dir-map-type.patch b/autofs-5.0.6-add-dir-map-type.patch
index 056076e..f4977de 100644
--- a/autofs-5.0.6-add-dir-map-type.patch
+++ b/autofs-5.0.6-add-dir-map-type.patch
@@ -44,16 +44,29 @@ included or not: the file which name ends with ".autofs" is included.
 Signed-off-by: Masatake YAMATO <yamato at redhat.com>
 ---
 
+ CHANGELOG            |    1 
  autofs.spec          |    2 
  daemon/lookup.c      |    3 -
  man/auto.master.5.in |   10 ++
  modules/Makefile     |    6 +
  modules/lookup_dir.c |  219 ++++++++++++++++++++++++++++++++++++++++++++++++++
  samples/auto.master  |    4 +
- 6 files changed, 239 insertions(+), 5 deletions(-)
+ 7 files changed, 240 insertions(+), 5 deletions(-)
  create mode 100644 modules/lookup_dir.c
 
 
+diff --git a/CHANGELOG b/CHANGELOG
+index 7e86c84..5b988d4 100644
+--- a/CHANGELOG
++++ b/CHANGELOG
+@@ -8,6 +8,7 @@
+ - fix LDAP result leaks on error paths.
+ - code analysis fixes part 1.
+ - fix not bind mounting local filesystem.
++- add "dir" map-type.
+ 
+ 28/06/2011 autofs-5.0.6
+ -----------------------
 diff --git a/autofs.spec b/autofs.spec
 index 91d4f8b..82edd1e 100644
 --- a/autofs.spec
diff --git a/autofs-5.0.6-add-disable-move-mount-configure-option.patch b/autofs-5.0.6-add-disable-move-mount-configure-option.patch
new file mode 100644
index 0000000..45c81de
--- /dev/null
+++ b/autofs-5.0.6-add-disable-move-mount-configure-option.patch
@@ -0,0 +1,334 @@
+autofs-5.0.6 - add disable move mount configure option
+
+From: Ian Kent <ikent at redhat.com>
+
+With the introduction of systemd the root filesystem is now usually
+marked as shared instead of private as part of the systemd sandbox
+functionality. As a consequence moving a mount from one mount point
+to another is not allowed.
+
+To resolve this a configure option (--disable-move-mount) to disable
+autofs preparing mount tree and then moving it into place has been
+added. The move mount use in autofs was needed for a small set of
+automount types with older kernels (prior to 2.6.39). So to disable
+the use of move mount it's necessary to use a recent kernel.
+---
+
+ CHANGELOG           |    1 +
+ autofs.spec         |    2 +-
+ configure           |   18 ++++++++++++++++++
+ configure.in        |   10 ++++++++++
+ daemon/automount.c  |   11 +++++++++++
+ include/config.h.in |    3 +++
+ modules/mount_nfs.c |    5 -----
+ modules/parse_sun.c |   40 +++++++++++++++++++++++++++++++++++-----
+ 8 files changed, 79 insertions(+), 11 deletions(-)
+
+
+diff --git a/CHANGELOG b/CHANGELOG
+index 304b6a2..c682f94 100644
+--- a/CHANGELOG
++++ b/CHANGELOG
+@@ -12,6 +12,7 @@
+ - fix wait for master source mutex.
+ - fix submount shutdown race.
+ - fix fix map source check in file lookup.
++- add disable move mount configure option.
+ 
+ 28/06/2011 autofs-5.0.6
+ -----------------------
+diff --git a/autofs.spec b/autofs.spec
+index 82edd1e..510ef76 100644
+--- a/autofs.spec
++++ b/autofs.spec
+@@ -57,7 +57,7 @@ inkludera n
+ echo %{version}-%{release} > .version
+ 
+ %build
+-CFLAGS="$RPM_OPT_FLAGS -Wall" ./configure --libdir=%{_libdir} --disable-mount-locking --enable-ignore-busy --with-libtirpc
++CFLAGS="$RPM_OPT_FLAGS -Wall" ./configure --libdir=%{_libdir} --disable-mount-locking --enable-ignore-busy --with-libtirpc --disable-mount-move
+ CFLAGS="$RPM_OPT_FLAGS -Wall" make initdir=/etc/rc.d/init.d DONTSTRIP=1
+ 
+ %install
+diff --git a/configure b/configure
+index b5a3608..76b6d86 100755
+--- a/configure
++++ b/configure
+@@ -704,6 +704,7 @@ with_openldap
+ with_sasl
+ enable_ext_env
+ enable_mount_locking
++enable_mount_move
+ enable_forced_shutdown
+ enable_ignore_busy
+ '
+@@ -1326,6 +1327,7 @@ Optional Features:
+   --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
+   --disable-ext-env	  disable search in environment for substitution variable
+   --disable-mount-locking disable use of locking when spawning mount command
++  --disable-mount-move    disable use of mount move when when preparing tree of mounts
+   --enable-force-shutdown enable USR1 signal to force unlink umount of any
+ 			  busy mounts during shutdown
+   --enable-ignore-busy	  enable exit without umounting busy mounts during
+@@ -5349,6 +5351,22 @@ $as_echo "#define ENABLE_MOUNT_LOCKING 1" >>confdefs.h
+ fi
+ 
+ #
++# Disable use of mount move
++#
++# Check whether --enable-mount-move was given.
++if test "${enable_mount_move+set}" = set; then :
++  enableval=$enable_mount_move;
++else
++  enableval=yes
++fi
++
++if test x$enable_mount_move = xyes -o x$enableval = xyes; then
++
++$as_echo "#define ENABLE_MOUNT_MOVE 1" >>confdefs.h
++
++fi
++
++#
+ # Enable forced shutdown on USR1 signal (unlink umounts all mounts).
+ #
+ # Check whether --enable-forced-shutdown was given.
+diff --git a/configure.in b/configure.in
+index 46de65a..d3e4e54 100644
+--- a/configure.in
++++ b/configure.in
+@@ -324,6 +324,16 @@ if test x$enable_mount_locking = xyes -o x$enableval = xyes; then
+ fi
+ 
+ #
++# Disable use of mount move
++#
++AC_ARG_ENABLE(mount-move,
++[  --disable-mount-move    disable use of mount move when when preparing tree of mounts],,
++	enableval=yes)
++if test x$enable_mount_move = xyes -o x$enableval = xyes; then
++	AC_DEFINE(ENABLE_MOUNT_MOVE, 1, [Disable use of mount move when preparing tree of mounts])
++fi
++
++#
+ # Enable forced shutdown on USR1 signal (unlink umounts all mounts).
+ #
+ AC_ARG_ENABLE(forced-shutdown,
+diff --git a/daemon/automount.c b/daemon/automount.c
+index 4f3151f..6bb5aa8 100644
+--- a/daemon/automount.c
++++ b/daemon/automount.c
+@@ -1743,9 +1743,20 @@ static void show_build_info(void)
+ 	count = 22;
+ #endif
+ 
++#ifndef ENABLE_MOUNT_MOVE
++	printf("DISABLE_MOUNT_MOVE ");
++	count = count + 19;
++#endif
++
+ #ifdef ENABLE_FORCED_SHUTDOWN
+ 	printf("ENABLE_FORCED_SHUTDOWN ");
+ 	count = count + 23;
++
++	if (count > 60) {
++		printf("\n  ");
++		count = 0;
++	}
++
+ #endif
+ 
+ #ifdef ENABLE_IGNORE_BUSY_MOUNTS
+diff --git a/include/config.h.in b/include/config.h.in
+index 4a3a990..97a8d2d 100644
+--- a/include/config.h.in
++++ b/include/config.h.in
+@@ -12,6 +12,9 @@
+ /* Disable use of locking when spawning mount command */
+ #undef ENABLE_MOUNT_LOCKING
+ 
++/* Disable use of mount move when preparing tree of mounts */
++#undef ENABLE_MOUNT_MOVE
++
+ /* define if you have E2FSCK */
+ #undef HAVE_E2FSCK
+ 
+diff --git a/modules/mount_nfs.c b/modules/mount_nfs.c
+index 8b567d2..7eab728 100644
+--- a/modules/mount_nfs.c
++++ b/modules/mount_nfs.c
+@@ -163,11 +163,6 @@ int mount_mount(struct autofs_point *ap, const char *root, const char *name, int
+ 	if (root[len - 1] == '/') {
+ 		len = snprintf(fullpath, len, "%s", root);
+ 	} else if (*name == '/') {
+-		/*
+-		 * Direct or offset mount, name is absolute path so
+-		 * don't use root (but with move mount changes root
+-		 * is now the same as name).
+-		 */
+ 		len = sprintf(fullpath, "%s", root);
+ 	} else {
+ 		len = sprintf(fullpath, "%s/%s", root, name);
+diff --git a/modules/parse_sun.c b/modules/parse_sun.c
+index 021850d..13b8af8 100644
+--- a/modules/parse_sun.c
++++ b/modules/parse_sun.c
+@@ -1028,6 +1028,7 @@ static int parse_mapent(const char *ent, char *g_options, char **options, char *
+ 	return (p - ent);
+ }
+ 
++#ifdef ENABLE_MOUNT_MOVE
+ static int move_mount(struct autofs_point *ap,
+ 		      const char *mm_tmp_root, const char *mm_root,
+ 		      unsigned int move)
+@@ -1063,6 +1064,7 @@ static int move_mount(struct autofs_point *ap,
+ 
+ 	return 1;
+ }
++#endif
+ 
+ static void cleanup_multi_root(struct autofs_point *ap, const char *root,
+ 					 const char *path, unsigned int move)
+@@ -1145,6 +1147,7 @@ static void cleanup_multi_triggers(struct autofs_point *ap,
+ 	return;
+ }
+ 
++#ifdef ENABLE_MOUNT_MOVE
+ static int check_fstype_autofs_option(const char *options)
+ {
+ 	char *tok, *tokbuf;
+@@ -1171,24 +1174,27 @@ static int check_fstype_autofs_option(const char *options)
+ 
+ 	return found;
+ }
++#endif
+ 
+ static int mount_subtree(struct autofs_point *ap, struct mapent *me,
+ 			 const char *name, char *loc, char *options, void *ctxt)
+ {
+ 	struct mapent *mm;
+ 	struct mapent *ro;
+-	char t_dir[] = "/tmp/autoXXXXXX";
+-	char *mnt_tmp_root, *mm_root, *mm_base, *mm_key;
++	char *mm_root, *mm_base, *mm_key;
+ 	const char *mnt_root, *target;
+ 	unsigned int mm_root_len, mnt_root_len;
+ 	int start, ret = 0, rv;
+-	unsigned int move;
++	unsigned int move = MOUNT_MOVE_NONE;
++#ifdef ENABLE_MOUNT_MOVE
++	char t_dir[] = "/tmp/autoXXXXXX";
++	char *mnt_tmp_root = NULL;
++#endif
+ 
+ 	rv = 0;
+ 
+ 	mm = me->multi;
+ 	mm_key = mm->key;
+-	move = MOUNT_MOVE_NONE;
+ 
+ 	if (*mm_key == '/') {
+ 		mm_root = mm_key;
+@@ -1202,7 +1208,10 @@ static int mount_subtree(struct autofs_point *ap, struct mapent *me,
+ 	}
+ 	mm_root_len = strlen(mm_root);
+ 
+-	mnt_tmp_root = NULL;
++#ifndef ENABLE_MOUNT_MOVE
++	mnt_root = mm_root;
++	mnt_root_len = mm_root_len;
++#else
+ 	if (ap->flags & MOUNT_FLAG_REMOUNT) {
+ 		mnt_root = mm_root;
+ 		mnt_root_len = mm_root_len;
+@@ -1213,6 +1222,7 @@ static int mount_subtree(struct autofs_point *ap, struct mapent *me,
+ 		mnt_root_len = strlen(mnt_root);
+ 		mnt_tmp_root = (char *) mnt_root;
+ 	}
++#endif
+ 
+ 	if (me == me->multi) {
+ 		/* name = NULL */
+@@ -1238,11 +1248,13 @@ static int mount_subtree(struct autofs_point *ap, struct mapent *me,
+ 			}
+ 			ro_len = strlen(ro_loc);
+ 
++#ifdef ENABLE_MOUNT_MOVE
+ 			if (!(ap->flags & MOUNT_FLAG_REMOUNT)) {
+ 				move = MOUNT_MOVE_OTHER;
+ 				if (check_fstype_autofs_option(myoptions))
+ 					move = MOUNT_MOVE_AUTOFS;
+ 			}
++#endif
+ 
+ 			tmp = alloca(mnt_root_len + 1);
+ 			strcpy(tmp, mnt_root);
+@@ -1266,7 +1278,9 @@ static int mount_subtree(struct autofs_point *ap, struct mapent *me,
+ 				goto error_out;
+ 			}
+ 		} else if (rv <= 0) {
++#ifdef ENABLE_MOUNT_MOVE
+ 			move = MOUNT_MOVE_NONE;
++#endif
+ 			ret = mount_multi_triggers(ap, me, mm_root, start, mm_base);
+ 			if (ret == -1) {
+ 				error(ap->logopt, MODPREFIX
+@@ -1279,11 +1293,21 @@ static int mount_subtree(struct autofs_point *ap, struct mapent *me,
+ 		int loclen = strlen(loc);
+ 		int namelen = strlen(name);
+ 
++#ifndef ENABLE_MOUNT_MOVE
++		/*
++		 * When using move mount to mount offsets or direct mounts
++		 * the base of the tree can be the base of the temporary
++		 * mount point it needs to be the full path when not moving
++		 * the mount after construction.
++		 */
++		mnt_root = name;
++#else
+ 		if (!(ap->flags & MOUNT_FLAG_REMOUNT)) {
+ 			move = MOUNT_MOVE_OTHER;
+ 			if (check_fstype_autofs_option(options))
+ 				move = MOUNT_MOVE_AUTOFS;
+ 		}
++#endif
+ 
+ 		/* name = mm_root + mm_base */
+ 		/* destination = mm_root + mm_base = name */
+@@ -1303,7 +1327,9 @@ static int mount_subtree(struct autofs_point *ap, struct mapent *me,
+ 		} else if (rv < 0) {
+ 			char *mm_root_base = alloca(strlen(mm_root) + strlen(mm_base) + 1);
+ 	
++#ifdef ENABLE_MOUNT_MOVE
+ 			move = MOUNT_MOVE_NONE;
++#endif
+ 
+ 			strcpy(mm_root_base, mm_root);
+ 			strcat(mm_root_base, mm_base);
+@@ -1318,6 +1344,7 @@ static int mount_subtree(struct autofs_point *ap, struct mapent *me,
+ 		}
+ 	}
+ 
++#ifdef ENABLE_MOUNT_MOVE
+ 	if (!move_mount(ap, mnt_root, target, move)) {
+ 		cleanup_multi_triggers(ap, me, mnt_root, start, mm_base);
+ 		cleanup_multi_root(ap, mnt_root, mm_root, move);
+@@ -1326,6 +1353,7 @@ static int mount_subtree(struct autofs_point *ap, struct mapent *me,
+ 
+ 	if (mnt_tmp_root)
+ 		rmdir(mnt_tmp_root);
++#endif
+ 
+ 	/* Mount for base of tree failed */
+ 	if (rv > 0)
+@@ -1341,8 +1369,10 @@ static int mount_subtree(struct autofs_point *ap, struct mapent *me,
+ 	return rv;
+ 
+ error_out:
++#ifdef ENABLE_MOUNT_MOVE
+ 	if (mnt_tmp_root)
+ 		rmdir(mnt_tmp_root);
++#endif
+ 
+ 	return 1;
+ }
diff --git a/autofs-5.0.6-code-analysis-fixes-1.patch b/autofs-5.0.6-code-analysis-fixes-1.patch
new file mode 100644
index 0000000..6b0c902
--- /dev/null
+++ b/autofs-5.0.6-code-analysis-fixes-1.patch
@@ -0,0 +1,101 @@
+autofs-5.0.6 - code analysis fixes 1
+
+From: Ian Kent <ikent at redhat.com>
+
+Code analysis defect fixes, installment 1.
+
+- fix signed usage of unsigned variable in do_srv_query().
+- make NULL check handling of variable dcs explicit in get_dc_list().
+  - adding an explicit NULL check for variable dcs gaurds against
+    future changes in get_srv_rrs() returning success while not
+    clearing the dcs variable.
+  - makes it explict for readers why we don't need to check for NULL
+    before free later in the loop.
+- fix typo in do_reconnect()
+  - uri is never set now and, at this point, we need to try to connect
+    to the last server uri (ctxt->uri->uri) which is set in find_server()
+    when ctxt->uri is NULL.
+---
+
+ CHANGELOG             |    1 +
+ modules/dclist.c      |   11 +++++------
+ modules/lookup_ldap.c |    3 +--
+ 3 files changed, 7 insertions(+), 8 deletions(-)
+
+
+diff --git a/CHANGELOG b/CHANGELOG
+index dc91c25..acc5f0c 100644
+--- a/CHANGELOG
++++ b/CHANGELOG
+@@ -6,6 +6,7 @@
+ - fix dumpmaps not reading maps.
+ - fix result null check in read_one_map().
+ - fix LDAP result leaks on error paths.
++- code analysis fixes part 1.
+ 
+ 28/06/2011 autofs-5.0.6
+ -----------------------
+diff --git a/modules/dclist.c b/modules/dclist.c
+index aeb107f..d16b913 100644
+--- a/modules/dclist.c
++++ b/modules/dclist.c
+@@ -69,7 +69,7 @@ static void dclist_mutex_unlock(void)
+ 
+ static int do_srv_query(unsigned int logopt, char *name, u_char **packet)
+ {
+-	unsigned int len = PACKETSZ;
++	int len = PACKETSZ;
+ 	unsigned int last_len = len;
+ 	char ebuf[MAX_ERR_BUF];
+ 	u_char *buf;
+@@ -500,7 +500,8 @@ struct dclist *get_dc_list(unsigned int logopt, const char *uri)
+ 		}
+ 
+ 		dclist_mutex_lock();
+-		if (!get_srv_rrs(logopt, request, &dcs, &numdcs)) {
++		ret = get_srv_rrs(logopt, request, &dcs, &numdcs);
++		if (!ret | !dcs) {
+ 			error(logopt,
+ 			      "DNS SRV query failed for domain %s", domain);
+ 			dclist_mutex_unlock();
+@@ -526,8 +527,7 @@ struct dclist *get_dc_list(unsigned int logopt, const char *uri)
+ 		if (!tmp) {
+ 			char *estr = strerror_r(errno, buf, MAX_ERR_BUF);
+ 			error(logopt, "realloc: %s", estr);
+-			if (dcs)
+-				free_srv_rrs(dcs, numdcs);
++			free_srv_rrs(dcs, numdcs);
+ 			goto out_error;
+ 		}
+ 
+@@ -548,8 +548,7 @@ struct dclist *get_dc_list(unsigned int logopt, const char *uri)
+ 				if (ret > 6) {
+ 					error(logopt,
+ 					      "invalid port: %u", dcs[i].port);
+-					if (dcs)
+-						free_srv_rrs(dcs, numdcs);
++					free_srv_rrs(dcs, numdcs);
+ 					goto out_error;
+ 				}
+ 				strcat(tmp, port);
+diff --git a/modules/lookup_ldap.c b/modules/lookup_ldap.c
+index 29323b2..67a6834 100644
+--- a/modules/lookup_ldap.c
++++ b/modules/lookup_ldap.c
+@@ -736,7 +736,6 @@ static LDAP *find_server(unsigned logopt, struct lookup_context *ctxt)
+ static LDAP *do_reconnect(unsigned logopt, struct lookup_context *ctxt)
+ {
+ 	LDAP *ldap = NULL;
+-	char *uri;
+ 
+ 	if (ctxt->server || !ctxt->uris) {
+ 		ldap = do_connect(logopt, ctxt->server, ctxt);
+@@ -780,7 +779,7 @@ static LDAP *do_reconnect(unsigned logopt, struct lookup_context *ctxt)
+ 	 */
+ 	if (!ldap) {
+ 		autofs_sasl_dispose(ctxt);
+-		ldap = connect_to_server(logopt, uri, ctxt);
++		ldap = connect_to_server(logopt, ctxt->uri->uri, ctxt);
+ 	}
+ #endif
+ 	if (ldap)
diff --git a/autofs-5.0.6-fix-LDAP-result-leaks-on-error-paths.patch b/autofs-5.0.6-fix-LDAP-result-leaks-on-error-paths.patch
new file mode 100644
index 0000000..809021e
--- /dev/null
+++ b/autofs-5.0.6-fix-LDAP-result-leaks-on-error-paths.patch
@@ -0,0 +1,56 @@
+autofs-5.0.6 - Fix LDAP result leaks on error paths
+
+From: Leonardo Chiquitto <leonardo.lists at gmail.com>
+
+According to ldap_search_s(3), the result structure must be freed
+with ldap_msgfree() even when the search function returned failure.
+---
+
+ CHANGELOG             |    1 +
+ modules/lookup_ldap.c |    6 ++++++
+ 2 files changed, 7 insertions(+), 0 deletions(-)
+
+
+diff --git a/CHANGELOG b/CHANGELOG
+index 66b804f..dc91c25 100644
+--- a/CHANGELOG
++++ b/CHANGELOG
+@@ -5,6 +5,7 @@
+ - fix paged query more results check.
+ - fix dumpmaps not reading maps.
+ - fix result null check in read_one_map().
++- fix LDAP result leaks on error paths.
+ 
+ 28/06/2011 autofs-5.0.6
+ -----------------------
+diff --git a/modules/lookup_ldap.c b/modules/lookup_ldap.c
+index 22ff355..29323b2 100644
+--- a/modules/lookup_ldap.c
++++ b/modules/lookup_ldap.c
+@@ -347,6 +347,8 @@ static int get_query_dn(unsigned logopt, LDAP *ldap, struct lookup_context *ctxt
+ 			error(logopt,
+ 			      MODPREFIX "query failed for %s: %s",
+ 			      query, ldap_err2string(rv));
++			if (result)
++				ldap_msgfree(result);
+ 			free(query);
+ 			return 0;
+ 		}
+@@ -1573,6 +1575,8 @@ int lookup_read_master(struct master *master, time_t age, void *context)
+ 		error(logopt, MODPREFIX "query failed for %s: %s",
+ 		      query, ldap_err2string(rv));
+ 		unbind_ldap_connection(logging, ldap, ctxt);
++		if (result)
++			ldap_msgfree(result);
+ 		free(query);
+ 		return NSS_STATUS_NOTFOUND;
+ 	}
+@@ -2586,6 +2590,8 @@ static int lookup_one(struct autofs_point *ap,
+ 	if ((rv != LDAP_SUCCESS) || !result) {
+ 		crit(ap->logopt, MODPREFIX "query failed for %s", query);
+ 		unbind_ldap_connection(ap->logopt, ldap, ctxt);
++		if (result)
++			ldap_msgfree(result);
+ 		free(query);
+ 		return CHE_FAIL;
+ 	}
diff --git a/autofs-5.0.6-fix-dumpmaps-not-reading-maps.patch b/autofs-5.0.6-fix-dumpmaps-not-reading-maps.patch
new file mode 100644
index 0000000..2f7ef27
--- /dev/null
+++ b/autofs-5.0.6-fix-dumpmaps-not-reading-maps.patch
@@ -0,0 +1,47 @@
+autofs-5.0.6 - fix dumpmaps not reading maps
+
+From: Ian Kent <raven at themaw.net>
+
+The lookup modules won't read any indirect map entries (other than those
+in a file map) unless unless the browse option is set. In order to list
+the entries when tyhe dumpmap option is given the browse option needs to
+be set.
+---
+
+ CHANGELOG    |    1 +
+ lib/master.c |    9 +++++++++
+ 2 files changed, 10 insertions(+), 0 deletions(-)
+
+
+diff --git a/CHANGELOG b/CHANGELOG
+index 884a9ae..946a196 100644
+--- a/CHANGELOG
++++ b/CHANGELOG
+@@ -3,6 +3,7 @@
+ - fix ipv6 name for lookup fix.
+ - improve mount location error reporting.
+ - fix paged query more results check.
++- fix dumpmaps not reading maps.
+ 
+ 28/06/2011 autofs-5.0.6
+ -----------------------
+diff --git a/lib/master.c b/lib/master.c
+index 153a38b..6c89e1d 100644
+--- a/lib/master.c
++++ b/lib/master.c
+@@ -1283,6 +1283,15 @@ int master_show_mounts(struct master *master)
+ 		printf("\nMount point: %s\n", ap->path);
+ 		printf("\nsource(s):\n");
+ 
++		/*
++		 * Ensure we actually read indirect map entries so we can
++		 * list them. The map reads won't read any indirect map
++		 * entries (other than those in a file map) unless the
++		 * browse option is set.
++		 */
++		if (ap->type == LKP_INDIRECT)
++			ap->flags |= MOUNT_FLAG_GHOST;
++
+ 		/* Read the map content into the cache */
+ 		if (lookup_nss_read_map(ap, NULL, now))
+ 			lookup_prune_cache(ap, now);
diff --git a/autofs-5.0.6-fix-fix-map-source-check-in-file-lookup.patch b/autofs-5.0.6-fix-fix-map-source-check-in-file-lookup.patch
new file mode 100644
index 0000000..88b4a5d
--- /dev/null
+++ b/autofs-5.0.6-fix-fix-map-source-check-in-file-lookup.patch
@@ -0,0 +1,40 @@
+autofs-5.0.6 - fix fix map source check in file lookup
+
+From: Ian Kent <raven at themaw.net>
+
+A recent change to correct a problem with included map entry removal
+has broken a different case of included map key lookup. The check in
+previous patch was too broad and caused map key lookup for keys in an
+included multi-mount map entrys to not be found.
+---
+
+ CHANGELOG             |    1 +
+ modules/lookup_file.c |    2 +-
+ 2 files changed, 2 insertions(+), 1 deletions(-)
+
+
+diff --git a/CHANGELOG b/CHANGELOG
+index cb9ac75..304b6a2 100644
+--- a/CHANGELOG
++++ b/CHANGELOG
+@@ -11,6 +11,7 @@
+ - add "dir" map-type.
+ - fix wait for master source mutex.
+ - fix submount shutdown race.
++- fix fix map source check in file lookup.
+ 
+ 28/06/2011 autofs-5.0.6
+ -----------------------
+diff --git a/modules/lookup_file.c b/modules/lookup_file.c
+index 8ead07c..63b5ae7 100644
+--- a/modules/lookup_file.c
++++ b/modules/lookup_file.c
+@@ -1046,7 +1046,7 @@ do_cache_lookup:
+ 	 * instance (same map entry cache), not in a distinct source.
+ 	 */
+ 	if (me && (!me->mapent || 
+-	   (ap->type == LKP_INDIRECT && me->source != source))) {
++	   (me->source != source && *me->key != '/'))) {
+ 		while ((me = cache_lookup_key_next(me)))
+ 			if (me->source == source)
+ 				break;
diff --git a/autofs-5.0.6-fix-not-bind-mounting-local-filesystem.patch b/autofs-5.0.6-fix-not-bind-mounting-local-filesystem.patch
new file mode 100644
index 0000000..099ac11
--- /dev/null
+++ b/autofs-5.0.6-fix-not-bind-mounting-local-filesystem.patch
@@ -0,0 +1,56 @@
+autofs-5.0.6 - fix not bind mounting local filesystem
+
+From: Ian Kent <ikent at redhat.com>
+
+When the --random-multimount-selection (-r) option is used automount(8)
+won't bind mount a local filesystem. If the filesystem that has been
+requested is local it should always be used.
+---
+
+ CHANGELOG            |    1 +
+ modules/replicated.c |   12 +++++++-----
+ 2 files changed, 8 insertions(+), 5 deletions(-)
+
+
+diff --git a/CHANGELOG b/CHANGELOG
+index acc5f0c..7e86c84 100644
+--- a/CHANGELOG
++++ b/CHANGELOG
+@@ -7,6 +7,7 @@
+ - fix result null check in read_one_map().
+ - fix LDAP result leaks on error paths.
+ - code analysis fixes part 1.
++- fix not bind mounting local filesystem.
+ 
+ 28/06/2011 autofs-5.0.6
+ -----------------------
+diff --git a/modules/replicated.c b/modules/replicated.c
+index a10a817..eee1a06 100644
+--- a/modules/replicated.c
++++ b/modules/replicated.c
+@@ -1068,18 +1068,20 @@ static int add_new_host(struct host **list,
+ 	 * We can't use PROXIMITY_LOCAL or we won't perform an RPC ping
+ 	 * to remove hosts that may be down.
+ 	 */
+-	if (options & MOUNT_FLAG_RANDOM_SELECT)
++	if (!host_addr)
+ 		prx = PROXIMITY_SUBNET;
+ 	else {
+ 		prx = get_proximity(host_addr->ai_addr);
+ 		/*
+ 		 * If we want the weight to be the determining factor
+-		 * when selecting a host then all hosts must have the
+-		 * same proximity. However, if this is the local machine
+-		 * it should always be used since it is certainly available.
++		 * when selecting a host, or we are using random selection,
++		 * then all hosts must have the same proximity. However,
++		 * if this is the local machine it should always be used
++		 * since it is certainly available.
+ 		 */
+ 		if (prx != PROXIMITY_LOCAL &&
+-		   (options & MOUNT_FLAG_USE_WEIGHT_ONLY))
++		   (options & (MOUNT_FLAG_USE_WEIGHT_ONLY |
++			       MOUNT_FLAG_RANDOM_SELECT)))
+ 			prx = PROXIMITY_SUBNET;
+ 	}
+ 
diff --git a/autofs-5.0.6-fix-paged-query-more-results-check.patch b/autofs-5.0.6-fix-paged-query-more-results-check.patch
new file mode 100644
index 0000000..b842521
--- /dev/null
+++ b/autofs-5.0.6-fix-paged-query-more-results-check.patch
@@ -0,0 +1,87 @@
+autofs-5.0.6 - fix paged query more results check
+
+From: Ian Kent <raven at themaw.net>
+
+When getting paged results from an LDAP server the server returns an
+opaque cookie (of type berval) that is used to retrieve the next page.
+The criteria for deciding if there are more pages is that the berval
+value is non-null and has a non-zero length.
+
+To determine if the berval value has non-zero length autofs checks the
+strlen() of the value but on ppc64 and s390x this can return 0 even if
+the value has non-zero length causing a premature termination of the
+query.
+
+Fix this by also checking the berval length field.
+Also make sure we free the opaque cookie when the query is finished.
+---
+
+ CHANGELOG             |    1 +
+ modules/lookup_ldap.c |   13 ++++++++++++-
+ 2 files changed, 13 insertions(+), 1 deletions(-)
+
+
+diff --git a/CHANGELOG b/CHANGELOG
+index a178b74..884a9ae 100644
+--- a/CHANGELOG
++++ b/CHANGELOG
+@@ -2,6 +2,7 @@
+ =======================
+ - fix ipv6 name for lookup fix.
+ - improve mount location error reporting.
++- fix paged query more results check.
+ 
+ 28/06/2011 autofs-5.0.6
+ -----------------------
+diff --git a/modules/lookup_ldap.c b/modules/lookup_ldap.c
+index 719fed1..a25050a 100644
+--- a/modules/lookup_ldap.c
++++ b/modules/lookup_ldap.c
+@@ -2041,7 +2041,8 @@ do_paged:
+ 	rv = ldap_parse_page_control(sp->ldap,
+ 				     returnedControls, &sp->totalCount,
+ 				     &sp->cookie);
+-	if (sp->cookie && sp->cookie->bv_val && strlen(sp->cookie->bv_val))
++	if (sp->cookie && sp->cookie->bv_val &&
++	    (strlen(sp->cookie->bv_val) || sp->cookie->bv_len))
+ 		sp->morePages = TRUE;
+ 	else
+ 		sp->morePages = FALSE;
+@@ -2382,6 +2383,10 @@ static int read_one_map(struct autofs_point *ap,
+ 		    rv == LDAP_SIZELIMIT_EXCEEDED) {
+ 			if (sp.result)
+ 				ldap_msgfree(sp.result);
++			if (sp.cookie) {
++				ber_bvfree(sp.cookie);
++				sp.cookie = NULL;
++			}
+ 			sp.pageSize = sp.pageSize / 2;
+ 			if (sp.pageSize < 5) {
+ 				debug(ap->logopt, MODPREFIX
+@@ -2397,6 +2402,8 @@ static int read_one_map(struct autofs_point *ap,
+ 		if (rv != LDAP_SUCCESS || !sp.result) {
+ 			unbind_ldap_connection(ap->logopt, sp.ldap, ctxt);
+ 			*result_ldap = rv;
++			if (sp.cookie)
++				ber_bvfree(sp.cookie);
+ 			free(sp.query);
+ 			return NSS_STATUS_UNAVAIL;
+ 		}
+@@ -2406,6 +2413,8 @@ static int read_one_map(struct autofs_point *ap,
+ 			ldap_msgfree(sp.result);
+ 			unbind_ldap_connection(ap->logopt, sp.ldap, ctxt);
+ 			*result_ldap = rv;
++			if (sp.cookie)
++				ber_bvfree(sp.cookie);
+ 			free(sp.query);
+ 			return NSS_STATUS_NOTFOUND;
+ 		}
+@@ -2417,6 +2426,8 @@ static int read_one_map(struct autofs_point *ap,
+ 	unbind_ldap_connection(ap->logopt, sp.ldap, ctxt);
+ 
+ 	source->age = age;
++	if (sp.cookie)
++		ber_bvfree(sp.cookie);
+ 	free(sp.query);
+ 
+ 	return NSS_STATUS_SUCCESS;
diff --git a/autofs-5.0.6-fix-result-null-check-in-read_one_map.patch b/autofs-5.0.6-fix-result-null-check-in-read_one_map.patch
new file mode 100644
index 0000000..ac888d2
--- /dev/null
+++ b/autofs-5.0.6-fix-result-null-check-in-read_one_map.patch
@@ -0,0 +1,58 @@
+autofs-5.0.6 - fix result null check in read_one_map()
+
+From: Ian Kent <ikent at redhat.com>
+
+Fix the check and reset to NULL of the LDAP library allocated result
+within the loop to fetch paged query values.
+---
+
+ CHANGELOG             |    1 +
+ modules/lookup_ldap.c |    7 ++++++-
+ 2 files changed, 7 insertions(+), 1 deletions(-)
+
+
+diff --git a/CHANGELOG b/CHANGELOG
+index 946a196..66b804f 100644
+--- a/CHANGELOG
++++ b/CHANGELOG
+@@ -4,6 +4,7 @@
+ - improve mount location error reporting.
+ - fix paged query more results check.
+ - fix dumpmaps not reading maps.
++- fix result null check in read_one_map().
+ 
+ 28/06/2011 autofs-5.0.6
+ -----------------------
+diff --git a/modules/lookup_ldap.c b/modules/lookup_ldap.c
+index a25050a..22ff355 100644
+--- a/modules/lookup_ldap.c
++++ b/modules/lookup_ldap.c
+@@ -2381,8 +2381,10 @@ static int read_one_map(struct autofs_point *ap,
+ 
+ 		if (rv == LDAP_ADMINLIMIT_EXCEEDED ||
+ 		    rv == LDAP_SIZELIMIT_EXCEEDED) {
+-			if (sp.result)
++			if (sp.result) {
+ 				ldap_msgfree(sp.result);
++				sp.result = NULL;
++			}
+ 			if (sp.cookie) {
+ 				ber_bvfree(sp.cookie);
+ 				sp.cookie = NULL;
+@@ -2402,6 +2404,8 @@ static int read_one_map(struct autofs_point *ap,
+ 		if (rv != LDAP_SUCCESS || !sp.result) {
+ 			unbind_ldap_connection(ap->logopt, sp.ldap, ctxt);
+ 			*result_ldap = rv;
++			if (sp.result)
++				ldap_msgfree(sp.result);
+ 			if (sp.cookie)
+ 				ber_bvfree(sp.cookie);
+ 			free(sp.query);
+@@ -2419,6 +2423,7 @@ static int read_one_map(struct autofs_point *ap,
+ 			return NSS_STATUS_NOTFOUND;
+ 		}
+ 		ldap_msgfree(sp.result);
++		sp.result = NULL;
+ 	} while (sp.morePages == TRUE);
+ 
+ 	debug(ap->logopt, MODPREFIX "done updating map");
diff --git a/autofs-5.0.6-fix-submount-shutdown-race.patch b/autofs-5.0.6-fix-submount-shutdown-race.patch
new file mode 100644
index 0000000..1bd908d
--- /dev/null
+++ b/autofs-5.0.6-fix-submount-shutdown-race.patch
@@ -0,0 +1,141 @@
+autofs-5.0.6 - fix submount shutdown race
+
+From: Ian Kent <ikent at redhat.com>
+
+Shutdown of submounts is problematic because the kernel doesn't
+know when they are going away and so cannot block path walks
+while they shut down. After aquiring the locks that cause mount
+requests to wait, the daemon checks if the submount is active before
+finally umounting it. If the mount is found to be busy the shutdown
+is abandoned and the submount returned to a ready state.
+
+But, if a mount request arrives at the same time as the daemon is
+attempting to aquire these locks pthreads appears to become confused
+and blocks. So change to using the try version of the lock call and
+handling the return appropriately.
+---
+
+ CHANGELOG          |    1 +
+ daemon/automount.c |   76 ++++++++++++++++++++++++++++++++++++++++------------
+ 2 files changed, 60 insertions(+), 17 deletions(-)
+
+
+diff --git a/CHANGELOG b/CHANGELOG
+index cac450f..cb9ac75 100644
+--- a/CHANGELOG
++++ b/CHANGELOG
+@@ -10,6 +10,7 @@
+ - fix not bind mounting local filesystem.
+ - add "dir" map-type.
+ - fix wait for master source mutex.
++- fix submount shutdown race.
+ 
+ 28/06/2011 autofs-5.0.6
+ -----------------------
+diff --git a/daemon/automount.c b/daemon/automount.c
+index 376e965..4f3151f 100644
+--- a/daemon/automount.c
++++ b/daemon/automount.c
+@@ -1495,6 +1495,41 @@ static void handle_mounts_cleanup(void *arg)
+ 	return;
+ }
+ 
++static int submount_source_writelock_nested(struct autofs_point *ap)
++{
++	struct autofs_point *parent = ap->parent;
++	int status;
++
++	status = pthread_rwlock_trywrlock(&parent->entry->source_lock);
++	if (status)
++		goto done;
++
++	mounts_mutex_lock(parent);
++
++	status = pthread_rwlock_trywrlock(&ap->entry->source_lock);
++	if (status) {
++		mounts_mutex_unlock(parent);
++		master_source_unlock(parent->entry);
++	}
++
++done:
++	if (status && status != EBUSY) {
++		logmsg("submount nested master_mapent source write lock failed");
++		fatal(status);
++	}
++
++	return status;
++}
++
++static void submount_source_unlock_nested(struct autofs_point *ap)
++{
++	struct autofs_point *parent = ap->parent;
++
++	master_source_unlock(ap->entry);
++	mounts_mutex_unlock(parent);
++	master_source_unlock(parent->entry);
++}
++
+ void *handle_mounts(void *arg)
+ {
+ 	struct startup_cond *suc;
+@@ -1565,23 +1600,32 @@ void *handle_mounts(void *arg)
+ 			master_mutex_lock();
+ 
+ 			if (ap->submount) {
+-				master_source_writelock(ap->parent->entry);
+-				mounts_mutex_lock(ap->parent);
+-			}
+-
+-			master_source_writelock(ap->entry);
++				/*
++				 * If a mount request arrives before the locks are
++				 * aquired just return to ready state.
++				 */
++				ret = submount_source_writelock_nested(ap);
++				if (ret) {
++					warn(ap->logopt,
++					     "can't shutdown submount: mount in progress");
++					/* Return to ST_READY is done immediately */
++					st_add_task(ap, ST_READY);
++					master_mutex_unlock();
++					pthread_setcancelstate(cur_state, NULL);
++					continue;
++				}
++			} else
++				master_source_writelock(ap->entry);
+ 
+ 			if (ap->state != ST_SHUTDOWN) {
+ 				if (!ap->submount)
+ 					alarm_add(ap, ap->exp_runfreq);
+ 				/* Return to ST_READY is done immediately */
+ 				st_add_task(ap, ST_READY);
+-				master_source_unlock(ap->entry);
+-				if (ap->submount) {
+-					mounts_mutex_unlock(ap->parent);
+-					master_source_unlock(ap->parent->entry);
+-				}
+-
++				if (ap->submount)
++					submount_source_unlock_nested(ap);
++				else
++					master_source_unlock(ap->entry);
+ 				master_mutex_unlock();
+ 
+ 				pthread_setcancelstate(cur_state, NULL);
+@@ -1621,12 +1665,10 @@ void *handle_mounts(void *arg)
+ 				alarm_add(ap, ap->exp_runfreq);
+ 			/* Return to ST_READY is done immediately */
+ 			st_add_task(ap, ST_READY);
+-			master_source_unlock(ap->entry);
+-			if (ap->submount) {
+-				mounts_mutex_unlock(ap->parent);
+-				master_source_unlock(ap->parent->entry);
+-			}
+-
++			if (ap->submount)
++				submount_source_unlock_nested(ap);
++			else
++				master_source_unlock(ap->entry);
+ 			master_mutex_unlock();
+ 
+ 			pthread_setcancelstate(cur_state, NULL);
diff --git a/autofs-5.0.6-fix-wait-for-master-source-mutex.patch b/autofs-5.0.6-fix-wait-for-master-source-mutex.patch
new file mode 100644
index 0000000..54e24ad
--- /dev/null
+++ b/autofs-5.0.6-fix-wait-for-master-source-mutex.patch
@@ -0,0 +1,84 @@
+autofs-5.0.6 - fix wait for master source mutex
+
+From: Ian Kent <ikent at redhat.com>
+
+A previous change that was meant to handle the case where the master map
+source mutex read lock count was exceeded was incorrectly done for the
+write lock case instead of the read lock case.
+---
+
+ CHANGELOG    |    1 +
+ lib/master.c |   30 +++++++++++++++---------------
+ 2 files changed, 16 insertions(+), 15 deletions(-)
+
+
+diff --git a/CHANGELOG b/CHANGELOG
+index 5b988d4..cac450f 100644
+--- a/CHANGELOG
++++ b/CHANGELOG
+@@ -9,6 +9,7 @@
+ - code analysis fixes part 1.
+ - fix not bind mounting local filesystem.
+ - add "dir" map-type.
++- fix wait for master source mutex.
+ 
+ 28/06/2011 autofs-5.0.6
+ -----------------------
+diff --git a/lib/master.c b/lib/master.c
+index 6c89e1d..87d1269 100644
+--- a/lib/master.c
++++ b/lib/master.c
+@@ -540,38 +540,38 @@ void send_map_update_request(struct autofs_point *ap)
+ 
+ void master_source_writelock(struct master_mapent *entry)
+ {
+-	int retries = 5; /* 1 second maximum */
+ 	int status;
+ 
+-	while (retries--) {
+-		status = pthread_rwlock_wrlock(&entry->source_lock);
+-		if (status != EAGAIN)
+-			break;
+-		else {
+-                	struct timespec t = { 0, 200000000 };
+-	                struct timespec r;
+-                	while (nanosleep(&t, &r) == -1 && errno == EINTR)
+-                        	memcpy(&t, &r, sizeof(struct timespec));
+-		}
+-	}
+-
++	status = pthread_rwlock_wrlock(&entry->source_lock);
+ 	if (status) {
+ 		logmsg("master_mapent source write lock failed");
+ 		fatal(status);
+ 	}
+-
+ 	return;
+ }
+ 
+ void master_source_readlock(struct master_mapent *entry)
+ {
++	int retries = 5; /* 1 second maximum */
+ 	int status;
+ 
+-	status = pthread_rwlock_rdlock(&entry->source_lock);
++	while (retries--) {
++		status = pthread_rwlock_tryrdlock(&entry->source_lock);
++		if (status != EAGAIN && status != EBUSY)
++			break;
++		else {
++                	struct timespec t = { 0, 200000000 };
++	                struct timespec r;
++                	while (nanosleep(&t, &r) == -1 && errno == EINTR)
++                        	memcpy(&t, &r, sizeof(struct timespec));
++		}
++	}
++
+ 	if (status) {
+ 		logmsg("master_mapent source read lock failed");
+ 		fatal(status);
+ 	}
++
+ 	return;
+ }
+ 
diff --git a/autofs-5.0.6-improve-mount-location-error-reporting.patch b/autofs-5.0.6-improve-mount-location-error-reporting.patch
new file mode 100644
index 0000000..b0cb27d
--- /dev/null
+++ b/autofs-5.0.6-improve-mount-location-error-reporting.patch
@@ -0,0 +1,117 @@
+autofs-5.0.6 - improve mount location error reporting
+
+From: Ian Kent <raven at themaw.net>
+
+Try and report a more sensible error when an invalid location is
+encountered.
+---
+
+ CHANGELOG           |    1 +
+ modules/parse_sun.c |   32 ++++++++++++++++++--------------
+ 2 files changed, 19 insertions(+), 14 deletions(-)
+
+
+diff --git a/CHANGELOG b/CHANGELOG
+index e5dfa83..a178b74 100644
+--- a/CHANGELOG
++++ b/CHANGELOG
+@@ -1,6 +1,7 @@
+ ??/??/20?? autofs-5.0.7
+ =======================
+ - fix ipv6 name for lookup fix.
++- improve mount location error reporting.
+ 
+ 28/06/2011 autofs-5.0.6
+ -----------------------
+diff --git a/modules/parse_sun.c b/modules/parse_sun.c
+index 3242e3b..021850d 100644
+--- a/modules/parse_sun.c
++++ b/modules/parse_sun.c
+@@ -853,7 +853,7 @@ add_offset_entry(struct autofs_point *ap, const char *name,
+ 	return ret;
+ }
+ 
+-static int validate_location(char *loc)
++static int validate_location(unsigned int logopt, char *loc)
+ {
+ 	char *ptr = loc;
+ 
+@@ -867,14 +867,22 @@ static int validate_location(char *loc)
+ 	 * and "@" in the host name part and ipv6 addresses that
+ 	 * have ":", "[" and "]".
+ 	 */
+-	if (check_colon(ptr)) {
++	if (!check_colon(ptr)) {
++		error(logopt,
++		      "expected colon delimeter not found in location %s",
++		      loc);
++		return 0;
++	} else {
+ 		while (*ptr && strncmp(ptr, ":/", 2)) {
+ 			if (!(isalnum(*ptr) ||
+ 			    *ptr == '-' || *ptr == '.' || *ptr == '_' ||
+ 			    *ptr == ',' || *ptr == '(' || *ptr == ')' ||
+ 			    *ptr == '#' || *ptr == '@' || *ptr == ':' ||
+-			    *ptr == '[' || *ptr == ']'))
++			    *ptr == '[' || *ptr == ']')) {
++				error(logopt, "invalid character \"%c\" "
++				      "found in location %s", *ptr, loc);
+ 				return 0;
++			}
+ 			ptr++;
+ 		}
+ 
+@@ -883,8 +891,10 @@ static int validate_location(char *loc)
+ 	}
+ 
+ 	/* Must always be something following */
+-	if (!*ptr)
++	if (!*ptr) {
++		error(logopt, "invalid location %s", loc);
+ 		return 0;
++	}
+ 
+ 	return 1;
+ }
+@@ -951,8 +961,7 @@ static int parse_mapent(const char *ent, char *g_options, char **options, char *
+ 		return 0;
+ 	}
+ 
+-	if (!validate_location(loc)) {
+-		warn(logopt, MODPREFIX "invalid location %s", loc);
++	if (!validate_location(logopt, loc)) {
+ 		free(myoptions);
+ 		free(loc);
+ 		return 0;
+@@ -985,9 +994,7 @@ static int parse_mapent(const char *ent, char *g_options, char **options, char *
+ 			return 0;
+ 		}
+ 
+-		if (!validate_location(ent_chunk)) {
+-			warn(logopt,
+-			      MODPREFIX "invalid location %s", ent_chunk);
++		if (!validate_location(logopt, ent_chunk)) {
+ 			free(ent_chunk);
+ 			free(myoptions);
+ 			free(loc);
+@@ -1688,8 +1695,7 @@ int parse_mount(struct autofs_point *ap, const char *name,
+ 			return 1;
+ 		}
+ 
+-		if (!validate_location(loc)) {
+-			warn(ap->logopt, MODPREFIX "invalid location %s", loc);
++		if (!validate_location(ap->logopt, loc)) {
+ 			free(loc);
+ 			free(options);
+ 			return 1;
+@@ -1714,9 +1720,7 @@ int parse_mount(struct autofs_point *ap, const char *name,
+ 				return 1;
+ 			}
+ 
+-			if (!validate_location(ent)) {
+-				warn(ap->logopt,
+-				     MODPREFIX "invalid location %s", loc);
++			if (!validate_location(ap->logopt, ent)) {
+ 				free(ent);
+ 				free(loc);
+ 				free(options);
diff --git a/autofs.spec b/autofs.spec
index 7dc918b..bfe6d13 100644
--- a/autofs.spec
+++ b/autofs.spec
@@ -4,13 +4,24 @@
 Summary: A tool for automatically mounting and unmounting filesystems
 Name: autofs
 Version: 5.0.6
-Release: 2%{?dist}
+Release: 3%{?dist}
 Epoch: 1
 License: GPLv2+
 Group: System Environment/Daemons
 Source: ftp://ftp.kernel.org/pub/linux/daemons/autofs/v5/autofs-%{version}.tar.bz2
 Patch1: autofs-5.0.6-fix-ipv6-name-for-lookup-fix.patch
-Patch2: autofs-5.0.6-add-dir-map-type.patch
+Patch2: autofs-5.0.6-improve-mount-location-error-reporting.patch
+Patch3: autofs-5.0.6-fix-paged-query-more-results-check.patch
+Patch4: autofs-5.0.6-fix-dumpmaps-not-reading-maps.patch
+Patch5: autofs-5.0.6-fix-result-null-check-in-read_one_map.patch
+Patch6: autofs-5.0.6-fix-LDAP-result-leaks-on-error-paths.patch
+Patch7: autofs-5.0.6-code-analysis-fixes-1.patch
+Patch8: autofs-5.0.6-fix-not-bind-mounting-local-filesystem.patch
+Patch9: autofs-5.0.6-add-dir-map-type.patch
+Patch10: autofs-5.0.6-fix-wait-for-master-source-mutex.patch
+Patch11: autofs-5.0.6-fix-submount-shutdown-race.patch
+Patch12: autofs-5.0.6-fix-fix-map-source-check-in-file-lookup.patch
+Patch13: autofs-5.0.6-add-disable-move-mount-configure-option.patch
 Buildroot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
 BuildRequires: autoconf, hesiod-devel, openldap-devel, bison, flex, libxml2-devel, cyrus-sasl-devel, openssl-devel module-init-tools util-linux nfs-utils e2fsprogs libtirpc-devel
 Conflicts: cyrus-sasl-lib < 2.1.23-9
@@ -55,10 +66,21 @@ inkludera nÀtfilsystem, CD-ROM, floppydiskar, och sÄ vidare.
 echo %{version}-%{release} > .version
 %patch1 -p1
 %patch2 -p1
+%patch3 -p1
+%patch4 -p1
+%patch5 -p1
+%patch6 -p1
+%patch7 -p1
+%patch8 -p1
+%patch9 -p1
+%patch10 -p1
+%patch11 -p1
+%patch12 -p1
+%patch13 -p1
 
 %build
 #CFLAGS="$RPM_OPT_FLAGS" ./configure --prefix=/usr --libdir=%{_libdir}
-%configure --disable-mount-locking --enable-ignore-busy --with-libtirpc
+%configure --disable-mount-locking --enable-ignore-busy --with-libtirpc --disable-mount-move
 make initdir=%{_initrddir} DONTSTRIP=1
 
 %install
@@ -109,6 +131,20 @@ fi
 %dir /etc/auto.master.d
 
 %changelog
+* Tue Nov 8 2011 Ian Kent <ikent at redhat.com> - 1:5.0.6-3
+- improve mount location error reporting.
+- fix paged query more results check.
+- fix dumpmaps not reading maps.
+- fix result null check in read_one_map().
+- Fix LDAP result leaks on error paths.
+- code analysis fixes 1.
+- fix not bind mounting local filesystem.
+- update dir map-type patch for changed patch order.
+- fix wait for master source mutex.
+- fix submount shutdown race
+- fix fix map source check in file lookup.
+- add disable move mount configure option.
+
 * Wed Jul 6 2011 Ian Kent <ikent at redhat.com> - 1:5.0.6-2
 - add missing spec file entries for dir-type change (bz719208).
 


More information about the scm-commits mailing list