[autofs] - update with upstream fixes.

Ian Kent iankent at fedoraproject.org
Tue Mar 12 01:21:13 UTC 2013


commit 92f44e815c58bf5b00b8321b02461df8a8c354e5
Author: Ian Kent <raven at themaw.net>
Date:   Tue Mar 12 09:20:33 2013 +0800

    - update with upstream fixes.

 autofs-5.0.7-add-symlink-pseudo-option.patch       |  217 +++++++++++++++++++
 ...s-5.0.7-depricate-nosymlink-pseudo-option.patch |   40 ++++
 ...-5.0.7-document-browse-option-in-man-page.patch |   46 ++++
 ....0.7-dont-fail-on-master-map-self-include.patch |   59 +++++
 ...s-5.0.7-fix-automounter-support-on-parisc.patch |   24 ++
 ...descriptor-leak-when-reloading-the-daemon.patch |  179 ++++++++++++++++
 autofs-5.0.7-fix-libtirpc-build-option.patch       |   66 ++++++
 autofs-5.0.7-fix-requires-in-spec-file.patch       |   37 ++++
 autofs-5.0.7-fix-systemd-unidir-in-spec-file.patch |   72 +++++++
 ...s-5.0.7-fix-wildcard-multi-map-regression.patch |  225 ++++++++++++++++++++
 autofs-5.0.7-update-kernel-include-files.patch     |   92 ++++++++
 autofs.spec                                        |   57 ++++-
 12 files changed, 1103 insertions(+), 11 deletions(-)
---
diff --git a/autofs-5.0.7-add-symlink-pseudo-option.patch b/autofs-5.0.7-add-symlink-pseudo-option.patch
new file mode 100644
index 0000000..b0440f4
--- /dev/null
+++ b/autofs-5.0.7-add-symlink-pseudo-option.patch
@@ -0,0 +1,217 @@
+autofs-5.0.7 - add symlink pseudo option
+
+From: Ian Kent <raven at themaw.net>
+
+Add a "symlink" pseudo option to tell the bind mount module to symlink
+instead of bind when mounting mounts other than direct mounts and
+non-root indirect mount offset mounts (aka. non-root multi-mount
+entries).
+---
+ CHANGELOG              |    1 +
+ include/automount.h    |    3 +++
+ lib/master_parse.y     |    8 +++++++-
+ lib/master_tok.l       |    1 +
+ man/auto.master.5.in   |    8 ++++++++
+ modules/mount_autofs.c |    5 +++++
+ modules/mount_bind.c   |   36 +++++++++++++++++++++++++++++++++++-
+ 7 files changed, 60 insertions(+), 2 deletions(-)
+
+diff --git a/CHANGELOG b/CHANGELOG
+index c189483..247d334 100644
+--- a/CHANGELOG
++++ b/CHANGELOG
+@@ -32,6 +32,7 @@
+ - fix wildcard multi map regression.
+ - fix file descriptor leak when reloading the daemon.
+ - depricate nosymlink pseudo option.
++- add symlink pseudo option.
+ 
+ 25/07/2012 autofs-5.0.7
+ =======================
+diff --git a/include/automount.h b/include/automount.h
+index 37541f5..e72fa0d 100644
+--- a/include/automount.h
++++ b/include/automount.h
+@@ -455,6 +455,9 @@ struct kernel_mod_version {
+ /* Don't use bind mounts even when system supports them */
+ #define MOUNT_FLAG_NOBIND		0x0020
+ 
++/* Use symlinks instead of bind mounting local mounts */
++#define MOUNT_FLAG_SYMLINK		0x0040
++
+ struct autofs_point {
+ 	pthread_t thid;
+ 	char *path;			/* Mount point name */
+diff --git a/lib/master_parse.y b/lib/master_parse.y
+index f925b5a..11caf5b 100644
+--- a/lib/master_parse.y
++++ b/lib/master_parse.y
+@@ -57,6 +57,7 @@ static char *type;
+ static char *format;
+ static long timeout;
+ static long negative_timeout;
++static unsigned symlnk;
+ static unsigned nobind;
+ static unsigned ghost;
+ extern unsigned global_selection_options;
+@@ -100,7 +101,7 @@ static int master_fprintf(FILE *, char *, ...);
+ %token COMMENT
+ %token MAP
+ %token OPT_TIMEOUT OPT_NTIMEOUT OPT_NOBIND OPT_NOGHOST OPT_GHOST OPT_VERBOSE
+-%token OPT_DEBUG OPT_RANDOM OPT_USE_WEIGHT
++%token OPT_DEBUG OPT_RANDOM OPT_USE_WEIGHT OPT_SYMLINK
+ %token COLON COMMA NL DDASH
+ %type <strtype> map
+ %type <strtype> options
+@@ -186,6 +187,7 @@ line:
+ 	| PATH OPT_USE_WEIGHT { master_notify($1); YYABORT; }
+ 	| PATH OPT_DEBUG { master_notify($1); YYABORT; }
+ 	| PATH OPT_TIMEOUT { master_notify($1); YYABORT; }
++	| PATH OPT_SYMLINK { master_notify($1); YYABORT; }
+ 	| PATH OPT_NOBIND { master_notify($1); YYABORT; }
+ 	| PATH OPT_GHOST { master_notify($1); YYABORT; }
+ 	| PATH OPT_NOGHOST { master_notify($1); YYABORT; }
+@@ -557,6 +559,7 @@ option: daemon_option
+ 
+ daemon_option: OPT_TIMEOUT NUMBER { timeout = $2; }
+ 	| OPT_NTIMEOUT NUMBER { negative_timeout = $2; }
++	| OPT_SYMLINK	{ symlnk = 1; }
+ 	| OPT_NOBIND	{ nobind = 1; }
+ 	| OPT_NOGHOST	{ ghost = 0; }
+ 	| OPT_GHOST	{ ghost = 1; }
+@@ -627,6 +630,7 @@ static void local_init_vars(void)
+ 	debug = 0;
+ 	timeout = -1;
+ 	negative_timeout = 0;
++	symlnk = 0;
+ 	nobind = 0;
+ 	ghost = defaults_get_browse_mode();
+ 	random_selection = global_selection_options & MOUNT_FLAG_RANDOM_SELECT;
+@@ -811,6 +815,8 @@ int master_parse_entry(const char *buffer, unsigned int default_timeout, unsigne
+ 		entry->ap->flags |= MOUNT_FLAG_RANDOM_SELECT;
+ 	if (use_weight)
+ 		entry->ap->flags |= MOUNT_FLAG_USE_WEIGHT_ONLY;
++	if (symlnk)
++		entry->ap->flags |= MOUNT_FLAG_SYMLINK;
+ 	if (negative_timeout)
+ 		entry->ap->negative_timeout = negative_timeout;
+ 
+diff --git a/lib/master_tok.l b/lib/master_tok.l
+index 30abb15..f9b4e55 100644
+--- a/lib/master_tok.l
++++ b/lib/master_tok.l
+@@ -361,6 +361,7 @@ OPTNTOUT	(-n{OPTWS}|-n{OPTWS}={OPTWS}|--negative-timeout{OPTWS}|--negative-timeo
+ 		return(NUMBER);
+ 	}
+ 
++	-?symlink		{ return(OPT_SYMLINK); }
+ 	-?nobind		{ return(OPT_NOBIND); }
+ 	-?nobrowse		{ return(OPT_NOGHOST); }
+ 	-g|--ghost|-?browse	{ return(OPT_GHOST); }
+diff --git a/man/auto.master.5.in b/man/auto.master.5.in
+index 8007542..bbea43a 100644
+--- a/man/auto.master.5.in
++++ b/man/auto.master.5.in
+@@ -159,6 +159,14 @@ on individual map entries of both types. Bind mounting of NFS file
+ systems can also be prevented for specific map entrys by adding the
+ "port=" mount option to the entries.
+ .TP
++.I "symlink"
++This option makes bind mounting use a symlink instead of an actual bind
++mount. It is an autofs specific option that is a pseudo mount option and
++so is given without a leading dash. It may be used with indirect map
++entries only, either in the master map (so it effects all map entries)
++or with individual map entries. The option is ignored for direct mounts
++and non-root offest mount entries.
++.TP
+ .I "\-r, \-\-random-multimount-selection"
+ Enables the use of ramdom selection when choosing a host from a
+ list of replicated servers. This option is applied to this mount
+diff --git a/modules/mount_autofs.c b/modules/mount_autofs.c
+index ef16020..8c1e600 100644
+--- a/modules/mount_autofs.c
++++ b/modules/mount_autofs.c
+@@ -51,6 +51,7 @@ int mount_mount(struct autofs_point *ap, const char *root, const char *name,
+ 	int argc, status;
+ 	int nobind = ap->flags & MOUNT_FLAG_NOBIND;
+ 	int ghost = ap->flags & MOUNT_FLAG_GHOST;
++	int symlnk = ap->flags & MOUNT_FLAG_SYMLINK;
+ 	time_t timeout = ap->entry->maps->exp_timeout;
+ 	unsigned logopt = ap->logopt;
+ 	struct map_type_info *info;
+@@ -120,6 +121,8 @@ int mount_mount(struct autofs_point *ap, const char *root, const char *name,
+ 				nobind = 1;
+ 			else if (strncmp(cp, "browse", 6) == 0)
+ 				ghost = 1;
++			else if (strncmp(cp, "symlink", 7) == 0)
++				symlnk = 1;
+ 			else if (strncmp(cp, "timeout=", 8) == 0) {
+ 				char *val = strchr(cp, '=');
+ 				unsigned tout;
+@@ -158,6 +161,8 @@ int mount_mount(struct autofs_point *ap, const char *root, const char *name,
+ 	}
+ 	nap = entry->ap;
+ 	nap->parent = ap;
++	if (symlnk)
++		nap->flags |= MOUNT_FLAG_SYMLINK;
+ 
+ 	argc = 1;
+ 
+diff --git a/modules/mount_bind.c b/modules/mount_bind.c
+index 9bce686..4975294 100644
+--- a/modules/mount_bind.c
++++ b/modules/mount_bind.c
+@@ -73,10 +73,44 @@ int mount_mount(struct autofs_point *ap, const char *root, const char *name, int
+ 	char buf[MAX_ERR_BUF];
+ 	int err;
+ 	int i, len;
++	int symlnk = (*name != '/' && (ap->flags & MOUNT_FLAG_SYMLINK));
+ 
+ 	if (ap->flags & MOUNT_FLAG_REMOUNT)
+ 		return 0;
+ 
++	/* Extract "symlink" pseudo-option which forces local filesystems
++	 * to be symlinked instead of bound.
++	 */
++	if (*name != '/' && !symlnk && options) {
++		const char *comma;
++		int o_len = strlen(options) + 1;
++
++		for (comma = options; *comma != '\0';) {
++			const char *cp;
++			const char *end;
++
++			while (*comma == ',')
++				comma++;
++
++			/* Skip leading white space */
++			while (*comma == ' ' || *comma == '\t')
++				comma++;
++
++			cp = comma;
++			while (*comma != '\0' && *comma != ',')
++				comma++;
++
++			/* Skip trailing white space */
++			end = comma - 1;
++			while (*comma == ' ' || *comma == '\t')
++				end--;
++
++			o_len = end - cp + 1;
++			if (strncmp("symlink", cp, o_len) == 0)
++				symlnk = 1;
++		}
++	}
++
+ 	/* Root offset of multi-mount */
+ 	len = strlen(root);
+ 	if (root[len - 1] == '/') {
+@@ -100,7 +134,7 @@ int mount_mount(struct autofs_point *ap, const char *root, const char *name, int
+ 	if (options == NULL || *options == '\0')
+ 		options = "defaults";
+ 
+-	if (bind_works) {
++	if (!symlnk && bind_works) {
+ 		int status, existed = 1;
+ 
+ 		debug(ap->logopt, MODPREFIX "calling mkdir_path %s", fullpath);
diff --git a/autofs-5.0.7-depricate-nosymlink-pseudo-option.patch b/autofs-5.0.7-depricate-nosymlink-pseudo-option.patch
new file mode 100644
index 0000000..c784de7
--- /dev/null
+++ b/autofs-5.0.7-depricate-nosymlink-pseudo-option.patch
@@ -0,0 +1,40 @@
+autofs-5.0.7 - depricate nosymlink pseudo option
+
+From: Ian Kent <raven at themaw.net>
+
+The undocumented "nosymlink" option was the only way to force local
+NFS mounting until the more descriptive "nobind" option was added.
+
+So depricate the "nosymlink" option in favour of the "nobind" option.
+---
+ CHANGELOG           |    1 +
+ modules/mount_nfs.c |    4 ++++
+ 2 files changed, 5 insertions(+)
+
+diff --git a/CHANGELOG b/CHANGELOG
+index a7ed212..c189483 100644
+--- a/CHANGELOG
++++ b/CHANGELOG
+@@ -31,6 +31,7 @@
+ - dont fail on master map self include.
+ - fix wildcard multi map regression.
+ - fix file descriptor leak when reloading the daemon.
++- depricate nosymlink pseudo option.
+ 
+ 25/07/2012 autofs-5.0.7
+ =======================
+diff --git a/modules/mount_nfs.c b/modules/mount_nfs.c
+index bbbb1de..e61320b 100644
+--- a/modules/mount_nfs.c
++++ b/modules/mount_nfs.c
+@@ -125,6 +125,10 @@ int mount_mount(struct autofs_point *ap, const char *root, const char *name, int
+ 
+ 			o_len = end - cp + 1;
+ 			if (strncmp("nosymlink", cp, o_len) == 0) {
++				warn(ap->logopt, MODPREFIX
++				     "the \"nosymlink\" option is depricated "
++				     "and will soon be removed, "
++				     "use the \"nobind\" option instead");
+ 				nosymlink = 1;
+ 			} else if (strncmp("nobind", cp, o_len) == 0) {
+ 				nobind = 1;
diff --git a/autofs-5.0.7-document-browse-option-in-man-page.patch b/autofs-5.0.7-document-browse-option-in-man-page.patch
new file mode 100644
index 0000000..4641342
--- /dev/null
+++ b/autofs-5.0.7-document-browse-option-in-man-page.patch
@@ -0,0 +1,46 @@
+autofs-5.0.7 - document browse option in man page
+
+From: Ian Kent <raven at themaw.net>
+
+The "browse" option has remained undocumented for a long time.
+Finally add a section for it to auto.master(5) making special
+note of the potential performance implications.
+---
+ CHANGELOG            |    1 +
+ man/auto.master.5.in |   11 +++++++++++
+ 2 files changed, 12 insertions(+)
+
+diff --git a/CHANGELOG b/CHANGELOG
+index ecdea0b..d8e4049 100644
+--- a/CHANGELOG
++++ b/CHANGELOG
+@@ -36,6 +36,7 @@
+ - fix requires in spec file.
+ - fix libtirpc build option to require libtirpc-devel if needed.
+ - fix systemd unidir in spec file.
++- document browse option in man page.
+ 
+ 25/07/2012 autofs-5.0.7
+ =======================
+diff --git a/man/auto.master.5.in b/man/auto.master.5.in
+index bbea43a..c552e56 100644
+--- a/man/auto.master.5.in
++++ b/man/auto.master.5.in
+@@ -147,6 +147,17 @@ multiple file systems should be mounted (`multimounts'). If this option
+ is given, no file system is mounted at all if at least one file system
+ can't be mounted.
+ .TP
++.I "[no]browse"
++This is an autofs specific option that is a pseudo mount option and
++so is given without a leading dash. Use of the browse option pre-creates
++mount point directories for indirect mount maps so the map keys can be
++seen in a directory listing without being mounted. Use of this option
++can cause performance problem if the indirect map is large so it should
++be used with caution. The internal program default is to enable browse
++mode for indirect mounts but the default installed configuration overrides
++this by setting BROWSE_MODE to "no" because of the potential performance
++problem.
++.TP
+ .I "nobind"
+ This is an autofs specific option that is a pseudo mount option and
+ so is given without a leading dash. It may be used either in the master
diff --git a/autofs-5.0.7-dont-fail-on-master-map-self-include.patch b/autofs-5.0.7-dont-fail-on-master-map-self-include.patch
new file mode 100644
index 0000000..afb908b
--- /dev/null
+++ b/autofs-5.0.7-dont-fail-on-master-map-self-include.patch
@@ -0,0 +1,59 @@
+autofs-5.0.7 - dont fail on master map self include
+
+From: Ian Kent <raven at themaw.net>
+
+When reading the master map a self included file map should skip the source
+and proceed to the next so, in this case, return an nss status that will
+allow the map read to continue. In particular not NSS_STATUS_UNAVAIL which
+causes the lookup to record a failure or NSS_STATUS_SUCCESS which indicates
+a successful lookup and termintes the reading of sources.
+---
+ CHANGELOG             |    1 +
+ modules/lookup_file.c |    7 ++++---
+ 2 files changed, 5 insertions(+), 3 deletions(-)
+
+diff --git a/CHANGELOG b/CHANGELOG
+index 39388a5..97d6f48 100644
+--- a/CHANGELOG
++++ b/CHANGELOG
+@@ -28,6 +28,7 @@
+ - make yellow pages support optional.
+ - modules/replicated.c: use sin6_addr.s6_addr32.
+ - workaround missing GNU versionsort extension.
++- dont fail on master map self include.
+ 
+ 25/07/2012 autofs-5.0.7
+ =======================
+diff --git a/modules/lookup_file.c b/modules/lookup_file.c
+index facb305..f37bed9 100644
+--- a/modules/lookup_file.c
++++ b/modules/lookup_file.c
+@@ -397,8 +397,9 @@ int lookup_read_master(struct master *master, time_t age, void *context)
+ 	unsigned int path_len, ent_len;
+ 	int entry, cur_state;
+ 
++	/* Don't return fail on self include, skip source */
+ 	if (master->recurse)
+-		return NSS_STATUS_UNAVAIL;
++		return NSS_STATUS_TRYAGAIN;
+ 
+ 	if (master->depth > MAX_INCLUDE_DEPTH) {
+ 		error(logopt, MODPREFIX
+@@ -443,7 +444,7 @@ int lookup_read_master(struct master *master, time_t age, void *context)
+ 
+ 			inc = check_master_self_include(master, ctxt);
+ 			if (inc) 
+-				master->recurse = 1;;
++				master->recurse = 1;
+ 			master->depth++;
+ 			status = lookup_nss_read_master(master, age);
+ 			if (!status) {
+@@ -645,7 +646,7 @@ int lookup_read_map(struct autofs_point *ap, time_t age, void *context)
+ 	mc = source->mc;
+ 
+ 	if (source->recurse)
+-		return NSS_STATUS_UNAVAIL;
++		return NSS_STATUS_TRYAGAIN;
+ 
+ 	if (source->depth > MAX_INCLUDE_DEPTH) {
+ 		error(ap->logopt,
diff --git a/autofs-5.0.7-fix-automounter-support-on-parisc.patch b/autofs-5.0.7-fix-automounter-support-on-parisc.patch
new file mode 100644
index 0000000..e00fdc1
--- /dev/null
+++ b/autofs-5.0.7-fix-automounter-support-on-parisc.patch
@@ -0,0 +1,24 @@
+autofs-5.0.7 - fix automounter support on parisc
+
+From: Helge Deller <deller at gmx.de>
+
+This patch fixes automounter support on the parisc architecture with
+64-bit kernel and 32-bit userspace.
+
+Signed-off-by: Helge Deller <deller at gmx.de>
+---
+ daemon/automount.c |    1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/daemon/automount.c b/daemon/automount.c
+index 4a3eb3d..4c651cf 100644
+--- a/daemon/automount.c
++++ b/daemon/automount.c
+@@ -610,6 +610,7 @@ static size_t get_kpkt_len(void)
+ 		if (strcmp(un.machine, "alpha") == 0 ||
+ 		    strcmp(un.machine, "ia64") == 0 ||
+ 		    strcmp(un.machine, "x86_64") == 0 ||
++		    strcmp(un.machine, "parisc64") == 0 ||
+ 		    strcmp(un.machine, "ppc64") == 0)
+ 			pkt_len += 4;
+ 
diff --git a/autofs-5.0.7-fix-file-descriptor-leak-when-reloading-the-daemon.patch b/autofs-5.0.7-fix-file-descriptor-leak-when-reloading-the-daemon.patch
new file mode 100644
index 0000000..8ce6c0f
--- /dev/null
+++ b/autofs-5.0.7-fix-file-descriptor-leak-when-reloading-the-daemon.patch
@@ -0,0 +1,179 @@
+autofs-5.0.7 - fix file descriptor leak when reloading the daemon
+
+From: Leonardo Chiquitto <leonardo.lists at gmail.com>
+
+A customer reported that AutoFS may leak file descriptors when some
+maps are modified and the daemon reloaded. I'm able to reproduce the
+problem on 5.0.7 by following these steps:
+
+1. Configure a simple direct mount:
+
+# cat /etc/auto.master
+/-	/etc/auto.direct
+
+# cat /etc/auto.direct
+/nfs   server:/nfs
+
+2. Start the automounter and do NOT trigger the mount
+
+3. Replace /etc/auto.direct with:
+
+# cat /etc/auto.direct
+/nfs/1  server:/nfs
+/nfs/2  server:/nfs
+
+4. Reload:
+
+# kill -HUP $(pidof automount)
+
+>From now on, every reload will leak a file descriptor:
+
+# ls -la /proc/$(pidof automount)/fd | grep /nfs
+lr-x------ 1 root root 64 Aug 14 22:08 11 -> /nfs
+lr-x------ 1 root root 64 Aug 14 22:08 12 -> /nfs
+lr-x------ 1 root root 64 Aug 14 22:08 13 -> /nfs
+lr-x------ 1 root root 64 Aug 14 22:08 14 -> /nfs
+lr-x------ 1 root root 64 Aug 14 22:08 5 -> /nfs
+
+I've investigated the problem and discovered that the leak happens in
+do_umount_autofs_direct():
+
+- edit imk
+The same leak is present in umount_autofs_offset() also.
+Updated patch to cover that too.
+- end edit
+
+int do_umount_autofs_direct(struct autofs_point *ap, struct mnt_list
+*mnts, struct mapent *me)
+{
+(...)
+	if (me->ioctlfd != -1) {
+		if (tree_is_mounted(mnts, me->key, MNTS_REAL)) {
+			error(ap->logopt,
+			      "attempt to umount busy direct mount %s",
+			      me->key);
+			return 1;
+		}
+		ioctlfd = me->ioctlfd;
+	} else	// ioctlfd == -1
+		ops->open(ap->logopt, &ioctlfd, me->dev, me->key);  <= we open it here
+
+	if (ioctlfd >= 0) {
+		unsigned int status = 1;
+
+		rv = ops->askumount(ap->logopt, ioctlfd, &status);
+				/// at this point, rv == 0 and status == 0
+		if (rv) {
+			char *estr = strerror_r(errno, buf, MAX_ERR_BUF);
+			error(ap->logopt, "ioctl failed: %s", estr);
+			return 1;
+		} else if (!status) {
+				/// at this point, ap->state == ST_READMAP
+			if (ap->state != ST_SHUTDOWN_FORCE) {
+				error(ap->logopt,
+				      "ask umount returned busy for %s",
+				      me->key);
+				return 1;			<= we return here, without closing the fd
+			} else {
+				me->ioctlfd = -1;
+				ops->catatonic(ap->logopt, ioctlfd);
+				ops->close(ap->logopt, ioctlfd);
+				goto force_umount;
+			}
+(...)
+---
+ CHANGELOG       |    1 +
+ daemon/direct.c |   19 ++++++++++++++++---
+ 2 files changed, 17 insertions(+), 3 deletions(-)
+
+diff --git a/CHANGELOG b/CHANGELOG
+index 46ef335..a7ed212 100644
+--- a/CHANGELOG
++++ b/CHANGELOG
+@@ -30,6 +30,7 @@
+ - workaround missing GNU versionsort extension.
+ - dont fail on master map self include.
+ - fix wildcard multi map regression.
++- fix file descriptor leak when reloading the daemon.
+ 
+ 25/07/2012 autofs-5.0.7
+ =======================
+diff --git a/daemon/direct.c b/daemon/direct.c
+index 3e09c5d..228a666 100644
+--- a/daemon/direct.c
++++ b/daemon/direct.c
+@@ -86,7 +86,8 @@ int do_umount_autofs_direct(struct autofs_point *ap, struct mnt_list *mnts, stru
+ {
+ 	struct ioctl_ops *ops = get_ioctl_ops();
+ 	char buf[MAX_ERR_BUF];
+-	int ioctlfd, rv, left, retries;
++	int ioctlfd = -1, rv, left, retries;
++	int opened = 0;
+ 
+ 	left = umount_multi(ap, me->key, 0);
+ 	if (left) {
+@@ -103,8 +104,10 @@ int do_umount_autofs_direct(struct autofs_point *ap, struct mnt_list *mnts, stru
+ 			return 1;
+ 		}
+ 		ioctlfd = me->ioctlfd;
+-	} else
++	} else {
+ 		ops->open(ap->logopt, &ioctlfd, me->dev, me->key);
++		opened = 1;
++	}
+ 
+ 	if (ioctlfd >= 0) {
+ 		unsigned int status = 1;
+@@ -113,12 +116,16 @@ int do_umount_autofs_direct(struct autofs_point *ap, struct mnt_list *mnts, stru
+ 		if (rv) {
+ 			char *estr = strerror_r(errno, buf, MAX_ERR_BUF);
+ 			error(ap->logopt, "ioctl failed: %s", estr);
++			if (opened && ioctlfd != -1)
++				ops->close(ap->logopt, ioctlfd);
+ 			return 1;
+ 		} else if (!status) {
+ 			if (ap->state != ST_SHUTDOWN_FORCE) {
+ 				error(ap->logopt,
+ 				      "ask umount returned busy for %s",
+ 				      me->key);
++				if (opened && ioctlfd != -1)
++					ops->close(ap->logopt, ioctlfd);
+ 				return 1;
+ 			} else {
+ 				me->ioctlfd = -1;
+@@ -536,7 +543,8 @@ int umount_autofs_offset(struct autofs_point *ap, struct mapent *me)
+ {
+ 	struct ioctl_ops *ops = get_ioctl_ops();
+ 	char buf[MAX_ERR_BUF];
+-	int ioctlfd, rv = 1, retries;
++	int ioctlfd = -1, rv = 1, retries;
++	int opened = 0;
+ 
+ 	if (me->ioctlfd != -1) {
+ 		if (is_mounted(_PATH_MOUNTED, me->key, MNTS_REAL)) {
+@@ -554,6 +562,7 @@ int umount_autofs_offset(struct autofs_point *ap, struct mapent *me)
+ 			return 0;
+ 		}
+ 		ops->open(ap->logopt, &ioctlfd, me->dev, me->key);
++		opened = 1;
+ 	}
+ 
+ 	if (ioctlfd >= 0) {
+@@ -563,6 +572,8 @@ int umount_autofs_offset(struct autofs_point *ap, struct mapent *me)
+ 		if (rv) {
+ 			char *estr = strerror_r(errno, buf, MAX_ERR_BUF);
+ 			logerr("ioctl failed: %s", estr);
++			if (opened && ioctlfd != -1)
++				ops->close(ap->logopt, ioctlfd);
+ 			return 1;
+ 		} else if (!status) {
+ 			if (ap->state != ST_SHUTDOWN_FORCE) {
+@@ -570,6 +581,8 @@ int umount_autofs_offset(struct autofs_point *ap, struct mapent *me)
+ 					error(ap->logopt,
+ 					     "ask umount returned busy for %s",
+ 					     me->key);
++				if (opened && ioctlfd != -1)
++					ops->close(ap->logopt, ioctlfd);
+ 				return 1;
+ 			} else {
+ 				me->ioctlfd = -1;
diff --git a/autofs-5.0.7-fix-libtirpc-build-option.patch b/autofs-5.0.7-fix-libtirpc-build-option.patch
new file mode 100644
index 0000000..8ad2afa
--- /dev/null
+++ b/autofs-5.0.7-fix-libtirpc-build-option.patch
@@ -0,0 +1,66 @@
+autofs-5.0.7 - fix libtirpc build option
+
+From: Ian Kent <raven at themaw.net>
+
+
+---
+ CHANGELOG   |    1 +
+ autofs.spec |   17 ++++++++++++++++-
+ 2 files changed, 17 insertions(+), 1 deletion(-)
+
+diff --git a/CHANGELOG b/CHANGELOG
+index e848bcd..b6b2679 100644
+--- a/CHANGELOG
++++ b/CHANGELOG
+@@ -34,6 +34,7 @@
+ - depricate nosymlink pseudo option.
+ - add symlink pseudo option.
+ - fix requires in spec file.
++- fix libtirpc build option to require libtirpc-devel if needed.
+ 
+ 25/07/2012 autofs-5.0.7
+ =======================
+diff --git a/autofs.spec b/autofs.spec
+index 703f7a9..f77acc1 100644
+--- a/autofs.spec
++++ b/autofs.spec
+@@ -12,6 +12,10 @@
+ # disable them.
+ %define with_systemd        %{?_without_systemd:        0} %{?!_without_systemd:        1}
+ 
++# Use --without libtirpc in your rpmbuild command or force values to 0 to
++# disable them.
++%define with_libtirpc        %{?_without_libtirpc:        0} %{?!_without_libtirpc:        1}
++
+ Summary: A tool from automatically mounting and umounting filesystems.
+ Name: autofs
+ %define version 5.0.7
+@@ -25,6 +29,9 @@ Buildroot: %{_tmppath}/%{name}-tmp
+ %if %{with_systemd}
+ BuildRequires: systemd-units
+ %endif
++%if %{with_libtirpc}
++BuildRequires: libtirpc-devel
++%endif
+ BuildRequires: autoconf, hesiod-devel, openldap-devel, bison, flex, cyrus-sasl-devel
+ Requires: chkconfig
+ Requires: /bin/bash mktemp sed textutils sh-utils grep /bin/ps
+@@ -72,9 +79,17 @@ echo %{version}-%{release} > .version
+   %define _unitdir %{?_unitdir:/lib/systemd/system}
+   %define systemd_configure_arg --with-systemd
+ %endif
++%if %{with_libtirpc}
++  %define libtirpc_configure_arg --with-libtirpc
++%endif
+ 
+ %build
+-CFLAGS="$RPM_OPT_FLAGS -Wall" ./configure --libdir=%{_libdir} --disable-mount-locking --enable-ignore-busy --with-libtirpc %{?systemd_configure_arg:}
++CFLAGS="$RPM_OPT_FLAGS -Wall" \
++./configure --libdir=%{_libdir} \
++	--disable-mount-locking \
++	--enable-ignore-busy \
++	%{?systemd_configure_arg:} \
++	%{?libtirpc_configure_arg:}
+ CFLAGS="$RPM_OPT_FLAGS -Wall" make initdir=/etc/rc.d/init.d DONTSTRIP=1
+ 
+ %install
diff --git a/autofs-5.0.7-fix-requires-in-spec-file.patch b/autofs-5.0.7-fix-requires-in-spec-file.patch
new file mode 100644
index 0000000..404c848
--- /dev/null
+++ b/autofs-5.0.7-fix-requires-in-spec-file.patch
@@ -0,0 +1,37 @@
+autofs-5.0.7 - fix requires in spec file
+
+From: Ian Kent <raven at themaw.net>
+
+Fix the use of depricated reqires in tar spec file.
+---
+ CHANGELOG   |    1 +
+ autofs.spec |    4 ++--
+ 2 files changed, 3 insertions(+), 2 deletions(-)
+
+diff --git a/CHANGELOG b/CHANGELOG
+index 247d334..e848bcd 100644
+--- a/CHANGELOG
++++ b/CHANGELOG
+@@ -33,6 +33,7 @@
+ - fix file descriptor leak when reloading the daemon.
+ - depricate nosymlink pseudo option.
+ - add symlink pseudo option.
++- fix requires in spec file.
+ 
+ 25/07/2012 autofs-5.0.7
+ =======================
+diff --git a/autofs.spec b/autofs.spec
+index b8a3b7a..703f7a9 100644
+--- a/autofs.spec
++++ b/autofs.spec
+@@ -25,8 +25,8 @@ Buildroot: %{_tmppath}/%{name}-tmp
+ %if %{with_systemd}
+ BuildRequires: systemd-units
+ %endif
+-BuildPrereq: autoconf, hesiod-devel, openldap-devel, bison, flex, cyrus-sasl-devel
+-Prereq: chkconfig
++BuildRequires: autoconf, hesiod-devel, openldap-devel, bison, flex, cyrus-sasl-devel
++Requires: chkconfig
+ Requires: /bin/bash mktemp sed textutils sh-utils grep /bin/ps
+ %if %{with_systemd}
+ Requires(post): systemd-sysv
diff --git a/autofs-5.0.7-fix-systemd-unidir-in-spec-file.patch b/autofs-5.0.7-fix-systemd-unidir-in-spec-file.patch
new file mode 100644
index 0000000..d856faf
--- /dev/null
+++ b/autofs-5.0.7-fix-systemd-unidir-in-spec-file.patch
@@ -0,0 +1,72 @@
+autofs-5.0.7 - fix systemd unidir in spec file
+
+From: Ian Kent <raven at themaw.net>
+
+
+---
+ CHANGELOG   |    1 +
+ autofs.spec |   16 ++++++++--------
+ 2 files changed, 9 insertions(+), 8 deletions(-)
+
+diff --git a/CHANGELOG b/CHANGELOG
+index b6b2679..ecdea0b 100644
+--- a/CHANGELOG
++++ b/CHANGELOG
+@@ -35,6 +35,7 @@
+ - add symlink pseudo option.
+ - fix requires in spec file.
+ - fix libtirpc build option to require libtirpc-devel if needed.
++- fix systemd unidir in spec file.
+ 
+ 25/07/2012 autofs-5.0.7
+ =======================
+diff --git a/autofs.spec b/autofs.spec
+index f77acc1..a768e44 100644
+--- a/autofs.spec
++++ b/autofs.spec
+@@ -76,7 +76,7 @@ inkludera n
+ %setup -q
+ echo %{version}-%{release} > .version
+ %if %{with_systemd}
+-  %define _unitdir %{?_unitdir:/lib/systemd/system}
++  %define unitdir %{?_unitdir:/lib/systemd/system}
+   %define systemd_configure_arg --with-systemd
+ %endif
+ %if %{with_libtirpc}
+@@ -95,7 +95,7 @@ CFLAGS="$RPM_OPT_FLAGS -Wall" make initdir=/etc/rc.d/init.d DONTSTRIP=1
+ %install
+ rm -rf $RPM_BUILD_ROOT
+ %if %{with_systemd}
+-install -d -m 755 $RPM_BUILD_ROOT%{_unitdir}
++install -d -m 755 $RPM_BUILD_ROOT%{unitdir}
+ %else
+ mkdir -p -m755 $RPM_BUILD_ROOT/etc/rc.d/init.d
+ %endif
+@@ -109,9 +109,13 @@ make install mandir=%{_mandir} initdir=/etc/rc.d/init.d INSTALLROOT=$RPM_BUILD_R
+ echo make -C redhat
+ make -C redhat
+ %if %{with_systemd}
+-install -m 644 redhat/autofs.service $RPM_BUILD_ROOT%{_unitdir}/autofs.service
++# Configure can get this wrong when the unit files appear under /lib and /usr/lib
++find $RPM_BUILD_ROOT -type f -name autofs.service -exec rm -f {} \;
++install -m 644 redhat/autofs.service $RPM_BUILD_ROOT%{unitdir}/autofs.service
++%define init_file_name %{unitdir}/autofs.service
+ %else
+ install -m 755 redhat/autofs.init $RPM_BUILD_ROOT/etc/rc.d/init.d/autofs
++%define init_file_name /etc/rc.d/init.d/autofs
+ %endif
+ install -m 644 redhat/autofs.sysconfig $RPM_BUILD_ROOT/etc/sysconfig/autofs
+ 
+@@ -170,11 +174,7 @@ fi
+ %files
+ %defattr(-,root,root)
+ %doc CREDITS CHANGELOG INSTALL COPY* README* samples/ldap* samples/autofs.schema samples/autofs_ldap_auth.conf
+-%if %{with_systemd}
+-%{_unitdir}/autofs.service
+-%else
+-%config /etc/rc.d/init.d/autofs
+-%endif
++%config %{init_file_name}
+ %config(noreplace) /etc/auto.master
+ %config(noreplace,missingok) /etc/auto.misc
+ %config(noreplace,missingok) /etc/auto.net
diff --git a/autofs-5.0.7-fix-wildcard-multi-map-regression.patch b/autofs-5.0.7-fix-wildcard-multi-map-regression.patch
new file mode 100644
index 0000000..44e4a18
--- /dev/null
+++ b/autofs-5.0.7-fix-wildcard-multi-map-regression.patch
@@ -0,0 +1,225 @@
+autofs-5.0.7 - fix wildcard multi map regression
+
+From: Ian Kent <raven at themaw.net>
+
+A recent patch that removed code to add the current map entry when
+being parsed if it didn't already exist cause wildcard indirect
+multi-mount map entries to fail to mount.
+
+Indirect multi-mount map entries need the entry matched by a wildcard
+lookup to be added to the map entry cache because subsequent operations
+expect a distinct map entry to be present or they will fail. This is
+what the code that was removed did but it did so in the wrong place
+which caused a deadlock situation.
+---
+ CHANGELOG                |    1 +
+ modules/lookup_file.c    |   23 ++++++++++++++++-------
+ modules/lookup_ldap.c    |   19 +++++++++++++++----
+ modules/lookup_nisplus.c |   21 ++++++++++++++++-----
+ modules/lookup_sss.c     |   17 ++++++++++++++---
+ modules/lookup_yp.c      |   21 ++++++++++++++++-----
+ 6 files changed, 78 insertions(+), 24 deletions(-)
+
+diff --git a/CHANGELOG b/CHANGELOG
+index 97d6f48..46ef335 100644
+--- a/CHANGELOG
++++ b/CHANGELOG
+@@ -29,6 +29,7 @@
+ - modules/replicated.c: use sin6_addr.s6_addr32.
+ - workaround missing GNU versionsort extension.
+ - dont fail on master map self include.
++- fix wildcard multi map regression.
+ 
+ 25/07/2012 autofs-5.0.7
+ =======================
+diff --git a/modules/lookup_file.c b/modules/lookup_file.c
+index f37bed9..65e5ee6 100644
+--- a/modules/lookup_file.c
++++ b/modules/lookup_file.c
+@@ -1040,7 +1040,7 @@ int lookup_mount(struct autofs_point *ap, const char *name, int name_len, void *
+ 			return NSS_STATUS_UNAVAIL;
+ 		}
+ 
+-		cache_readlock(mc);
++		cache_writelock(mc);
+ 		me = cache_lookup_first(mc);
+ 		if (me && st.st_mtime <= me->age) {
+ 			/*
+@@ -1082,7 +1082,7 @@ int lookup_mount(struct autofs_point *ap, const char *name, int name_len, void *
+ 		}
+ 	}
+ 
+-	cache_readlock(mc);
++	cache_writelock(mc);
+ do_cache_lookup:
+ 	me = cache_lookup(mc, key);
+ 	/*
+@@ -1098,11 +1098,20 @@ do_cache_lookup:
+ 		if (!me)
+ 			me = cache_lookup_distinct(mc, "*");
+ 	}
+-	if (me && me->mapent && (me->source == source || *me->key == '/')) {
+-		pthread_cleanup_push(cache_lock_cleanup, mc);
+-		strcpy(mapent_buf, me->mapent);
+-		mapent = mapent_buf;
+-		pthread_cleanup_pop(0);
++	if (me && me->mapent) {
++		/*
++		 * Add wildcard match for later validation checks and
++		 * negative cache lookups.
++		 */
++		if (ap->type == LKP_INDIRECT && *me->key == '*') {
++			ret = cache_update(mc, source, key, me->mapent, me->age);
++			if (!(ret & (CHE_OK | CHE_UPDATED)))
++				me = NULL;
++		}
++		if (me && (me->source == source || *me->key == '/')) {
++			strcpy(mapent_buf, me->mapent);
++			mapent = mapent_buf;
++		}
+ 	}
+ 	cache_unlock(mc);
+ 
+diff --git a/modules/lookup_ldap.c b/modules/lookup_ldap.c
+index 431e50d..83e3215 100644
+--- a/modules/lookup_ldap.c
++++ b/modules/lookup_ldap.c
+@@ -2969,7 +2969,7 @@ int lookup_mount(struct autofs_point *ap, const char *name, int name_len, void *
+ 			return status;
+ 	}
+ 
+-	cache_readlock(mc);
++	cache_writelock(mc);
+ 	me = cache_lookup(mc, key);
+ 	/* Stale mapent => check for entry in alternate source or wildcard */
+ 	if (me && !me->mapent) {
+@@ -2979,9 +2979,20 @@ int lookup_mount(struct autofs_point *ap, const char *name, int name_len, void *
+ 		if (!me)
+ 			me = cache_lookup_distinct(mc, "*");
+ 	}
+-	if (me && me->mapent && (me->source == source || *me->key == '/')) {
+-		strcpy(mapent_buf, me->mapent);
+-		mapent = mapent_buf;
++	if (me && me->mapent) {
++		/*
++		 * Add wildcard match for later validation checks and
++		 * negative cache lookups.
++		 */
++		if (ap->type == LKP_INDIRECT && *me->key == '*') {
++			ret = cache_update(mc, source, key, me->mapent, me->age);
++			if (!(ret & (CHE_OK | CHE_UPDATED)))
++				me = NULL;
++		}
++		if (me && (me->source == source || *me->key == '/')) {
++			strcpy(mapent_buf, me->mapent);
++			mapent = mapent_buf;
++		}
+ 	}
+ 	cache_unlock(mc);
+ 
+diff --git a/modules/lookup_nisplus.c b/modules/lookup_nisplus.c
+index 9fced96..8237a1e 100644
+--- a/modules/lookup_nisplus.c
++++ b/modules/lookup_nisplus.c
+@@ -561,7 +561,7 @@ int lookup_mount(struct autofs_point *ap, const char *name, int name_len, void *
+ 			return status;
+ 	}
+ 
+-	cache_readlock(mc);
++	cache_writelock(mc);
+ 	me = cache_lookup(mc, key);
+ 	/* Stale mapent => check for entry in alternate source or wildcard */
+ 	if (me && !me->mapent) {
+@@ -571,10 +571,21 @@ int lookup_mount(struct autofs_point *ap, const char *name, int name_len, void *
+ 		if (!me)
+ 			me = cache_lookup_distinct(mc, "*");
+ 	}
+-	if (me && me->mapent && (me->source == source || *me->key == '/')) {
+-		mapent_len = strlen(me->mapent);
+-		mapent = malloc(mapent_len + 1);
+-		strcpy(mapent, me->mapent);
++	if (me && me->mapent) {
++		/*
++		 * Add wildcard match for later validation checks and
++		 * negative cache lookups.
++		 */
++		if (ap->type == LKP_INDIRECT && *me->key == '*') {
++			ret = cache_update(mc, source, key, me->mapent, me->age);
++			if (!(ret & (CHE_OK | CHE_UPDATED)))
++				me = NULL;
++		}
++		if (me && (me->source == source || *me->key == '/')) {
++			mapent_len = strlen(me->mapent);
++			mapent = malloc(mapent_len + 1);
++			strcpy(mapent, me->mapent);
++		}
+ 	}
+ 	cache_unlock(mc);
+ 
+diff --git a/modules/lookup_sss.c b/modules/lookup_sss.c
+index e0b84cc..5c2ed0a 100644
+--- a/modules/lookup_sss.c
++++ b/modules/lookup_sss.c
+@@ -645,9 +645,20 @@ int lookup_mount(struct autofs_point *ap, const char *name, int name_len, void *
+ 		if (!me)
+ 			me = cache_lookup_distinct(mc, "*");
+ 	}
+-	if (me && me->mapent && (me->source == source || *me->key == '/')) {
+-		strcpy(mapent_buf, me->mapent);
+-		mapent = mapent_buf;
++	if (me && me->mapent) {
++		/*
++		 * Add wildcard match for later validation checks and
++		 * negative cache lookups.
++		 */
++		if (ap->type == LKP_INDIRECT && *me->key == '*') {
++			ret = cache_update(mc, source, key, me->mapent, me->age);
++			if (!(ret & (CHE_OK | CHE_UPDATED)))
++				me = NULL;
++		}
++		if (me && (me->source == source || *me->key == '/')) {
++			strcpy(mapent_buf, me->mapent);
++			mapent = mapent_buf;
++		}
+ 	}
+ 	cache_unlock(mc);
+ 
+diff --git a/modules/lookup_yp.c b/modules/lookup_yp.c
+index 720df2e..a716e1f 100644
+--- a/modules/lookup_yp.c
++++ b/modules/lookup_yp.c
+@@ -662,7 +662,7 @@ int lookup_mount(struct autofs_point *ap, const char *name, int name_len, void *
+ 			return status;
+ 	}
+ 
+-	cache_readlock(mc);
++	cache_writelock(mc);
+ 	me = cache_lookup(mc, key);
+ 	/* Stale mapent => check for entry in alternate source or wildcard */
+ 	if (me && !me->mapent) {
+@@ -672,10 +672,21 @@ int lookup_mount(struct autofs_point *ap, const char *name, int name_len, void *
+ 		if (!me)
+ 			me = cache_lookup_distinct(mc, "*");
+ 	}
+-	if (me && me->mapent && (me->source == source || *me->key == '/')) {
+-		mapent_len = strlen(me->mapent);
+-		mapent = alloca(mapent_len + 1);
+-		strcpy(mapent, me->mapent);
++	if (me && me->mapent) {
++		/*
++		 * Add wildcard match for later validation checks and
++		 * negative cache lookups.
++		 */
++		if (ap->type == LKP_INDIRECT && *me->key == '*') {
++			ret = cache_update(mc, source, key, me->mapent, me->age);
++			if (!(ret & (CHE_OK | CHE_UPDATED)))
++				me = NULL;
++		}
++		if (me && (me->source == source || *me->key == '/')) {
++			mapent_len = strlen(me->mapent);
++			mapent = alloca(mapent_len + 1);
++			strcpy(mapent, me->mapent);
++		}
+ 	}
+ 	cache_unlock(mc);
+ 
diff --git a/autofs-5.0.7-update-kernel-include-files.patch b/autofs-5.0.7-update-kernel-include-files.patch
new file mode 100644
index 0000000..3b6bb92
--- /dev/null
+++ b/autofs-5.0.7-update-kernel-include-files.patch
@@ -0,0 +1,92 @@
+autofs-5.0.7 - update kernel include files
+
+From: Ian Kent <raven at themaw.net>
+
+Update autofs include files to include the latest changes.
+---
+ include/linux/auto_fs.h  |   33 ++++++++++-----------------------
+ include/linux/auto_fs4.h |    3 ++-
+ 2 files changed, 12 insertions(+), 24 deletions(-)
+
+diff --git a/include/linux/auto_fs.h b/include/linux/auto_fs.h
+index 91d414f..64df1a6 100644
+--- a/include/linux/auto_fs.h
++++ b/include/linux/auto_fs.h
+@@ -14,13 +14,8 @@
+ #ifndef _LINUX_AUTO_FS_H
+ #define _LINUX_AUTO_FS_H
+ 
+-#ifdef __KERNEL__
+-#include <linux/fs.h>
+-#include <linux/limits.h>
+ #include <linux/types.h>
+-#include <linux/ioctl.h>
+-#else
+-#include <asm/types.h>
++#ifndef __KERNEL__
+ #include <sys/ioctl.h>
+ #endif /* __KERNEL__ */
+ 
+@@ -32,25 +27,16 @@
+ #define AUTOFS_MIN_PROTO_VERSION	AUTOFS_PROTO_VERSION
+ 
+ /*
+- * Architectures where both 32- and 64-bit binaries can be executed
+- * on 64-bit kernels need this.  This keeps the structure format
+- * uniform, and makes sure the wait_queue_token isn't too big to be
+- * passed back down to the kernel.
+- *
+- * This assumes that on these architectures:
+- * mode     32 bit    64 bit
+- * -------------------------
+- * int      32 bit    32 bit
+- * long     32 bit    64 bit
+- *
+- * If so, 32-bit user-space code should be backwards compatible.
++ * The wait_queue_token (autofs_wqt_t) is part of a structure which is passed
++ * back to the kernel via ioctl from userspace. On architectures where 32- and
++ * 64-bit userspace binaries can be executed it's important that the size of
++ * autofs_wqt_t stays constant between 32- and 64-bit Linux kernels so that we
++ * do not break the binary ABI interface by changing the structure size.
+  */
+-
+-#if defined(__sparc__) || defined(__mips__) || defined(__x86_64__) \
+- || defined(__powerpc__) || defined(__s390__)
+-typedef unsigned int autofs_wqt_t;
+-#else
++#if defined(__ia64__) || defined(__alpha__) /* pure 64bit architectures */
+ typedef unsigned long autofs_wqt_t;
++#else
++typedef unsigned int autofs_wqt_t;
+ #endif
+ 
+ /* Packet types */
+@@ -81,6 +67,7 @@ struct autofs_packet_expire {
+ #define AUTOFS_IOC_FAIL       _IO(0x93,0x61)
+ #define AUTOFS_IOC_CATATONIC  _IO(0x93,0x62)
+ #define AUTOFS_IOC_PROTOVER   _IOR(0x93,0x63,int)
++#define AUTOFS_IOC_SETTIMEOUT32 _IOWR(0x93,0x64,compat_ulong_t)
+ #define AUTOFS_IOC_SETTIMEOUT _IOWR(0x93,0x64,unsigned long)
+ #define AUTOFS_IOC_EXPIRE     _IOR(0x93,0x65,struct autofs_packet_expire)
+ 
+diff --git a/include/linux/auto_fs4.h b/include/linux/auto_fs4.h
+index 55fa478..e02982f 100644
+--- a/include/linux/auto_fs4.h
++++ b/include/linux/auto_fs4.h
+@@ -12,6 +12,7 @@
+ #define _LINUX_AUTO_FS4_H
+ 
+ /* Include common v3 definitions */
++#include <linux/types.h>
+ #include <linux/auto_fs.h>
+ 
+ /* autofs v4 definitions */
+@@ -23,7 +24,7 @@
+ #define AUTOFS_MIN_PROTO_VERSION	3
+ #define AUTOFS_MAX_PROTO_VERSION	5
+ 
+-#define AUTOFS_PROTO_SUBVERSION		1
++#define AUTOFS_PROTO_SUBVERSION		2
+ 
+ /* Mask for expire behaviour */
+ #define AUTOFS_EXP_IMMEDIATE		1
diff --git a/autofs.spec b/autofs.spec
index 53bbf29..7d3eb8e 100644
--- a/autofs.spec
+++ b/autofs.spec
@@ -8,7 +8,7 @@
 Summary: A tool for automatically mounting and unmounting filesystems
 Name: autofs
 Version: 5.0.7
-Release: 11%{?dist}
+Release: 12%{?dist}
 Epoch: 1
 License: GPLv2+
 Group: System Environment/Daemons
@@ -43,6 +43,17 @@ Patch27: autofs-5.0.7-lib-defaults-use-WITH_LDAP-conditional-around-LDAP-types.p
 Patch28: autofs-5.0.7-make-yellow-pages-support-optional.patch
 Patch29: autofs-5.0.7-modules-replicated-use-sin6.addr-s6_addr32.patch
 Patch30: autofs-5.0.7-workaround-missing-GNU-versionsort-extension.patch
+Patch31: autofs-5.0.7-dont-fail-on-master-map-self-include.patch
+Patch32: autofs-5.0.7-fix-wildcard-multi-map-regression.patch
+Patch33: autofs-5.0.7-fix-file-descriptor-leak-when-reloading-the-daemon.patch
+Patch34: autofs-5.0.7-depricate-nosymlink-pseudo-option.patch
+Patch35: autofs-5.0.7-add-symlink-pseudo-option.patch
+Patch36: autofs-5.0.7-update-kernel-include-files.patch
+Patch37: autofs-5.0.7-fix-requires-in-spec-file.patch
+Patch38: autofs-5.0.7-fix-libtirpc-build-option.patch
+Patch39: autofs-5.0.7-fix-systemd-unidir-in-spec-file.patch
+Patch40: autofs-5.0.7-document-browse-option-in-man-page.patch
+Patch41: autofs-5.0.7-fix-automounter-support-on-parisc.patch
 Buildroot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
 %if %{with_systemd}
 BuildRequires: systemd-units
@@ -96,7 +107,7 @@ inkludera nÀtfilsystem, CD-ROM, floppydiskar, och sÄ vidare.
 %setup -q
 echo %{version}-%{release} > .version
 %if %{with_systemd}
-  %define _unitdir %{?_unitdir:/lib/systemd/system}
+  %define unitdir %{?_unitdir:/lib/systemd/system}
   %define systemd_configure_arg --with-systemd
 %endif
 %patch1 -p1
@@ -129,16 +140,27 @@ echo %{version}-%{release} > .version
 %patch28 -p1
 %patch29 -p1
 %patch30 -p1
+%patch31 -p1
+%patch32 -p1
+%patch33 -p1
+%patch34 -p1
+%patch35 -p1
+%patch36 -p1
+%patch37 -p1
+%patch38 -p1
+%patch39 -p1
+%patch40 -p1
+%patch41 -p1
 
 %build
 #CFLAGS="$RPM_OPT_FLAGS" ./configure --prefix=/usr --libdir=%{_libdir}
-%configure --disable-mount-locking --enable-ignore-busy --with-libtirpc --disable-mount-move %{?systemd_configure_arg:}
+%configure --disable-mount-locking --enable-ignore-busy --with-libtirpc %{?systemd_configure_arg:}
 make initdir=%{_initrddir} DONTSTRIP=1
 
 %install
 rm -rf $RPM_BUILD_ROOT
 %if %{with_systemd}
-install -d -m 755 $RPM_BUILD_ROOT%{_unitdir}
+install -d -m 755 $RPM_BUILD_ROOT%{unitdir}
 %else
 mkdir -p -m755 $RPM_BUILD_ROOT%{_initrddir}
 %endif
@@ -148,14 +170,18 @@ mkdir -p -m755 $RPM_BUILD_ROOT%{_mandir}/{man5,man8}
 mkdir -p -m755 $RPM_BUILD_ROOT/etc/sysconfig
 mkdir -p -m755 $RPM_BUILD_ROOT/etc/auto.master.d
 
-make install mandir=%{_mandir} initdir=%{_initrddir} systemddir=%{_unitdir} INSTALLROOT=$RPM_BUILD_ROOT
+make install mandir=%{_mandir} initdir=%{_initrddir} systemddir=%{unitdir} INSTALLROOT=$RPM_BUILD_ROOT
 echo make -C redhat
 make -C redhat
 install -m 755 -d $RPM_BUILD_ROOT/misc
 %if %{with_systemd}
-install -m 644 redhat/autofs.service $RPM_BUILD_ROOT%{_unitdir}/autofs.service
+# Configure can get this wrong when the unit files appear under /lib and /usr/lib
+find $RPM_BUILD_ROOT -type f -name autofs.service -exec rm -f {} \;
+install -m 644 redhat/autofs.service $RPM_BUILD_ROOT%{unitdir}/autofs.service
+%define init_file_name %{unitdir}/autofs.service
 %else
 install -m 755 redhat/autofs.init $RPM_BUILD_ROOT%{_initrddir}/autofs
+%define init_file_name /etc/rc.d/init.d/autofs
 %endif
 install -m 644 redhat/autofs.sysconfig $RPM_BUILD_ROOT/etc/sysconfig/autofs
 
@@ -203,11 +229,7 @@ fi
 %files
 %defattr(-,root,root,-)
 %doc CREDITS INSTALL COPY* README* patches/* samples/ldap* samples/autofs.schema
-%if %{with_systemd}
-%{_unitdir}/autofs.service
-%else
-%{_initrddir}/autofs
-%endif
+%config %{init_file_name}
 %config(noreplace,missingok) /etc/auto.master
 %config(noreplace,missingok) /etc/auto.misc
 %config(noreplace,missingok) /etc/auto.net
@@ -220,6 +242,19 @@ fi
 %dir /etc/auto.master.d
 
 %changelog
+* Tue Mar 12 2013 Ian Kent <ikent at redhat.com> - 1:5.0.7-12
+- dont fail on master map self include.
+- fix wildcard multi map regression.
+- fix file descriptor leak when reloading the daemon.
+- depricate nosymlink pseudo option.
+- add symlink pseudo option.
+- update kernel include files.
+- fix requires in spec file.
+- fix libtirpc build option.
+- fix systemd unidir in spec file.
+- document browse option in man page.
+- fix automounter support on parisc.
+
 * Wed Feb 13 2013 Fedora Release Engineering <rel-eng at lists.fedoraproject.org> - 1:5.0.7-11
 - Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild
 


More information about the scm-commits mailing list