Patchwork [meta-networking] autofs: update to current patchlevel

login
register
mail settings
Submitter Andreas Oberritter
Date March 19, 2013, 10:24 a.m.
Message ID <1363688659-2222-1-git-send-email-obi@opendreambox.org>
Download mbox | patch
Permalink /patch/46443/
State Accepted, archived
Commit 022fe03271eaaebc8ecfa01961169a4e642783ee
Headers show

Comments

Andreas Oberritter - March 19, 2013, 10:24 a.m.
* Apply all patches from ftp.kernel.org/pub/linux/daemons/autofs/v5/patches-5.0.8/

Signed-off-by: Andreas Oberritter <obi@opendreambox.org>
---
 .../autofs-5.0.7-add-symlink-pseudo-option.patch   |  217 +++++++++
 ...witch_conf-to-not-contain-automount-lines.patch |   50 +++
 ...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 +++
 ....7-dont-schedule-new-alarms-after-readmap.patch |   69 +++
 ...ent-d_type-to-filter-out-files-in-scandir.patch |   41 ++
 ...s-5.0.7-fix-automounter-support-on-parisc.patch |   24 +
 ...descriptor-leak-when-reloading-the-daemon.patch |  179 ++++++++
 ...utofs-5.0.7-fix-init-script-status-return.patch |   39 ++
 .../autofs-5.0.7-fix-libtirpc-build-option.patch   |   66 +++
 ...-fix-map-entry-duplicate-offset-detection.patch |   37 ++
 ...ofs-5.0.7-fix-nobind-man-page-description.patch |   46 ++
 .../autofs-5.0.7-fix-requires-in-spec-file.patch   |   37 ++
 .../autofs-5.0.7-fix-submount-offset-delete.patch  |   45 ++
 ...ofs-5.0.7-fix-systemd-unidir-in-spec-file.patch |   72 +++
 ....7-fix-use-get_proximity-without-libtirpc.patch |   54 +++
 ...s-5.0.7-fix-wildcard-multi-map-regression.patch |  225 ++++++++++
 ...e-WITH_LDAP-conditional-around-LDAP-types.patch |  448 +++++++++++++++++++
 ...-5.0.7-make-yellow-pages-support-optional.patch |   15 +-
 ...odules-replicated-use-sin6.addr-s6_addr32.patch |   39 ++
 .../autofs-5.0.7-update-kernel-include-files.patch |   92 ++++
 ...-protocol-ids-instead-of-protoent-structs.patch |  471 ++++++++++++++++++++
 ...karound-missing-GNU-versionsort-extension.patch |  149 +++++++
 .../recipes-daemons/autofs/autofs_5.0.7.bb         |   25 +-
 25 files changed, 2582 insertions(+), 3 deletions(-)
 create mode 100644 meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-add-symlink-pseudo-option.patch
 create mode 100644 meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-allow-nsswitch_conf-to-not-contain-automount-lines.patch
 create mode 100644 meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-depricate-nosymlink-pseudo-option.patch
 create mode 100644 meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-document-browse-option-in-man-page.patch
 create mode 100644 meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-dont-fail-on-master-map-self-include.patch
 create mode 100644 meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-dont-schedule-new-alarms-after-readmap.patch
 create mode 100644 meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-dont-use-dirent-d_type-to-filter-out-files-in-scandir.patch
 create mode 100644 meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-automounter-support-on-parisc.patch
 create mode 100644 meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-file-descriptor-leak-when-reloading-the-daemon.patch
 create mode 100644 meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-init-script-status-return.patch
 create mode 100644 meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-libtirpc-build-option.patch
 create mode 100644 meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-map-entry-duplicate-offset-detection.patch
 create mode 100644 meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-nobind-man-page-description.patch
 create mode 100644 meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-requires-in-spec-file.patch
 create mode 100644 meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-submount-offset-delete.patch
 create mode 100644 meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-systemd-unidir-in-spec-file.patch
 create mode 100644 meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-use-get_proximity-without-libtirpc.patch
 create mode 100644 meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-wildcard-multi-map-regression.patch
 create mode 100644 meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-lib-defaults-use-WITH_LDAP-conditional-around-LDAP-types.patch
 create mode 100644 meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-modules-replicated-use-sin6.addr-s6_addr32.patch
 create mode 100644 meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-update-kernel-include-files.patch
 create mode 100644 meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-use-numeric-protocol-ids-instead-of-protoent-structs.patch
 create mode 100644 meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-workaround-missing-GNU-versionsort-extension.patch
Joe MacDonald - March 19, 2013, 12:49 p.m.
[[oe] [meta-networking][PATCH] autofs: update to current patchlevel] On 13.03.19 (Tue 11:24) Andreas Oberritter wrote:

> * Apply all patches from ftp.kernel.org/pub/linux/daemons/autofs/v5/patches-5.0.8/
> 
> Signed-off-by: Andreas Oberritter <obi@opendreambox.org>
> ---
>  .../autofs-5.0.7-add-symlink-pseudo-option.patch   |  217 +++++++++
>  ...witch_conf-to-not-contain-automount-lines.patch |   50 +++
>  ...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 +++
>  ....7-dont-schedule-new-alarms-after-readmap.patch |   69 +++
>  ...ent-d_type-to-filter-out-files-in-scandir.patch |   41 ++
>  ...s-5.0.7-fix-automounter-support-on-parisc.patch |   24 +
>  ...descriptor-leak-when-reloading-the-daemon.patch |  179 ++++++++
>  ...utofs-5.0.7-fix-init-script-status-return.patch |   39 ++
>  .../autofs-5.0.7-fix-libtirpc-build-option.patch   |   66 +++
>  ...-fix-map-entry-duplicate-offset-detection.patch |   37 ++
>  ...ofs-5.0.7-fix-nobind-man-page-description.patch |   46 ++
>  .../autofs-5.0.7-fix-requires-in-spec-file.patch   |   37 ++
>  .../autofs-5.0.7-fix-submount-offset-delete.patch  |   45 ++
>  ...ofs-5.0.7-fix-systemd-unidir-in-spec-file.patch |   72 +++
>  ....7-fix-use-get_proximity-without-libtirpc.patch |   54 +++
>  ...s-5.0.7-fix-wildcard-multi-map-regression.patch |  225 ++++++++++
>  ...e-WITH_LDAP-conditional-around-LDAP-types.patch |  448 +++++++++++++++++++
>  ...-5.0.7-make-yellow-pages-support-optional.patch |   15 +-
>  ...odules-replicated-use-sin6.addr-s6_addr32.patch |   39 ++
>  .../autofs-5.0.7-update-kernel-include-files.patch |   92 ++++
>  ...-protocol-ids-instead-of-protoent-structs.patch |  471 ++++++++++++++++++++
>  ...karound-missing-GNU-versionsort-extension.patch |  149 +++++++
>  .../recipes-daemons/autofs/autofs_5.0.7.bb         |   25 +-
>  25 files changed, 2582 insertions(+), 3 deletions(-)

I had started to ask why we wouldn't just update to 5.0.8 directly
instead of patching our way there.  Then I thought I'd look myself and
now I know.  :-)

This is just a simple (and wholesale) integration of the patches already
upstream?  That seems reasonable to me.

-J.

>  create mode 100644 meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-add-symlink-pseudo-option.patch
>  create mode 100644 meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-allow-nsswitch_conf-to-not-contain-automount-lines.patch
>  create mode 100644 meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-depricate-nosymlink-pseudo-option.patch
>  create mode 100644 meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-document-browse-option-in-man-page.patch
>  create mode 100644 meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-dont-fail-on-master-map-self-include.patch
>  create mode 100644 meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-dont-schedule-new-alarms-after-readmap.patch
>  create mode 100644 meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-dont-use-dirent-d_type-to-filter-out-files-in-scandir.patch
>  create mode 100644 meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-automounter-support-on-parisc.patch
>  create mode 100644 meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-file-descriptor-leak-when-reloading-the-daemon.patch
>  create mode 100644 meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-init-script-status-return.patch
>  create mode 100644 meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-libtirpc-build-option.patch
>  create mode 100644 meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-map-entry-duplicate-offset-detection.patch
>  create mode 100644 meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-nobind-man-page-description.patch
>  create mode 100644 meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-requires-in-spec-file.patch
>  create mode 100644 meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-submount-offset-delete.patch
>  create mode 100644 meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-systemd-unidir-in-spec-file.patch
>  create mode 100644 meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-use-get_proximity-without-libtirpc.patch
>  create mode 100644 meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-wildcard-multi-map-regression.patch
>  create mode 100644 meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-lib-defaults-use-WITH_LDAP-conditional-around-LDAP-types.patch
>  create mode 100644 meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-modules-replicated-use-sin6.addr-s6_addr32.patch
>  create mode 100644 meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-update-kernel-include-files.patch
>  create mode 100644 meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-use-numeric-protocol-ids-instead-of-protoent-structs.patch
>  create mode 100644 meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-workaround-missing-GNU-versionsort-extension.patch
> 
> diff --git a/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-add-symlink-pseudo-option.patch b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-add-symlink-pseudo-option.patch
> new file mode 100644
> index 0000000..b0440f4
> --- /dev/null
> +++ b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/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@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/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-allow-nsswitch_conf-to-not-contain-automount-lines.patch b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-allow-nsswitch_conf-to-not-contain-automount-lines.patch
> new file mode 100644
> index 0000000..c342d10
> --- /dev/null
> +++ b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-allow-nsswitch_conf-to-not-contain-automount-lines.patch
> @@ -0,0 +1,50 @@
> +autofs-5.0.7 - Allow nsswitch.conf to not contain "automount:" lines
> +
> +From: Michael Tokarev <mjt@tls.msk.ru>
> +
> +Current code does not allow a case when nsswitch.conf
> +does not mention automount map at all, like all new
> +installations.  It logs a rather unpleasant error
> +message instead:
> +
> + syntax error in nsswitch config near [ syntax error ]
> +
> +this patch has a minimal fix, to allo "file" to be empty.
> +
> +Whole parser in C is about 25 lines of code, the "grammar"
> +is trivial, and it is better to ditch all this yacc/lex
> +stuff, but that will be much more intrusive change.
> +
> +Signed-off-by: Michael Tokarev <mjt@tls.msk.ru>
> +Cc: 682266@bugs.debian.org
> +---
> +
> + CHANGELOG       |    1 +
> + lib/nss_parse.y |    1 +
> + 2 files changed, 2 insertions(+), 0 deletions(-)
> +
> +
> +diff --git a/CHANGELOG b/CHANGELOG
> +index bd0dd82..16ac2a0 100644
> +--- a/CHANGELOG
> ++++ b/CHANGELOG
> +@@ -16,6 +16,7 @@
> + - increase file map read buffer size.
> + - handle new location of systemd.
> + - fix map entry duplicate offset detection.
> ++- Allow nsswitch.conf to not contain "automount:" lines.
> + 
> + 25/07/2012 autofs-5.0.7
> + =======================
> +diff --git a/lib/nss_parse.y b/lib/nss_parse.y
> +index a39fda4..055e9d7 100644
> +--- a/lib/nss_parse.y
> ++++ b/lib/nss_parse.y
> +@@ -72,6 +72,7 @@ file: {
> + 		nss_debug = YYDEBUG;
> + #endif
> + 	} sources NL
> ++	| /* empty */
> + 	;
> + 
> + sources: nss_source
> diff --git a/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-depricate-nosymlink-pseudo-option.patch b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-depricate-nosymlink-pseudo-option.patch
> new file mode 100644
> index 0000000..c784de7
> --- /dev/null
> +++ b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/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@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/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-document-browse-option-in-man-page.patch b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-document-browse-option-in-man-page.patch
> new file mode 100644
> index 0000000..4641342
> --- /dev/null
> +++ b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/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@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/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-dont-fail-on-master-map-self-include.patch b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-dont-fail-on-master-map-self-include.patch
> new file mode 100644
> index 0000000..afb908b
> --- /dev/null
> +++ b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/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@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/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-dont-schedule-new-alarms-after-readmap.patch b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-dont-schedule-new-alarms-after-readmap.patch
> new file mode 100644
> index 0000000..6444687
> --- /dev/null
> +++ b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-dont-schedule-new-alarms-after-readmap.patch
> @@ -0,0 +1,69 @@
> +autofs-5.0.7 - don't schedule new alarms after readmap
> +
> +From: Leonardo Chiquitto <leonardo.lists@gmail.com>
> +
> +Currently, a new alarm is scheduled every time the daemon receives
> +a SIGHUP (map re-read) or SIGUSR1 (forced expiration). Besides that,
> +map re-reads started on demand when a map is found to be outdated
> +also generate a new alarm.
> +
> +Once added, these alarms are never deleted and hence increase the
> +number of times the daemon wakes up to run the expiration procedure.
> +After a couple of months, in setups with many mount points, it's
> +normal to see automount waking up every second to handle the
> +expiration timer.
> +
> +This patch removes the alarm scheduling from the readmap cleanup
> +routine and makes sure the alarm is re-added after the expiration
> +process only when it was not triggered by SIGUSR1.
> +
> +I couldn't think of any use case to justify keeping these alarms:
> +it's critical to have the alarm ticking every timeout/4 seconds,
> +but more than one periodic alarm running doesn't seem to make
> +sense.
> +---
> +
> + CHANGELOG      |    1 +
> + daemon/state.c |    6 +-----
> + 2 files changed, 2 insertions(+), 5 deletions(-)
> +
> +
> +diff --git a/CHANGELOG b/CHANGELOG
> +index c9be73e..4cf5621 100644
> +--- a/CHANGELOG
> ++++ b/CHANGELOG
> +@@ -22,6 +22,7 @@
> + - fix init script status return.
> + - fix use get_proximity() without libtirpc.
> + - don't use dirent d_type to filter out files in scandir()
> ++- don't schedule new alarms after readmap.
> + 
> + 25/07/2012 autofs-5.0.7
> + =======================
> +diff --git a/daemon/state.c b/daemon/state.c
> +index b451c56..6e23022 100644
> +--- a/daemon/state.c
> ++++ b/daemon/state.c
> +@@ -144,7 +144,7 @@ void expire_cleanup(void *arg)
> + 					ap->submount = 2;
> + 			}
> + 
> +-			if (!ap->submount)
> ++			if (ap->state == ST_EXPIRE && !ap->submount)
> + 				alarm_add(ap, ap->exp_runfreq);
> + 
> + 			/* FALLTHROUGH */
> +@@ -330,13 +330,9 @@ static void do_readmap_cleanup(void *arg)
> + 	ap = ra->ap;
> + 
> + 	st_mutex_lock();
> +-
> + 	ap->readmap_thread = 0;
> + 	st_set_done(ap);
> +-	if (!ap->submount)
> +-		alarm_add(ap, ap->exp_runfreq);
> + 	st_ready(ap);
> +-
> + 	st_mutex_unlock();
> + 
> + 	free(ra);
> diff --git a/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-dont-use-dirent-d_type-to-filter-out-files-in-scandir.patch b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-dont-use-dirent-d_type-to-filter-out-files-in-scandir.patch
> new file mode 100644
> index 0000000..9c9d99b
> --- /dev/null
> +++ b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-dont-use-dirent-d_type-to-filter-out-files-in-scandir.patch
> @@ -0,0 +1,41 @@
> +autofs-5.0.7 - don't use dirent d_type to filter out files in scandir()
> +
> +From: Leonardo Chiquitto <leonardo.lists@gmail.com>
> +
> +The "d_type" field of a dirent structure is not filled in by all
> +file systems (XFS being one example), so we can't rely on it to
> +check file types.
> +---
> +
> + CHANGELOG            |    1 +
> + modules/lookup_dir.c |    4 ----
> + 2 files changed, 1 insertions(+), 4 deletions(-)
> +
> +
> +diff --git a/CHANGELOG b/CHANGELOG
> +index 460bd27..c9be73e 100644
> +--- a/CHANGELOG
> ++++ b/CHANGELOG
> +@@ -21,6 +21,7 @@
> + - fix submount offset delete.
> + - fix init script status return.
> + - fix use get_proximity() without libtirpc.
> ++- don't use dirent d_type to filter out files in scandir()
> + 
> + 25/07/2012 autofs-5.0.7
> + =======================
> +diff --git a/modules/lookup_dir.c b/modules/lookup_dir.c
> +index 658cc29..33901c0 100644
> +--- a/modules/lookup_dir.c
> ++++ b/modules/lookup_dir.c
> +@@ -103,10 +103,6 @@ static int acceptable_dirent_p(const struct dirent *e)
> + {
> +   size_t namesz;
> + 
> +-
> +-  if (!(e->d_type == DT_REG || e->d_type == DT_LNK))
> +-	  return 0;
> +-
> +   namesz = strlen(e->d_name);
> +   if (!namesz)
> + 	  return 0;
> diff --git a/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-automounter-support-on-parisc.patch b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-automounter-support-on-parisc.patch
> new file mode 100644
> index 0000000..e00fdc1
> --- /dev/null
> +++ b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/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@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@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/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-file-descriptor-leak-when-reloading-the-daemon.patch b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-file-descriptor-leak-when-reloading-the-daemon.patch
> new file mode 100644
> index 0000000..8ce6c0f
> --- /dev/null
> +++ b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/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@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/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-init-script-status-return.patch b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-init-script-status-return.patch
> new file mode 100644
> index 0000000..a08d62f
> --- /dev/null
> +++ b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-init-script-status-return.patch
> @@ -0,0 +1,39 @@
> +autofs-5.0.7 - fix init script status return
> +
> +From: Ian Kent <ikent@redhat.com>
> +
> +The patch that added the piddir to configure to fix incorrect init
> +script status() function returns failed to actually return the value
> +to the user.
> +---
> +
> + CHANGELOG             |    1 +
> + redhat/autofs.init.in |    2 +-
> + 2 files changed, 2 insertions(+), 1 deletions(-)
> +
> +
> +diff --git a/CHANGELOG b/CHANGELOG
> +index 76c1f73..5bcb1af 100644
> +--- a/CHANGELOG
> ++++ b/CHANGELOG
> +@@ -19,6 +19,7 @@
> + - Allow nsswitch.conf to not contain "automount:" lines.
> + - fix nobind man page description.
> + - fix submount offset delete.
> ++- fix init script status return.
> + 
> + 25/07/2012 autofs-5.0.7
> + =======================
> +diff --git a/redhat/autofs.init.in b/redhat/autofs.init.in
> +index fe18b3e..9d008ff 100644
> +--- a/redhat/autofs.init.in
> ++++ b/redhat/autofs.init.in
> +@@ -172,7 +172,7 @@ RETVAL=0
> + case "$1" in
> + 	status)
> + 		status -p @@autofspiddir@@/autofs.pid -l autofs $prog
> +-		exit 0;
> ++		exit $?;
> + 		;;
> + 	usage)
> + 		usage_message
> diff --git a/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-libtirpc-build-option.patch b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-libtirpc-build-option.patch
> new file mode 100644
> index 0000000..8ad2afa
> --- /dev/null
> +++ b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/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@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/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-map-entry-duplicate-offset-detection.patch b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-map-entry-duplicate-offset-detection.patch
> new file mode 100644
> index 0000000..126d9a2
> --- /dev/null
> +++ b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-map-entry-duplicate-offset-detection.patch
> @@ -0,0 +1,37 @@
> +autofs-5.0.7 - fix map entry duplicate offset detection
> +
> +From: Ian Kent <raven@themaw.net>
> +
> +Recent changes broke the detection of duplicate offsets in map entries.
> +---
> +
> + CHANGELOG   |    1 +
> + lib/cache.c |    2 +-
> + 2 files changed, 2 insertions(+), 1 deletions(-)
> +
> +
> +diff --git a/CHANGELOG b/CHANGELOG
> +index 8f6bb3a..bd0dd82 100644
> +--- a/CHANGELOG
> ++++ b/CHANGELOG
> +@@ -15,6 +15,7 @@
> + - fix recursive mount deadlock.
> + - increase file map read buffer size.
> + - handle new location of systemd.
> ++- fix map entry duplicate offset detection.
> + 
> + 25/07/2012 autofs-5.0.7
> + =======================
> +diff --git a/lib/cache.c b/lib/cache.c
> +index 9179ad5..1e05a99 100644
> +--- a/lib/cache.c
> ++++ b/lib/cache.c
> +@@ -659,7 +659,7 @@ int cache_update_offset(struct mapent_cache *mc, const char *mkey, const char *k
> + 
> + 	me = cache_lookup_distinct(mc, key);
> + 	if (me && me->age == age) {
> +-		if (me->multi != owner)
> ++		if (me->multi == owner)
> + 			return CHE_DUPLICATE;
> + 	}
> + 
> diff --git a/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-nobind-man-page-description.patch b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-nobind-man-page-description.patch
> new file mode 100644
> index 0000000..41328a0
> --- /dev/null
> +++ b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-nobind-man-page-description.patch
> @@ -0,0 +1,46 @@
> +autofs-5.0.7 - fix nobind man page description
> +
> +From: Ian Kent <raven@themaw.net>
> +
> +Update auto.master(5) to better describe the behavior of the "nobind"
> +option when used with direct mounts maps.
> +---
> +
> + CHANGELOG            |    1 +
> + man/auto.master.5.in |   10 +++++++---
> + 2 files changed, 8 insertions(+), 3 deletions(-)
> +
> +
> +diff --git a/CHANGELOG b/CHANGELOG
> +index 16ac2a0..7eb7235 100644
> +--- a/CHANGELOG
> ++++ b/CHANGELOG
> +@@ -17,6 +17,7 @@
> + - handle new location of systemd.
> + - fix map entry duplicate offset detection.
> + - Allow nsswitch.conf to not contain "automount:" lines.
> ++- fix nobind man page description.
> + 
> + 25/07/2012 autofs-5.0.7
> + =======================
> +diff --git a/man/auto.master.5.in b/man/auto.master.5.in
> +index 21d7544..8007542 100644
> +--- a/man/auto.master.5.in
> ++++ b/man/auto.master.5.in
> +@@ -151,9 +151,13 @@ can't be mounted.
> + 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
> + map entry (so it effects all the map entries) or with individual map
> +-entries to prevent bind mounting of local NFS filesystems. Bind mounting
> +-of NFS file systems can also be prevented for specific map entrys by
> +-adding the "port=" mount option to the entries.
> ++entries to prevent bind mounting of local NFS filesystems. For direct
> ++mount maps the option is only effective if specified on the first direct
> ++map entry and is applied to all direct mount maps in the master map. It
> ++is ignored if given on subsequent direct map entries. It may be used
> ++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 "\-r, \-\-random-multimount-selection"
> + Enables the use of ramdom selection when choosing a host from a
> diff --git a/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-requires-in-spec-file.patch b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-requires-in-spec-file.patch
> new file mode 100644
> index 0000000..404c848
> --- /dev/null
> +++ b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/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@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/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-submount-offset-delete.patch b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-submount-offset-delete.patch
> new file mode 100644
> index 0000000..b38e214
> --- /dev/null
> +++ b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-submount-offset-delete.patch
> @@ -0,0 +1,45 @@
> +autofs-5.0.7 - fix submount offset delete
> +
> +From: Ian Kent <ikent@redhat.com>
> +
> +As part of the implementation to allow for limited update of
> +the internal hosts map by using a HUP signal some code that
> +deleted any offset entries from the cache on lookup was removed
> +as it appeared to not be needed.
> +
> +There is however a case where it is needed to avoid a duplicate
> +cache entry failure on lookup.
> +---
> +
> + CHANGELOG          |    1 +
> + daemon/automount.c |    4 ++--
> + 2 files changed, 3 insertions(+), 2 deletions(-)
> +
> +
> +diff --git a/CHANGELOG b/CHANGELOG
> +index 7eb7235..76c1f73 100644
> +--- a/CHANGELOG
> ++++ b/CHANGELOG
> +@@ -18,6 +18,7 @@
> + - fix map entry duplicate offset detection.
> + - Allow nsswitch.conf to not contain "automount:" lines.
> + - fix nobind man page description.
> ++- fix submount offset delete.
> + 
> + 25/07/2012 autofs-5.0.7
> + =======================
> +diff --git a/daemon/automount.c b/daemon/automount.c
> +index e56f9e1..4a3eb3d 100644
> +--- a/daemon/automount.c
> ++++ b/daemon/automount.c
> +@@ -544,8 +544,8 @@ int umount_multi(struct autofs_point *ap, const char *path, int incl)
> + 	 * If we are a submount we need to umount any offsets our
> + 	 * parent may have mounted over top of us.
> + 	 */
> +-	/*if (ap->submount)
> +-		left += umount_subtree_mounts(ap->parent, path, is_autofs_fs);*/
> ++	if (ap->submount)
> ++		left += umount_subtree_mounts(ap->parent, path, is_autofs_fs);
> + 
> + 	left += umount_subtree_mounts(ap, path, is_autofs_fs);
> + 
> diff --git a/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-systemd-unidir-in-spec-file.patch b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-systemd-unidir-in-spec-file.patch
> new file mode 100644
> index 0000000..d856faf
> --- /dev/null
> +++ b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/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@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/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-use-get_proximity-without-libtirpc.patch b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-use-get_proximity-without-libtirpc.patch
> new file mode 100644
> index 0000000..74ed8fa
> --- /dev/null
> +++ b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-use-get_proximity-without-libtirpc.patch
> @@ -0,0 +1,54 @@
> +autofs-5.0.7 - fix use get_proximity() without libtirpc
> +
> +From: Ian Kent <raven@themaw.net>
> +
> +If autofs is not using libtirpc and there are any configured IPv6
> +interfaces then get_proximity() will fail with PROXIMITY_UNSUPPORTED.
> +
> +In this case when checking interfaces the IPv6 interfaces need to be
> +ignored.
> +---
> +
> + CHANGELOG            |    1 +
> + modules/replicated.c |    8 ++------
> + 2 files changed, 3 insertions(+), 6 deletions(-)
> +
> +
> +diff --git a/CHANGELOG b/CHANGELOG
> +index 5bcb1af..460bd27 100644
> +--- a/CHANGELOG
> ++++ b/CHANGELOG
> +@@ -20,6 +20,7 @@
> + - fix nobind man page description.
> + - fix submount offset delete.
> + - fix init script status return.
> ++- fix use get_proximity() without libtirpc.
> + 
> + 25/07/2012 autofs-5.0.7
> + =======================
> +diff --git a/modules/replicated.c b/modules/replicated.c
> +index bd6003b..6b96320 100644
> +--- a/modules/replicated.c
> ++++ b/modules/replicated.c
> +@@ -184,9 +184,7 @@ static unsigned int get_proximity(struct sockaddr *host_addr)
> + 			break;
> + 
> + 		case AF_INET6:
> +-#ifndef WITH_LIBTIRPC
> +-			return PROXIMITY_UNSUPPORTED;
> +-#else
> ++#ifdef WITH_LIBTIRPC
> + 			if (host_addr->sa_family == AF_INET)
> + 				break;
> + 			if6_addr = (struct sockaddr_in6 *) this->ifa_addr;
> +@@ -251,9 +249,7 @@ static unsigned int get_proximity(struct sockaddr *host_addr)
> + 			break;
> + 
> + 		case AF_INET6:
> +-#ifndef WITH_LIBTIRPC
> +-			return PROXIMITY_UNSUPPORTED;
> +-#else
> ++#ifdef WITH_LIBTIRPC
> + 			if (host_addr->sa_family == AF_INET)
> + 				break;
> + 			if6_addr = (struct sockaddr_in6 *) this->ifa_addr;
> diff --git a/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-wildcard-multi-map-regression.patch b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-wildcard-multi-map-regression.patch
> new file mode 100644
> index 0000000..44e4a18
> --- /dev/null
> +++ b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/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@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/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-lib-defaults-use-WITH_LDAP-conditional-around-LDAP-types.patch b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-lib-defaults-use-WITH_LDAP-conditional-around-LDAP-types.patch
> new file mode 100644
> index 0000000..22e0418
> --- /dev/null
> +++ b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-lib-defaults-use-WITH_LDAP-conditional-around-LDAP-types.patch
> @@ -0,0 +1,448 @@
> +autofs-5.0.7 - lib/defaults.c: use WITH_LDAP conditional around LDAP types
> +
> +From: Chris Packham <chris.packham@alliedtelesis.co.nz>
> +
> +Wrap the inclusion of lookup_ldap.h and functions that use ldap_uri or
> +ldap_schema with the WITH_LDAP conditional. WITH_LDAP is set by the
> +configure step when LDAP support is not desired. This also allows
> +compilation on a system that doesn't have any LDAP libraries.
> +---
> +
> + CHANGELOG             |    1 
> + include/defaults.h    |   14 +-
> + include/lookup_ldap.h |    1 
> + lib/defaults.c        |  325 +++++++++++++++++++++++++------------------------
> + modules/lookup_ldap.c |    1 
> + 5 files changed, 175 insertions(+), 167 deletions(-)
> +
> +
> +diff --git a/CHANGELOG b/CHANGELOG
> +index ba1d65b..1130db6 100644
> +--- a/CHANGELOG
> ++++ b/CHANGELOG
> +@@ -24,6 +24,7 @@
> + - don't use dirent d_type to filter out files in scandir()
> + - don't schedule new alarms after readmap.
> + - use numeric protocol ids instead of protoent structs.
> ++- lib/defaults.c: use WITH_LDAP conditional around LDAP types.
> + 
> + 25/07/2012 autofs-5.0.7
> + =======================
> +diff --git a/include/defaults.h b/include/defaults.h
> +index cda2174..871e14b 100644
> +--- a/include/defaults.h
> ++++ b/include/defaults.h
> +@@ -44,8 +44,16 @@
> + 
> + #define DEFAULT_MAP_HASH_TABLE_SIZE	1024
> + 
> ++#ifdef WITH_LDAP
> + struct ldap_schema;
> + struct ldap_searchdn;
> ++void defaults_free_uris(struct list_head *);
> ++struct list_head *defaults_get_uris(void);
> ++struct ldap_schema *defaults_get_default_schema(void);
> ++void defaults_free_searchdns(struct ldap_searchdn *);
> ++struct ldap_searchdn *defaults_get_searchdns(void);
> ++struct ldap_schema *defaults_get_schema(void);
> ++#endif
> + 
> + unsigned int defaults_read_config(unsigned int);
> + const char *defaults_get_master_map(void);
> +@@ -57,12 +65,6 @@ unsigned int defaults_get_logging(void);
> + const char *defaults_get_ldap_server(void);
> + unsigned int defaults_get_ldap_timeout(void);
> + unsigned int defaults_get_ldap_network_timeout(void);
> +-struct list_head *defaults_get_uris(void);
> +-void defaults_free_uris(struct list_head *);
> +-struct ldap_schema *defaults_get_default_schema(void);
> +-struct ldap_schema *defaults_get_schema(void);
> +-struct ldap_searchdn *defaults_get_searchdns(void);
> +-void defaults_free_searchdns(struct ldap_searchdn *);
> + unsigned int defaults_get_mount_nfs_default_proto(void);
> + unsigned int defaults_get_append_options(void);
> + unsigned int defaults_get_mount_wait(void);
> +diff --git a/include/lookup_ldap.h b/include/lookup_ldap.h
> +index e441a61..9a4ce73 100644
> +--- a/include/lookup_ldap.h
> ++++ b/include/lookup_ldap.h
> +@@ -8,7 +8,6 @@
> + #include <openssl/evp.h>
> + #include <openssl/err.h>
> + #include <sasl/sasl.h>
> +-#include <libxml/tree.h>
> + #include <krb5.h>
> + #endif
> + 
> +diff --git a/lib/defaults.c b/lib/defaults.c
> +index 5ce71b7..ae1162f 100644
> +--- a/lib/defaults.c
> ++++ b/lib/defaults.c
> +@@ -17,9 +17,12 @@
> + #include <ctype.h>
> + #include <string.h>
> + 
> ++#include "config.h"
> + #include "list.h"
> + #include "defaults.h"
> ++#ifdef WITH_LDAP
> + #include "lookup_ldap.h"
> ++#endif
> + #include "log.h"
> + #include "automount.h"
> + 
> +@@ -197,6 +200,7 @@ static int parse_line(char *line, char **res, char **value)
> + 	return 1;
> + }
> + 
> ++#ifdef WITH_LDAP
> + void defaults_free_uris(struct list_head *list)
> + {
> + 	struct list_head *next;
> +@@ -290,166 +294,6 @@ struct list_head *defaults_get_uris(void)
> + 	return list;
> + }
> + 
> +-/*
> +- * Read config env variables and check they have been set.
> +- *
> +- * This simple minded routine assumes the config file
> +- * is valid bourne shell script without spaces around "="
> +- * and that it has valid values.
> +- */
> +-unsigned int defaults_read_config(unsigned int to_syslog)
> +-{
> +-	FILE *f;
> +-	char buf[MAX_LINE_LEN];
> +-	char *res;
> +-
> +-	f = open_fopen_r(DEFAULTS_CONFIG_FILE);
> +-	if (!f)
> +-		return 0;
> +-
> +-	while ((res = fgets(buf, MAX_LINE_LEN, f))) {
> +-		char *key, *value;
> +-
> +-		if (!parse_line(res, &key, &value))
> +-			continue;
> +-
> +-		if (check_set_config_value(key, ENV_NAME_MASTER_MAP, value, to_syslog) ||
> +-		    check_set_config_value(key, ENV_NAME_TIMEOUT, value, to_syslog) ||
> +-		    check_set_config_value(key, ENV_NAME_NEGATIVE_TIMEOUT, value, to_syslog) ||
> +-		    check_set_config_value(key, ENV_NAME_BROWSE_MODE, value, to_syslog) ||
> +-		    check_set_config_value(key, ENV_NAME_LOGGING, value, to_syslog) ||
> +-		    check_set_config_value(key, ENV_LDAP_TIMEOUT, value, to_syslog) ||
> +-		    check_set_config_value(key, ENV_LDAP_NETWORK_TIMEOUT, value, to_syslog) ||
> +-		    check_set_config_value(key, ENV_NAME_MAP_OBJ_CLASS, value, to_syslog) ||
> +-		    check_set_config_value(key, ENV_NAME_ENTRY_OBJ_CLASS, value, to_syslog) ||
> +-		    check_set_config_value(key, ENV_NAME_MAP_ATTR, value, to_syslog) ||
> +-		    check_set_config_value(key, ENV_NAME_ENTRY_ATTR, value, to_syslog) ||
> +-		    check_set_config_value(key, ENV_NAME_VALUE_ATTR, value, to_syslog) ||
> +-		    check_set_config_value(key, ENV_APPEND_OPTIONS, value, to_syslog) ||
> +-		    check_set_config_value(key, ENV_MOUNT_WAIT, value, to_syslog) ||
> +-		    check_set_config_value(key, ENV_UMOUNT_WAIT, value, to_syslog) ||
> +-		    check_set_config_value(key, ENV_AUTH_CONF_FILE, value, to_syslog) ||
> +-		    check_set_config_value(key, ENV_MAP_HASH_TABLE_SIZE, value, to_syslog) ||
> +-		    check_set_config_value(key, ENV_MOUNT_NFS_DEFAULT_PROTOCOL, value, to_syslog))
> +-			;
> +-	}
> +-
> +-	if (!feof(f) || ferror(f)) {
> +-		if (!to_syslog) {
> +-			fprintf(stderr,
> +-				"fgets returned error %d while reading %s\n",
> +-				ferror(f), DEFAULTS_CONFIG_FILE);
> +-		} else {
> +-			logmsg("fgets returned error %d while reading %s",
> +-			      ferror(f), DEFAULTS_CONFIG_FILE);
> +-		}
> +-		fclose(f);
> +-		return 0;
> +-	}
> +-
> +-	fclose(f);
> +-	return 1;
> +-}
> +-
> +-const char *defaults_get_master_map(void)
> +-{
> +-	char *master;
> +-
> +-	master = get_env_string(ENV_NAME_MASTER_MAP);
> +-	if (!master)
> +-		return strdup(default_master_map_name);
> +-
> +-	return (const char *) master;
> +-}
> +-
> +-int defaults_master_set(void)
> +-{
> +-	char *val = getenv(ENV_NAME_MASTER_MAP);
> +-	if (!val)
> +-		return 0;
> +-
> +-	return 1;
> +-}
> +-
> +-unsigned int defaults_get_timeout(void)
> +-{
> +-	long timeout;
> +-
> +-	timeout = get_env_number(ENV_NAME_TIMEOUT);
> +-	if (timeout < 0)
> +-		timeout = DEFAULT_TIMEOUT;
> +-
> +-	return (unsigned int) timeout;
> +-}
> +-
> +-unsigned int defaults_get_negative_timeout(void)
> +-{
> +-	long n_timeout;
> +-
> +-	n_timeout = get_env_number(ENV_NAME_NEGATIVE_TIMEOUT);
> +-	if (n_timeout <= 0)
> +-		n_timeout = DEFAULT_NEGATIVE_TIMEOUT;
> +-
> +-	return (unsigned int) n_timeout;
> +-}
> +-
> +-unsigned int defaults_get_browse_mode(void)
> +-{
> +-	int res;
> +-
> +-	res = get_env_yesno(ENV_NAME_BROWSE_MODE);
> +-	if (res < 0)
> +-		res = DEFAULT_BROWSE_MODE;
> +-
> +-	return res;
> +-}
> +-
> +-unsigned int defaults_get_logging(void)
> +-{
> +-	char *res;
> +-	unsigned int logging = DEFAULT_LOGGING;
> +-
> +-	res = get_env_string(ENV_NAME_LOGGING);
> +-	if (!res)
> +-		return logging;
> +-
> +-	if (!strcasecmp(res, "none"))
> +-		logging = DEFAULT_LOGGING;
> +-	else {
> +-		if (!strcasecmp(res, "verbose"))
> +-			logging |= LOGOPT_VERBOSE;
> +-
> +-		if (!strcasecmp(res, "debug"))
> +-			logging |= LOGOPT_DEBUG;
> +-	}
> +-
> +-	free(res);
> +-
> +-	return logging;
> +-}
> +-
> +-unsigned int defaults_get_ldap_timeout(void)
> +-{
> +-	int res;
> +-
> +-	res = get_env_number(ENV_LDAP_TIMEOUT);
> +-	if (res < 0)
> +-		res = DEFAULT_LDAP_TIMEOUT;
> +-
> +-	return res;
> +-}
> +-
> +-unsigned int defaults_get_ldap_network_timeout(void)
> +-{
> +-	int res;
> +-
> +-	res = get_env_number(ENV_LDAP_NETWORK_TIMEOUT);
> +-	if (res < 0)
> +-		res = DEFAULT_LDAP_NETWORK_TIMEOUT;
> +-
> +-	return res;
> +-}
> +-
> + struct ldap_schema *defaults_get_default_schema(void)
> + {
> + 	struct ldap_schema *schema;
> +@@ -645,6 +489,167 @@ struct ldap_schema *defaults_get_schema(void)
> + 
> + 	return schema;
> + }
> ++#endif
> ++
> ++/*
> ++ * Read config env variables and check they have been set.
> ++ *
> ++ * This simple minded routine assumes the config file
> ++ * is valid bourne shell script without spaces around "="
> ++ * and that it has valid values.
> ++ */
> ++unsigned int defaults_read_config(unsigned int to_syslog)
> ++{
> ++	FILE *f;
> ++	char buf[MAX_LINE_LEN];
> ++	char *res;
> ++
> ++	f = open_fopen_r(DEFAULTS_CONFIG_FILE);
> ++	if (!f)
> ++		return 0;
> ++
> ++	while ((res = fgets(buf, MAX_LINE_LEN, f))) {
> ++		char *key, *value;
> ++
> ++		if (!parse_line(res, &key, &value))
> ++			continue;
> ++
> ++		if (check_set_config_value(key, ENV_NAME_MASTER_MAP, value, to_syslog) ||
> ++		    check_set_config_value(key, ENV_NAME_TIMEOUT, value, to_syslog) ||
> ++		    check_set_config_value(key, ENV_NAME_NEGATIVE_TIMEOUT, value, to_syslog) ||
> ++		    check_set_config_value(key, ENV_NAME_BROWSE_MODE, value, to_syslog) ||
> ++		    check_set_config_value(key, ENV_NAME_LOGGING, value, to_syslog) ||
> ++		    check_set_config_value(key, ENV_LDAP_TIMEOUT, value, to_syslog) ||
> ++		    check_set_config_value(key, ENV_LDAP_NETWORK_TIMEOUT, value, to_syslog) ||
> ++		    check_set_config_value(key, ENV_NAME_MAP_OBJ_CLASS, value, to_syslog) ||
> ++		    check_set_config_value(key, ENV_NAME_ENTRY_OBJ_CLASS, value, to_syslog) ||
> ++		    check_set_config_value(key, ENV_NAME_MAP_ATTR, value, to_syslog) ||
> ++		    check_set_config_value(key, ENV_NAME_ENTRY_ATTR, value, to_syslog) ||
> ++		    check_set_config_value(key, ENV_NAME_VALUE_ATTR, value, to_syslog) ||
> ++		    check_set_config_value(key, ENV_APPEND_OPTIONS, value, to_syslog) ||
> ++		    check_set_config_value(key, ENV_MOUNT_WAIT, value, to_syslog) ||
> ++		    check_set_config_value(key, ENV_UMOUNT_WAIT, value, to_syslog) ||
> ++		    check_set_config_value(key, ENV_AUTH_CONF_FILE, value, to_syslog) ||
> ++		    check_set_config_value(key, ENV_MAP_HASH_TABLE_SIZE, value, to_syslog) ||
> ++		    check_set_config_value(key, ENV_MOUNT_NFS_DEFAULT_PROTOCOL, value, to_syslog))
> ++			;
> ++	}
> ++
> ++	if (!feof(f) || ferror(f)) {
> ++		if (!to_syslog) {
> ++			fprintf(stderr,
> ++				"fgets returned error %d while reading %s\n",
> ++				ferror(f), DEFAULTS_CONFIG_FILE);
> ++		} else {
> ++			logmsg("fgets returned error %d while reading %s",
> ++			      ferror(f), DEFAULTS_CONFIG_FILE);
> ++		}
> ++		fclose(f);
> ++		return 0;
> ++	}
> ++
> ++	fclose(f);
> ++	return 1;
> ++}
> ++
> ++const char *defaults_get_master_map(void)
> ++{
> ++	char *master;
> ++
> ++	master = get_env_string(ENV_NAME_MASTER_MAP);
> ++	if (!master)
> ++		return strdup(default_master_map_name);
> ++
> ++	return (const char *) master;
> ++}
> ++
> ++int defaults_master_set(void)
> ++{
> ++	char *val = getenv(ENV_NAME_MASTER_MAP);
> ++	if (!val)
> ++		return 0;
> ++
> ++	return 1;
> ++}
> ++
> ++unsigned int defaults_get_timeout(void)
> ++{
> ++	long timeout;
> ++
> ++	timeout = get_env_number(ENV_NAME_TIMEOUT);
> ++	if (timeout < 0)
> ++		timeout = DEFAULT_TIMEOUT;
> ++
> ++	return (unsigned int) timeout;
> ++}
> ++
> ++unsigned int defaults_get_negative_timeout(void)
> ++{
> ++	long n_timeout;
> ++
> ++	n_timeout = get_env_number(ENV_NAME_NEGATIVE_TIMEOUT);
> ++	if (n_timeout <= 0)
> ++		n_timeout = DEFAULT_NEGATIVE_TIMEOUT;
> ++
> ++	return (unsigned int) n_timeout;
> ++}
> ++
> ++unsigned int defaults_get_browse_mode(void)
> ++{
> ++	int res;
> ++
> ++	res = get_env_yesno(ENV_NAME_BROWSE_MODE);
> ++	if (res < 0)
> ++		res = DEFAULT_BROWSE_MODE;
> ++
> ++	return res;
> ++}
> ++
> ++unsigned int defaults_get_logging(void)
> ++{
> ++	char *res;
> ++	unsigned int logging = DEFAULT_LOGGING;
> ++
> ++	res = get_env_string(ENV_NAME_LOGGING);
> ++	if (!res)
> ++		return logging;
> ++
> ++	if (!strcasecmp(res, "none"))
> ++		logging = DEFAULT_LOGGING;
> ++	else {
> ++		if (!strcasecmp(res, "verbose"))
> ++			logging |= LOGOPT_VERBOSE;
> ++
> ++		if (!strcasecmp(res, "debug"))
> ++			logging |= LOGOPT_DEBUG;
> ++	}
> ++
> ++	free(res);
> ++
> ++	return logging;
> ++}
> ++
> ++unsigned int defaults_get_ldap_timeout(void)
> ++{
> ++	int res;
> ++
> ++	res = get_env_number(ENV_LDAP_TIMEOUT);
> ++	if (res < 0)
> ++		res = DEFAULT_LDAP_TIMEOUT;
> ++
> ++	return res;
> ++}
> ++
> ++unsigned int defaults_get_ldap_network_timeout(void)
> ++{
> ++	int res;
> ++
> ++	res = get_env_number(ENV_LDAP_NETWORK_TIMEOUT);
> ++	if (res < 0)
> ++		res = DEFAULT_LDAP_NETWORK_TIMEOUT;
> ++
> ++	return res;
> ++}
> + 
> + unsigned int defaults_get_mount_nfs_default_proto(void)
> + {
> +diff --git a/modules/lookup_ldap.c b/modules/lookup_ldap.c
> +index 3bc4dc5..431e50d 100644
> +--- a/modules/lookup_ldap.c
> ++++ b/modules/lookup_ldap.c
> +@@ -28,6 +28,7 @@
> + #include <arpa/nameser.h>
> + #include <resolv.h>
> + #include <lber.h>
> ++#include <libxml/tree.h>
> + 
> + #define MODULE_LOOKUP
> + #include "automount.h"
> diff --git a/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-make-yellow-pages-support-optional.patch b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-make-yellow-pages-support-optional.patch
> index 9504d8e..4199690 100644
> --- a/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-make-yellow-pages-support-optional.patch
> +++ b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-make-yellow-pages-support-optional.patch
> @@ -1,5 +1,3 @@
> -Upstream-Status: Backport
> -
>  autofs-5.0.7 - make yellow pages support optional
>  
>  From: Chris Packham <chris.packham@alliedtelesis.co.nz>
> @@ -8,6 +6,7 @@ If rpcsvc/ypclnt.h is not available don't compile in Yellow Pages
>  support.
>  ---
>  
> + CHANGELOG           |    1 +
>   Makefile.conf.in    |    3 +++
>   configure           |   16 ++++++++++++++++
>   configure.in        |    9 +++++++++
> @@ -17,6 +16,18 @@ support.
>   7 files changed, 39 insertions(+), 3 deletions(-)
>  
>  
> +diff --git a/CHANGELOG b/CHANGELOG
> +index 1130db6..ed17163 100644
> +--- a/CHANGELOG
> ++++ b/CHANGELOG
> +@@ -25,6 +25,7 @@
> + - don't schedule new alarms after readmap.
> + - use numeric protocol ids instead of protoent structs.
> + - lib/defaults.c: use WITH_LDAP conditional around LDAP types.
> ++- make yellow pages support optional.
> + 
> + 25/07/2012 autofs-5.0.7
> + =======================
>  diff --git a/Makefile.conf.in b/Makefile.conf.in
>  index 802318b..3766d45 100644
>  --- a/Makefile.conf.in
> diff --git a/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-modules-replicated-use-sin6.addr-s6_addr32.patch b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-modules-replicated-use-sin6.addr-s6_addr32.patch
> new file mode 100644
> index 0000000..4516bc5
> --- /dev/null
> +++ b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-modules-replicated-use-sin6.addr-s6_addr32.patch
> @@ -0,0 +1,39 @@
> +autofs-5.0.7 -  modules/replicated.c: use sin6_addr.s6_addr32
> +
> +From: Chris Packham <chris.packham@alliedtelesis.co.nz>
> +
> +The exported in6.h kernel header provides a convenience macro s6_addr32
> +for accessing the 32bit words of an ipv6 address. Use this instead of
> +__in6_u.__u6_addr32.
> +---
> +
> + CHANGELOG            |    1 +
> + modules/replicated.c |    2 +-
> + 2 files changed, 2 insertions(+), 1 deletions(-)
> +
> +
> +diff --git a/CHANGELOG b/CHANGELOG
> +index ed17163..4eaa9f9 100644
> +--- a/CHANGELOG
> ++++ b/CHANGELOG
> +@@ -26,6 +26,7 @@
> + - use numeric protocol ids instead of protoent structs.
> + - lib/defaults.c: use WITH_LDAP conditional around LDAP types.
> + - make yellow pages support optional.
> ++- modules/replicated.c: use sin6_addr.s6_addr32.
> + 
> + 25/07/2012 autofs-5.0.7
> + =======================
> +diff --git a/modules/replicated.c b/modules/replicated.c
> +index dbd5513..26f64b8 100644
> +--- a/modules/replicated.c
> ++++ b/modules/replicated.c
> +@@ -1146,7 +1146,7 @@ try_name:
> + 				rr4++;
> + 		} else if (this->ai_family == AF_INET6) {
> + 			struct sockaddr_in6 *addr = (struct sockaddr_in6 *) this->ai_addr;
> +-			if (!IN6_IS_ADDR_LOOPBACK(addr->sin6_addr.__in6_u.__u6_addr32))
> ++			if (!IN6_IS_ADDR_LOOPBACK(addr->sin6_addr.s6_addr32))
> + 				rr6++;
> + 		}
> + 		this = this->ai_next;
> diff --git a/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-update-kernel-include-files.patch b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-update-kernel-include-files.patch
> new file mode 100644
> index 0000000..3b6bb92
> --- /dev/null
> +++ b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/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@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/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-use-numeric-protocol-ids-instead-of-protoent-structs.patch b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-use-numeric-protocol-ids-instead-of-protoent-structs.patch
> new file mode 100644
> index 0000000..113b0a0
> --- /dev/null
> +++ b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-use-numeric-protocol-ids-instead-of-protoent-structs.patch
> @@ -0,0 +1,471 @@
> +autofs-5.0.7 - use numeric protocol ids instead of protoent structs
> +
> +From: Leonardo Chiquitto <leonardo.lists@gmail.com>
> +
> +The function getprotobyname() is not reentrant, so we can't call
> +it simultaneously from multiple threads. Instead of switching to
> +the reentrant version which adds more complexity to the code,
> +lets use numeric protocol IDs instead of protoent structures.
> +---
> +
> + CHANGELOG            |    1 +
> + include/rpc_subs.h   |    4 +--
> + lib/rpc_subs.c       |   80 ++++++++++++++++++--------------------------------
> + modules/replicated.c |   42 +++++++++++---------------
> + 4 files changed, 50 insertions(+), 77 deletions(-)
> +
> +
> +diff --git a/CHANGELOG b/CHANGELOG
> +index 4cf5621..ba1d65b 100644
> +--- a/CHANGELOG
> ++++ b/CHANGELOG
> +@@ -23,6 +23,7 @@
> + - fix use get_proximity() without libtirpc.
> + - don't use dirent d_type to filter out files in scandir()
> + - don't schedule new alarms after readmap.
> ++- use numeric protocol ids instead of protoent structs.
> + 
> + 25/07/2012 autofs-5.0.7
> + =======================
> +diff --git a/include/rpc_subs.h b/include/rpc_subs.h
> +index ca474d9..b6d59f9 100644
> +--- a/include/rpc_subs.h
> ++++ b/include/rpc_subs.h
> +@@ -54,7 +54,7 @@ struct conn_info {
> + 	unsigned short port;
> + 	unsigned long program;
> + 	unsigned long version;
> +-	struct protoent *proto;
> ++	int proto;
> + 	unsigned int send_sz;
> + 	unsigned int recv_sz;
> + 	struct timeval timeout;
> +@@ -66,7 +66,7 @@ int rpc_udp_getclient(struct conn_info *, unsigned int, unsigned int);
> + void rpc_destroy_udp_client(struct conn_info *);
> + int rpc_tcp_getclient(struct conn_info *, unsigned int, unsigned int);
> + void rpc_destroy_tcp_client(struct conn_info *);
> +-int rpc_portmap_getclient(struct conn_info *, const char *, struct sockaddr *, size_t, const char *, unsigned int);
> ++int rpc_portmap_getclient(struct conn_info *, const char *, struct sockaddr *, size_t, int, unsigned int);
> + int rpc_portmap_getport(struct conn_info *, struct pmap *, unsigned short *);
> + int rpc_ping_proto(struct conn_info *);
> + int rpc_ping(const char *, long, long, unsigned int);
> +diff --git a/lib/rpc_subs.c b/lib/rpc_subs.c
> +index d33a3c4..ad1d557 100644
> +--- a/lib/rpc_subs.c
> ++++ b/lib/rpc_subs.c
> +@@ -170,7 +170,7 @@ static int rpc_do_create_client(struct sockaddr *addr, struct conn_info *info, i
> + 
> + 	*client = NULL;
> + 
> +-	proto = info->proto->p_proto;
> ++	proto = info->proto;
> + 	if (proto == IPPROTO_UDP)
> + 		type = SOCK_DGRAM;
> + 	else
> +@@ -201,7 +201,7 @@ static int rpc_do_create_client(struct sockaddr *addr, struct conn_info *info, i
> + 	in4_raddr = (struct sockaddr_in *) addr;
> + 	in4_raddr->sin_port = htons(info->port);
> + 
> +-	switch (info->proto->p_proto) {
> ++	switch (info->proto) {
> + 	case IPPROTO_UDP:
> + 		clnt = clntudp_bufcreate(in4_raddr,
> + 					 info->program, info->version,
> +@@ -241,7 +241,7 @@ static int rpc_do_create_client(struct sockaddr *addr, struct conn_info *info, i
> + 
> + 	*client = NULL;
> + 
> +-	proto = info->proto->p_proto;
> ++	proto = info->proto;
> + 	if (proto == IPPROTO_UDP)
> + 		type = SOCK_DGRAM;
> + 	else
> +@@ -292,11 +292,11 @@ static int rpc_do_create_client(struct sockaddr *addr, struct conn_info *info, i
> + 	nb_addr.maxlen = nb_addr.len = slen;
> + 	nb_addr.buf = addr;
> + 
> +-	if (info->proto->p_proto == IPPROTO_UDP)
> ++	if (info->proto == IPPROTO_UDP)
> + 		clnt = clnt_dg_create(*fd, &nb_addr,
> + 				      info->program, info->version,
> + 				      info->send_sz, info->recv_sz);
> +-	else if (info->proto->p_proto == IPPROTO_TCP) {
> ++	else if (info->proto == IPPROTO_TCP) {
> + 		ret = connect_nb(*fd, addr, slen, &info->timeout);
> + 		if (ret < 0)
> + 			return ret;
> +@@ -355,7 +355,7 @@ static int create_client(struct conn_info *info, CLIENT **client)
> + 	memset(&hints, 0, sizeof(hints));
> + 	hints.ai_flags = AI_ADDRCONFIG;
> + 	hints.ai_family = AF_UNSPEC;
> +-	if (info->proto->p_proto == IPPROTO_UDP)
> ++	if (info->proto == IPPROTO_UDP)
> + 		hints.ai_socktype = SOCK_DGRAM;
> + 	else
> + 		hints.ai_socktype = SOCK_STREAM;
> +@@ -370,7 +370,7 @@ static int create_client(struct conn_info *info, CLIENT **client)
> + 
> + 	haddr = ai;
> + 	while (haddr) {
> +-		if (haddr->ai_protocol != info->proto->p_proto) {
> ++		if (haddr->ai_protocol != info->proto) {
> + 			haddr = haddr->ai_next;
> + 			continue;
> + 		}
> +@@ -417,16 +417,11 @@ out_close:
> + int rpc_udp_getclient(struct conn_info *info,
> + 		      unsigned int program, unsigned int version)
> + {
> +-	struct protoent *pe_proto;
> + 	CLIENT *client;
> + 	int ret;
> + 
> + 	if (!info->client) {
> +-		pe_proto = getprotobyname("udp");
> +-		if (!pe_proto)
> +-			return -ENOENT;
> +-
> +-		info->proto = pe_proto;
> ++		info->proto = IPPROTO_UDP;
> + 		info->timeout.tv_sec = RPC_TOUT_UDP;
> + 		info->timeout.tv_usec = 0;
> + 		info->send_sz = UDPMSGSIZE;
> +@@ -458,16 +453,11 @@ void rpc_destroy_udp_client(struct conn_info *info)
> + int rpc_tcp_getclient(struct conn_info *info,
> + 		      unsigned int program, unsigned int version)
> + {
> +-	struct protoent *pe_proto;
> + 	CLIENT *client;
> + 	int ret;
> + 
> + 	if (!info->client) {
> +-		pe_proto = getprotobyname("tcp");
> +-		if (!pe_proto)
> +-			return -ENOENT;
> +-
> +-		info->proto = pe_proto;
> ++		info->proto = IPPROTO_TCP;
> + 		info->timeout.tv_sec = RPC_TOUT_TCP;
> + 		info->timeout.tv_usec = 0;
> + 		info->send_sz = 0;
> +@@ -513,23 +503,18 @@ void rpc_destroy_tcp_client(struct conn_info *info)
> + 
> + int rpc_portmap_getclient(struct conn_info *info,
> + 			  const char *host, struct sockaddr *addr, size_t addr_len,
> +-			  const char *proto, unsigned int option)
> ++			  int proto, unsigned int option)
> + {
> +-	struct protoent *pe_proto;
> + 	CLIENT *client;
> + 	int ret;
> + 
> +-	pe_proto = getprotobyname(proto);
> +-	if (!pe_proto)
> +-		return -ENOENT;
> +-
> + 	info->host = host;
> + 	info->addr = addr;
> + 	info->addr_len = addr_len;
> + 	info->program = PMAPPROG;
> + 	info->port = PMAPPORT;
> + 	info->version = PMAPVERS;
> +-	info->proto = pe_proto;
> ++	info->proto = proto;
> + 	info->send_sz = RPCSMALLMSGSIZE;
> + 	info->recv_sz = RPCSMALLMSGSIZE;
> + 	info->timeout.tv_sec = PMAP_TOUT_UDP;
> +@@ -537,7 +522,7 @@ int rpc_portmap_getclient(struct conn_info *info,
> + 	info->close_option = option;
> + 	info->client = NULL;
> + 
> +-	if (pe_proto->p_proto == IPPROTO_TCP)
> ++	if (info->proto == IPPROTO_TCP)
> + 		info->timeout.tv_sec = PMAP_TOUT_TCP;
> + 
> + 	ret = create_client(info, &client);
> +@@ -555,7 +540,7 @@ int rpc_portmap_getport(struct conn_info *info,
> + 	struct conn_info pmap_info;
> + 	CLIENT *client;
> + 	enum clnt_stat status;
> +-	int proto = info->proto->p_proto;
> ++	int proto = info->proto;
> + 	int ret;
> + 
> + 	memset(&pmap_info, 0, sizeof(struct conn_info));
> +@@ -633,13 +618,13 @@ int rpc_ping_proto(struct conn_info *info)
> + {
> + 	CLIENT *client;
> + 	enum clnt_stat status;
> +-	int proto = info->proto->p_proto;
> ++	int proto = info->proto;
> + 	int ret;
> + 
> + 	if (info->client)
> + 		client = info->client;
> + 	else {
> +-		if (info->proto->p_proto == IPPROTO_UDP) {
> ++		if (info->proto == IPPROTO_UDP) {
> + 			info->send_sz = UDPMSGSIZE;
> + 			info->recv_sz = UDPMSGSIZE;
> + 		}
> +@@ -688,7 +673,7 @@ int rpc_ping_proto(struct conn_info *info)
> + 
> + static unsigned int __rpc_ping(const char *host,
> + 				unsigned long version,
> +-				char *proto,
> ++				int proto,
> + 				long seconds, long micros,
> + 				unsigned int option)
> + {
> +@@ -696,6 +681,7 @@ static unsigned int __rpc_ping(const char *host,
> + 	struct conn_info info;
> + 	struct pmap parms;
> + 
> ++	info.proto = proto;
> + 	info.host = host;
> + 	info.addr = NULL;
> + 	info.addr_len = 0;
> +@@ -710,13 +696,9 @@ static unsigned int __rpc_ping(const char *host,
> + 
> + 	status = RPC_PING_FAIL;
> + 
> +-	info.proto = getprotobyname(proto);
> +-	if (!info.proto)
> +-		return status;
> +-
> + 	parms.pm_prog = NFS_PROGRAM;
> + 	parms.pm_vers = version;
> +-	parms.pm_prot = info.proto->p_proto;
> ++	parms.pm_prot = info.proto;
> + 	parms.pm_port = 0;
> + 
> + 	status = rpc_portmap_getport(&info, &parms, &info.port);
> +@@ -734,19 +716,19 @@ int rpc_ping(const char *host, long seconds, long micros, unsigned int option)
> + 	unsigned long vers2 = NFS2_VERSION;
> + 	unsigned int status;
> + 
> +-	status = __rpc_ping(host, vers2, "udp", seconds, micros, option);
> ++	status = __rpc_ping(host, vers2, IPPROTO_UDP, seconds, micros, option);
> + 	if (status > 0)
> + 		return RPC_PING_V2 | RPC_PING_UDP;
> + 
> +-	status = __rpc_ping(host, vers3, "udp", seconds, micros, option);
> ++	status = __rpc_ping(host, vers3, IPPROTO_UDP, seconds, micros, option);
> + 	if (status > 0)
> + 		return RPC_PING_V3 | RPC_PING_UDP;
> + 
> +-	status = __rpc_ping(host, vers2, "tcp", seconds, micros, option);
> ++	status = __rpc_ping(host, vers2, IPPROTO_TCP, seconds, micros, option);
> + 	if (status > 0)
> + 		return RPC_PING_V2 | RPC_PING_TCP;
> + 
> +-	status = __rpc_ping(host, vers3, "tcp", seconds, micros, option);
> ++	status = __rpc_ping(host, vers3, IPPROTO_TCP, seconds, micros, option);
> + 	if (status > 0)
> + 		return RPC_PING_V3 | RPC_PING_TCP;
> + 
> +@@ -769,7 +751,7 @@ int rpc_time(const char *host,
> + 	double taken;
> + 	struct timeval start, end;
> + 	struct timezone tz;
> +-	char *proto = (ping_proto & RPC_PING_UDP) ? "udp" : "tcp";
> ++	int proto = (ping_proto & RPC_PING_UDP) ? IPPROTO_UDP : IPPROTO_TCP;
> + 	unsigned long vers = ping_vers;
> + 
> + 	gettimeofday(&start, &tz);
> +@@ -791,12 +773,12 @@ static int rpc_get_exports_proto(struct conn_info *info, exports *exp)
> + {
> + 	CLIENT *client;
> + 	enum clnt_stat status;
> +-	int proto = info->proto->p_proto;
> ++	int proto = info->proto;
> + 	unsigned int option = info->close_option;
> + 	int vers_entry;
> + 	int ret;
> + 
> +-	if (info->proto->p_proto == IPPROTO_UDP) {
> ++	if (info->proto == IPPROTO_UDP) {
> + 		info->send_sz = UDPMSGSIZE;
> + 		info->recv_sz = UDPMSGSIZE;
> + 	}
> +@@ -903,11 +885,9 @@ exports rpc_get_exports(const char *host, long seconds, long micros, unsigned in
> + 	parms.pm_port = 0;
> + 
> + 	/* Try UDP first */
> +-	info.proto = getprotobyname("udp");
> +-	if (!info.proto)
> +-		goto try_tcp;
> ++	info.proto = IPPROTO_UDP;
> + 
> +-	parms.pm_prot = info.proto->p_proto;
> ++	parms.pm_prot = info.proto;
> + 
> + 	status = rpc_portmap_getport(&info, &parms, &info.port);
> + 	if (status < 0)
> +@@ -920,11 +900,9 @@ exports rpc_get_exports(const char *host, long seconds, long micros, unsigned in
> + 		return exportlist;
> + 
> + try_tcp:
> +-	info.proto = getprotobyname("tcp");
> +-	if (!info.proto)
> +-		return NULL;
> ++	info.proto = IPPROTO_TCP;
> + 
> +-	parms.pm_prot = info.proto->p_proto;
> ++	parms.pm_prot = info.proto;
> + 
> + 	status = rpc_portmap_getport(&info, &parms, &info.port);
> + 	if (status < 0)
> +diff --git a/modules/replicated.c b/modules/replicated.c
> +index 6b96320..dbd5513 100644
> +--- a/modules/replicated.c
> ++++ b/modules/replicated.c
> +@@ -419,7 +419,7 @@ void free_host_list(struct host **list)
> + 
> + static unsigned int get_nfs_info(unsigned logopt, struct host *host,
> + 			 struct conn_info *pm_info, struct conn_info *rpc_info,
> +-			 const char *proto, unsigned int version, int port)
> ++			 int proto, unsigned int version, int port)
> + {
> + 	unsigned int random_selection = host->options & MOUNT_FLAG_RANDOM_SELECT;
> + 	unsigned int use_weight_only = host->options & MOUNT_FLAG_USE_WEIGHT_ONLY;
> +@@ -433,22 +433,18 @@ static unsigned int get_nfs_info(unsigned logopt, struct host *host,
> + 	int status, count = 0;
> + 
> + 	if (host->addr)
> +-		debug(logopt, "called with host %s(%s) proto %s version 0x%x",
> ++		debug(logopt, "called with host %s(%s) proto %d version 0x%x",
> + 		      host->name, get_addr_string(host->addr, buf, len),
> + 		      proto, version);
> + 	else
> + 		debug(logopt,
> +-		      "called for host %s proto %s version 0x%x",
> ++		      "called for host %s proto %d version 0x%x",
> + 		      host->name, proto, version);
> + 
> +-	rpc_info->proto = getprotobyname(proto);
> +-	if (!rpc_info->proto)
> +-		return 0;
> +-
> ++	rpc_info->proto = proto;
> + 	memset(&parms, 0, sizeof(struct pmap));
> +-
> + 	parms.pm_prog = NFS_PROGRAM;
> +-	parms.pm_prot = rpc_info->proto->p_proto;
> ++	parms.pm_prot = proto;
> + 
> + 	if (!(version & NFS4_REQUESTED))
> + 		goto v3_ver;
> +@@ -479,7 +475,7 @@ static unsigned int get_nfs_info(unsigned logopt, struct host *host,
> + 		}
> + 	}
> + 
> +-	if (rpc_info->proto->p_proto == IPPROTO_UDP)
> ++	if (rpc_info->proto == IPPROTO_UDP)
> + 		status = rpc_udp_getclient(rpc_info, NFS_PROGRAM, NFS4_VERSION);
> + 	else
> + 		status = rpc_tcp_getclient(rpc_info, NFS_PROGRAM, NFS4_VERSION);
> +@@ -540,7 +536,7 @@ v3_ver:
> + 			goto v2_ver;
> + 	}
> + 
> +-	if (rpc_info->proto->p_proto == IPPROTO_UDP)
> ++	if (rpc_info->proto == IPPROTO_UDP)
> + 		status = rpc_udp_getclient(rpc_info, NFS_PROGRAM, NFS3_VERSION);
> + 	else
> + 		status = rpc_tcp_getclient(rpc_info, NFS_PROGRAM, NFS3_VERSION);
> +@@ -587,7 +583,7 @@ v2_ver:
> + 			goto done_ver;
> + 	}
> + 
> +-	if (rpc_info->proto->p_proto == IPPROTO_UDP)
> ++	if (rpc_info->proto == IPPROTO_UDP)
> + 		status = rpc_udp_getclient(rpc_info, NFS_PROGRAM, NFS2_VERSION);
> + 	else
> + 		status = rpc_tcp_getclient(rpc_info, NFS_PROGRAM, NFS2_VERSION);
> +@@ -618,7 +614,7 @@ v2_ver:
> + 	}
> + 
> + done_ver:
> +-	if (rpc_info->proto->p_proto == IPPROTO_UDP) {
> ++	if (rpc_info->proto == IPPROTO_UDP) {
> + 		rpc_destroy_udp_client(rpc_info);
> + 		rpc_destroy_udp_client(pm_info);
> + 	} else {
> +@@ -675,7 +671,7 @@ static int get_vers_and_cost(unsigned logopt, struct host *host,
> + 
> + 	if (version & TCP_REQUESTED) {
> + 		supported = get_nfs_info(logopt, host,
> +-				   &pm_info, &rpc_info, "tcp", vers, port);
> ++				   &pm_info, &rpc_info, IPPROTO_TCP, vers, port);
> + 		if (IS_ERR(supported)) {
> + 			if (ERR(supported) == EHOSTUNREACH ||
> + 			    ERR(supported) == ETIMEDOUT)
> +@@ -688,7 +684,7 @@ static int get_vers_and_cost(unsigned logopt, struct host *host,
> + 
> + 	if (version & UDP_REQUESTED) {
> + 		supported = get_nfs_info(logopt, host,
> +-				   &pm_info, &rpc_info, "udp", vers, port);
> ++				   &pm_info, &rpc_info, IPPROTO_UDP, vers, port);
> + 		if (IS_ERR(supported)) {
> + 			if (!ret && ERR(supported) == ETIMEDOUT)
> + 				return ret;
> +@@ -709,7 +705,7 @@ static int get_supported_ver_and_cost(unsigned logopt, struct host *host,
> + 	socklen_t len = INET6_ADDRSTRLEN;
> + 	char buf[len + 1];
> + 	struct conn_info pm_info, rpc_info;
> +-	const char *proto;
> ++	int proto;
> + 	unsigned int vers;
> + 	struct timeval start, end;
> + 	struct timezone tz;
> +@@ -748,10 +744,10 @@ static int get_supported_ver_and_cost(unsigned logopt, struct host *host,
> + 	 *  So, we do the conversion here.
> + 	 */
> + 	if (version & UDP_SELECTED_MASK) {
> +-		proto = "udp";
> ++		proto = IPPROTO_UDP;
> + 		version >>= 8;
> + 	} else
> +-		proto = "tcp";
> ++		proto = IPPROTO_TCP;
> + 
> + 	switch (version) {
> + 	case NFS2_SUPPORTED:
> +@@ -768,9 +764,7 @@ static int get_supported_ver_and_cost(unsigned logopt, struct host *host,
> + 		return 0;
> + 	}
> + 
> +-	rpc_info.proto = getprotobyname(proto);
> +-	if (!rpc_info.proto)
> +-		return 0;
> ++	rpc_info.proto = proto;
> + 
> + 	if (port > 0)
> + 		rpc_info.port = port;
> +@@ -786,14 +780,14 @@ static int get_supported_ver_and_cost(unsigned logopt, struct host *host,
> + 
> + 		memset(&parms, 0, sizeof(struct pmap));
> + 		parms.pm_prog = NFS_PROGRAM;
> +-		parms.pm_prot = rpc_info.proto->p_proto;
> ++		parms.pm_prot = rpc_info.proto;
> + 		parms.pm_vers = vers;
> + 		ret = rpc_portmap_getport(&pm_info, &parms, &rpc_info.port);
> + 		if (ret < 0)
> + 			goto done;
> + 	}
> + 
> +-	if (rpc_info.proto->p_proto == IPPROTO_UDP)
> ++	if (rpc_info.proto == IPPROTO_UDP)
> + 		status = rpc_udp_getclient(&rpc_info, NFS_PROGRAM, vers);
> + 	else
> + 		status = rpc_tcp_getclient(&rpc_info, NFS_PROGRAM, vers);
> +@@ -815,7 +809,7 @@ static int get_supported_ver_and_cost(unsigned logopt, struct host *host,
> + 		}
> + 	}
> + done:
> +-	if (rpc_info.proto->p_proto == IPPROTO_UDP) {
> ++	if (rpc_info.proto == IPPROTO_UDP) {
> + 		rpc_destroy_udp_client(&rpc_info);
> + 		rpc_destroy_udp_client(&pm_info);
> + 	} else {
> diff --git a/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-workaround-missing-GNU-versionsort-extension.patch b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-workaround-missing-GNU-versionsort-extension.patch
> new file mode 100644
> index 0000000..6a1a49e
> --- /dev/null
> +++ b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-workaround-missing-GNU-versionsort-extension.patch
> @@ -0,0 +1,149 @@
> +autofs-5.0.7 - workaround missing GNU versionsort extension
> +
> +From: Chris Packham <chris.packham@alliedtelesis.co.nz>
> +
> +alphasort() and scandir() are specified in POSIX.1-2008, versionsort()
> +is a GNU extension. When versionsort isn't available fallback to using
> +alphasort.
> +---
> +
> + CHANGELOG            |    1 +
> + configure            |   62 ++++++++++++++++++++++++++++++++++++++++++++++++++
> + configure.in         |    6 +++++
> + include/config.h.in  |    3 ++
> + modules/lookup_dir.c |    5 ++++
> + 5 files changed, 77 insertions(+), 0 deletions(-)
> +
> +
> +diff --git a/CHANGELOG b/CHANGELOG
> +index 4eaa9f9..39388a5 100644
> +--- a/CHANGELOG
> ++++ b/CHANGELOG
> +@@ -27,6 +27,7 @@
> + - lib/defaults.c: use WITH_LDAP conditional around LDAP types.
> + - make yellow pages support optional.
> + - modules/replicated.c: use sin6_addr.s6_addr32.
> ++- workaround missing GNU versionsort extension.
> + 
> + 25/07/2012 autofs-5.0.7
> + =======================
> +diff --git a/configure b/configure
> +index cf6428c..c1423d8 100755
> +--- a/configure
> ++++ b/configure
> +@@ -4010,6 +4010,68 @@ $as_echo "yes" >&6; }
> +   KRB5_FLAGS=`$KRB5_CONFIG --cflags`
> + fi
> + 
> ++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing versionsort" >&5
> ++$as_echo_n "checking for library containing versionsort... " >&6; }
> ++if ${ac_cv_search_versionsort+:} false; then :
> ++  $as_echo_n "(cached) " >&6
> ++else
> ++  ac_func_search_save_LIBS=$LIBS
> ++cat confdefs.h - <<_ACEOF >conftest.$ac_ext
> ++/* end confdefs.h.  */
> ++
> ++/* Override any GCC internal prototype to avoid an error.
> ++   Use char because int might match the return type of a GCC
> ++   builtin and then its argument prototype would still apply.  */
> ++#ifdef __cplusplus
> ++extern "C"
> ++#endif
> ++char versionsort ();
> ++int
> ++main ()
> ++{
> ++return versionsort ();
> ++  ;
> ++  return 0;
> ++}
> ++_ACEOF
> ++for ac_lib in '' ; do
> ++  if test -z "$ac_lib"; then
> ++    ac_res="none required"
> ++  else
> ++    ac_res=-l$ac_lib
> ++    LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
> ++  fi
> ++  if ac_fn_c_try_link "$LINENO"; then :
> ++  ac_cv_search_versionsort=$ac_res
> ++fi
> ++rm -f core conftest.err conftest.$ac_objext \
> ++    conftest$ac_exeext
> ++  if ${ac_cv_search_versionsort+:} false; then :
> ++  break
> ++fi
> ++done
> ++if ${ac_cv_search_versionsort+:} false; then :
> ++
> ++else
> ++  ac_cv_search_versionsort=no
> ++fi
> ++rm conftest.$ac_ext
> ++LIBS=$ac_func_search_save_LIBS
> ++fi
> ++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_versionsort" >&5
> ++$as_echo "$ac_cv_search_versionsort" >&6; }
> ++ac_res=$ac_cv_search_versionsort
> ++if test "$ac_res" != no; then :
> ++  test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
> ++
> ++fi
> ++
> ++if test "$ac_cv_search_versionsort" = "no"; then
> ++
> ++$as_echo "#define WITHOUT_VERSIONSORT 1" >>confdefs.h
> ++
> ++fi
> ++
> + #
> + # glibc/libc 6 new libraries
> + #
> +diff --git a/configure.in b/configure.in
> +index 363c376..4029375 100644
> +--- a/configure.in
> ++++ b/configure.in
> +@@ -163,6 +163,12 @@ AF_SLOPPY_MOUNT()
> + AF_CHECK_LIBXML()
> + AF_CHECK_KRB5()
> + 
> ++AC_SEARCH_LIBS([versionsort],[])
> ++if test "$ac_cv_search_versionsort" = "no"; then
> ++	AC_DEFINE(WITHOUT_VERSIONSORT, 1,
> ++		[Define if your C library does not provide versionsort])
> ++fi
> ++
> + #
> + # glibc/libc 6 new libraries
> + #
> +diff --git a/include/config.h.in b/include/config.h.in
> +index 7f1c5b5..a2a05a8 100644
> +--- a/include/config.h.in
> ++++ b/include/config.h.in
> +@@ -135,6 +135,9 @@
> + /* Define to 1 to use the libtirpc tsd usage workaround */
> + #undef TIRPC_WORKAROUND
> + 
> ++/* Define if your C library does not provide versionsort */
> ++#undef WITHOUT_VERSIONSORT
> ++
> + /* Define if using the dmalloc debugging malloc package */
> + #undef WITH_DMALLOC
> + 
> +diff --git a/modules/lookup_dir.c b/modules/lookup_dir.c
> +index 33901c0..07471b7 100644
> +--- a/modules/lookup_dir.c
> ++++ b/modules/lookup_dir.c
> +@@ -39,6 +39,11 @@
> + #define AUTOFS_DIR_EXT ".autofs"
> + #define AUTOFS_DIR_EXTSIZ (sizeof(AUTOFS_DIR_EXT) - 1)
> + 
> ++/* Work around non-GNU systems that don't provide versionsort */
> ++#ifdef WITHOUT_VERSIONSORT
> ++#define versionsort alphasort
> ++#endif
> ++
> + struct lookup_context {
> +   const char *mapname;
> + };
> diff --git a/meta-networking/recipes-daemons/autofs/autofs_5.0.7.bb b/meta-networking/recipes-daemons/autofs/autofs_5.0.7.bb
> index 7d8cf17..6751402 100644
> --- a/meta-networking/recipes-daemons/autofs/autofs_5.0.7.bb
> +++ b/meta-networking/recipes-daemons/autofs/autofs_5.0.7.bb
> @@ -3,7 +3,7 @@ SECTION = "base"
>  LICENSE = "GPL-2.0"
>  LIC_FILES_CHKSUM = "file://COPYING;md5=0636e73ff0215e8d672dc4c32c317bb3"
>  
> -PR = "r2"
> +PR = "r3"
>  
>  DEPENDS += "libtirpc flex-native bison-native"
>  
> @@ -27,7 +27,30 @@ SRC_URI = "${KERNELORG_MIRROR}/linux/daemons/autofs/v5/autofs-${PV}.tar.bz2 \
>             file://autofs-5.0.6-fix-recursive-mount-deadlock.patch \
>             file://autofs-5.0.6-increase-file-map-read-buffer-size.patch \
>             file://autofs-5.0.7-handle-new-location-of-systemd.patch \
> +           file://autofs-5.0.7-fix-map-entry-duplicate-offset-detection.patch \
> +           file://autofs-5.0.7-allow-nsswitch_conf-to-not-contain-automount-lines.patch \
> +           file://autofs-5.0.7-fix-nobind-man-page-description.patch \
> +           file://autofs-5.0.7-fix-submount-offset-delete.patch \
> +           file://autofs-5.0.7-fix-init-script-status-return.patch \
> +           file://autofs-5.0.7-fix-use-get_proximity-without-libtirpc.patch \
> +           file://autofs-5.0.7-dont-use-dirent-d_type-to-filter-out-files-in-scandir.patch \
> +           file://autofs-5.0.7-dont-schedule-new-alarms-after-readmap.patch \
> +           file://autofs-5.0.7-use-numeric-protocol-ids-instead-of-protoent-structs.patch \
> +           file://autofs-5.0.7-lib-defaults-use-WITH_LDAP-conditional-around-LDAP-types.patch \
>             file://autofs-5.0.7-make-yellow-pages-support-optional.patch \
> +           file://autofs-5.0.7-modules-replicated-use-sin6.addr-s6_addr32.patch \
> +           file://autofs-5.0.7-workaround-missing-GNU-versionsort-extension.patch \
> +           file://autofs-5.0.7-dont-fail-on-master-map-self-include.patch \
> +           file://autofs-5.0.7-fix-wildcard-multi-map-regression.patch \
> +           file://autofs-5.0.7-fix-file-descriptor-leak-when-reloading-the-daemon.patch \
> +           file://autofs-5.0.7-depricate-nosymlink-pseudo-option.patch \
> +           file://autofs-5.0.7-add-symlink-pseudo-option.patch \
> +           file://autofs-5.0.7-update-kernel-include-files.patch \
> +           file://autofs-5.0.7-fix-requires-in-spec-file.patch \
> +           file://autofs-5.0.7-fix-libtirpc-build-option.patch \
> +           file://autofs-5.0.7-fix-systemd-unidir-in-spec-file.patch \
> +           file://autofs-5.0.7-document-browse-option-in-man-page.patch \
> +           file://autofs-5.0.7-fix-automounter-support-on-parisc.patch \
>             file://autofs-5.0.7-include-linux-nfs.h-directly-in-rpc_sub.patch \
>             file://Makefile.rules-cross.patch \
>             file://no-bash.patch \
Andreas Oberritter - March 19, 2013, 3:40 p.m.
On 19.03.2013 13:49, Joe MacDonald wrote:
> [[oe] [meta-networking][PATCH] autofs: update to current patchlevel] On 13.03.19 (Tue 11:24) Andreas Oberritter wrote:
> 
>> * Apply all patches from ftp.kernel.org/pub/linux/daemons/autofs/v5/patches-5.0.8/
>>
>> Signed-off-by: Andreas Oberritter <obi@opendreambox.org>
>> ---
>>  .../autofs-5.0.7-add-symlink-pseudo-option.patch   |  217 +++++++++
>>  ...witch_conf-to-not-contain-automount-lines.patch |   50 +++
>>  ...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 +++
>>  ....7-dont-schedule-new-alarms-after-readmap.patch |   69 +++
>>  ...ent-d_type-to-filter-out-files-in-scandir.patch |   41 ++
>>  ...s-5.0.7-fix-automounter-support-on-parisc.patch |   24 +
>>  ...descriptor-leak-when-reloading-the-daemon.patch |  179 ++++++++
>>  ...utofs-5.0.7-fix-init-script-status-return.patch |   39 ++
>>  .../autofs-5.0.7-fix-libtirpc-build-option.patch   |   66 +++
>>  ...-fix-map-entry-duplicate-offset-detection.patch |   37 ++
>>  ...ofs-5.0.7-fix-nobind-man-page-description.patch |   46 ++
>>  .../autofs-5.0.7-fix-requires-in-spec-file.patch   |   37 ++
>>  .../autofs-5.0.7-fix-submount-offset-delete.patch  |   45 ++
>>  ...ofs-5.0.7-fix-systemd-unidir-in-spec-file.patch |   72 +++
>>  ....7-fix-use-get_proximity-without-libtirpc.patch |   54 +++
>>  ...s-5.0.7-fix-wildcard-multi-map-regression.patch |  225 ++++++++++
>>  ...e-WITH_LDAP-conditional-around-LDAP-types.patch |  448 +++++++++++++++++++
>>  ...-5.0.7-make-yellow-pages-support-optional.patch |   15 +-
>>  ...odules-replicated-use-sin6.addr-s6_addr32.patch |   39 ++
>>  .../autofs-5.0.7-update-kernel-include-files.patch |   92 ++++
>>  ...-protocol-ids-instead-of-protoent-structs.patch |  471 ++++++++++++++++++++
>>  ...karound-missing-GNU-versionsort-extension.patch |  149 +++++++
>>  .../recipes-daemons/autofs/autofs_5.0.7.bb         |   25 +-
>>  25 files changed, 2582 insertions(+), 3 deletions(-)
> 
> I had started to ask why we wouldn't just update to 5.0.8 directly
> instead of patching our way there.  Then I thought I'd look myself and
> now I know.  :-)
> 
> This is just a simple (and wholesale) integration of the patches already
> upstream?  That seems reasonable to me.

Yes.

In the future, maybe we should switch to Git. A repository for autofs is
available at
git://git.kernel.org/pub/scm/linux/storage/autofs/autofs.git. For now, I
didn't want to change the recipe too much.

One of these patches fixed a problem, where the automount daemon would
hang after receiving SIGHUP, but I don't know which one exactly.

Regards,
Andreas
Khem Raj - March 19, 2013, 4:38 p.m.
On Mar 19, 2013, at 3:24 AM, Andreas Oberritter <obi@opendreambox.org> wrote:

> * Apply all patches from ftp.kernel.org/pub/linux/daemons/autofs/v5/patches-5.0.8/
> 


Andreas

what kind of testing have you done on this patch set 


> Signed-off-by: Andreas Oberritter <obi@opendreambox.org>
> ---
> .../autofs-5.0.7-add-symlink-pseudo-option.patch   |  217 +++++++++
> ...witch_conf-to-not-contain-automount-lines.patch |   50 +++
> ...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 +++
> ....7-dont-schedule-new-alarms-after-readmap.patch |   69 +++
> ...ent-d_type-to-filter-out-files-in-scandir.patch |   41 ++
> ...s-5.0.7-fix-automounter-support-on-parisc.patch |   24 +
> ...descriptor-leak-when-reloading-the-daemon.patch |  179 ++++++++
> ...utofs-5.0.7-fix-init-script-status-return.patch |   39 ++
> .../autofs-5.0.7-fix-libtirpc-build-option.patch   |   66 +++
> ...-fix-map-entry-duplicate-offset-detection.patch |   37 ++
> ...ofs-5.0.7-fix-nobind-man-page-description.patch |   46 ++
> .../autofs-5.0.7-fix-requires-in-spec-file.patch   |   37 ++
> .../autofs-5.0.7-fix-submount-offset-delete.patch  |   45 ++
> ...ofs-5.0.7-fix-systemd-unidir-in-spec-file.patch |   72 +++
> ....7-fix-use-get_proximity-without-libtirpc.patch |   54 +++
> ...s-5.0.7-fix-wildcard-multi-map-regression.patch |  225 ++++++++++
> ...e-WITH_LDAP-conditional-around-LDAP-types.patch |  448 +++++++++++++++++++
> ...-5.0.7-make-yellow-pages-support-optional.patch |   15 +-
> ...odules-replicated-use-sin6.addr-s6_addr32.patch |   39 ++
> .../autofs-5.0.7-update-kernel-include-files.patch |   92 ++++
> ...-protocol-ids-instead-of-protoent-structs.patch |  471 ++++++++++++++++++++
> ...karound-missing-GNU-versionsort-extension.patch |  149 +++++++
> .../recipes-daemons/autofs/autofs_5.0.7.bb         |   25 +-
> 25 files changed, 2582 insertions(+), 3 deletions(-)
> create mode 100644 meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-add-symlink-pseudo-option.patch
> create mode 100644 meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-allow-nsswitch_conf-to-not-contain-automount-lines.patch
> create mode 100644 meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-depricate-nosymlink-pseudo-option.patch
> create mode 100644 meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-document-browse-option-in-man-page.patch
> create mode 100644 meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-dont-fail-on-master-map-self-include.patch
> create mode 100644 meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-dont-schedule-new-alarms-after-readmap.patch
> create mode 100644 meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-dont-use-dirent-d_type-to-filter-out-files-in-scandir.patch
> create mode 100644 meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-automounter-support-on-parisc.patch
> create mode 100644 meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-file-descriptor-leak-when-reloading-the-daemon.patch
> create mode 100644 meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-init-script-status-return.patch
> create mode 100644 meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-libtirpc-build-option.patch
> create mode 100644 meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-map-entry-duplicate-offset-detection.patch
> create mode 100644 meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-nobind-man-page-description.patch
> create mode 100644 meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-requires-in-spec-file.patch
> create mode 100644 meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-submount-offset-delete.patch
> create mode 100644 meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-systemd-unidir-in-spec-file.patch
> create mode 100644 meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-use-get_proximity-without-libtirpc.patch
> create mode 100644 meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-wildcard-multi-map-regression.patch
> create mode 100644 meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-lib-defaults-use-WITH_LDAP-conditional-around-LDAP-types.patch
> create mode 100644 meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-modules-replicated-use-sin6.addr-s6_addr32.patch
> create mode 100644 meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-update-kernel-include-files.patch
> create mode 100644 meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-use-numeric-protocol-ids-instead-of-protoent-structs.patch
> create mode 100644 meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-workaround-missing-GNU-versionsort-extension.patch
> 
> diff --git a/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-add-symlink-pseudo-option.patch b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-add-symlink-pseudo-option.patch
> new file mode 100644
> index 0000000..b0440f4
> --- /dev/null
> +++ b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/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@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/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-allow-nsswitch_conf-to-not-contain-automount-lines.patch b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-allow-nsswitch_conf-to-not-contain-automount-lines.patch
> new file mode 100644
> index 0000000..c342d10
> --- /dev/null
> +++ b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-allow-nsswitch_conf-to-not-contain-automount-lines.patch
> @@ -0,0 +1,50 @@
> +autofs-5.0.7 - Allow nsswitch.conf to not contain "automount:" lines
> +
> +From: Michael Tokarev <mjt@tls.msk.ru>
> +
> +Current code does not allow a case when nsswitch.conf
> +does not mention automount map at all, like all new
> +installations.  It logs a rather unpleasant error
> +message instead:
> +
> + syntax error in nsswitch config near [ syntax error ]
> +
> +this patch has a minimal fix, to allo "file" to be empty.
> +
> +Whole parser in C is about 25 lines of code, the "grammar"
> +is trivial, and it is better to ditch all this yacc/lex
> +stuff, but that will be much more intrusive change.
> +
> +Signed-off-by: Michael Tokarev <mjt@tls.msk.ru>
> +Cc: 682266@bugs.debian.org
> +---
> +
> + CHANGELOG       |    1 +
> + lib/nss_parse.y |    1 +
> + 2 files changed, 2 insertions(+), 0 deletions(-)
> +
> +
> +diff --git a/CHANGELOG b/CHANGELOG
> +index bd0dd82..16ac2a0 100644
> +--- a/CHANGELOG
> ++++ b/CHANGELOG
> +@@ -16,6 +16,7 @@
> + - increase file map read buffer size.
> + - handle new location of systemd.
> + - fix map entry duplicate offset detection.
> ++- Allow nsswitch.conf to not contain "automount:" lines.
> + 
> + 25/07/2012 autofs-5.0.7
> + =======================
> +diff --git a/lib/nss_parse.y b/lib/nss_parse.y
> +index a39fda4..055e9d7 100644
> +--- a/lib/nss_parse.y
> ++++ b/lib/nss_parse.y
> +@@ -72,6 +72,7 @@ file: {
> + 		nss_debug = YYDEBUG;
> + #endif
> + 	} sources NL
> ++	| /* empty */
> + 	;
> + 
> + sources: nss_source
> diff --git a/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-depricate-nosymlink-pseudo-option.patch b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-depricate-nosymlink-pseudo-option.patch
> new file mode 100644
> index 0000000..c784de7
> --- /dev/null
> +++ b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/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@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/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-document-browse-option-in-man-page.patch b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-document-browse-option-in-man-page.patch
> new file mode 100644
> index 0000000..4641342
> --- /dev/null
> +++ b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/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@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/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-dont-fail-on-master-map-self-include.patch b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-dont-fail-on-master-map-self-include.patch
> new file mode 100644
> index 0000000..afb908b
> --- /dev/null
> +++ b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/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@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/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-dont-schedule-new-alarms-after-readmap.patch b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-dont-schedule-new-alarms-after-readmap.patch
> new file mode 100644
> index 0000000..6444687
> --- /dev/null
> +++ b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-dont-schedule-new-alarms-after-readmap.patch
> @@ -0,0 +1,69 @@
> +autofs-5.0.7 - don't schedule new alarms after readmap
> +
> +From: Leonardo Chiquitto <leonardo.lists@gmail.com>
> +
> +Currently, a new alarm is scheduled every time the daemon receives
> +a SIGHUP (map re-read) or SIGUSR1 (forced expiration). Besides that,
> +map re-reads started on demand when a map is found to be outdated
> +also generate a new alarm.
> +
> +Once added, these alarms are never deleted and hence increase the
> +number of times the daemon wakes up to run the expiration procedure.
> +After a couple of months, in setups with many mount points, it's
> +normal to see automount waking up every second to handle the
> +expiration timer.
> +
> +This patch removes the alarm scheduling from the readmap cleanup
> +routine and makes sure the alarm is re-added after the expiration
> +process only when it was not triggered by SIGUSR1.
> +
> +I couldn't think of any use case to justify keeping these alarms:
> +it's critical to have the alarm ticking every timeout/4 seconds,
> +but more than one periodic alarm running doesn't seem to make
> +sense.
> +---
> +
> + CHANGELOG      |    1 +
> + daemon/state.c |    6 +-----
> + 2 files changed, 2 insertions(+), 5 deletions(-)
> +
> +
> +diff --git a/CHANGELOG b/CHANGELOG
> +index c9be73e..4cf5621 100644
> +--- a/CHANGELOG
> ++++ b/CHANGELOG
> +@@ -22,6 +22,7 @@
> + - fix init script status return.
> + - fix use get_proximity() without libtirpc.
> + - don't use dirent d_type to filter out files in scandir()
> ++- don't schedule new alarms after readmap.
> + 
> + 25/07/2012 autofs-5.0.7
> + =======================
> +diff --git a/daemon/state.c b/daemon/state.c
> +index b451c56..6e23022 100644
> +--- a/daemon/state.c
> ++++ b/daemon/state.c
> +@@ -144,7 +144,7 @@ void expire_cleanup(void *arg)
> + 					ap->submount = 2;
> + 			}
> + 
> +-			if (!ap->submount)
> ++			if (ap->state == ST_EXPIRE && !ap->submount)
> + 				alarm_add(ap, ap->exp_runfreq);
> + 
> + 			/* FALLTHROUGH */
> +@@ -330,13 +330,9 @@ static void do_readmap_cleanup(void *arg)
> + 	ap = ra->ap;
> + 
> + 	st_mutex_lock();
> +-
> + 	ap->readmap_thread = 0;
> + 	st_set_done(ap);
> +-	if (!ap->submount)
> +-		alarm_add(ap, ap->exp_runfreq);
> + 	st_ready(ap);
> +-
> + 	st_mutex_unlock();
> + 
> + 	free(ra);
> diff --git a/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-dont-use-dirent-d_type-to-filter-out-files-in-scandir.patch b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-dont-use-dirent-d_type-to-filter-out-files-in-scandir.patch
> new file mode 100644
> index 0000000..9c9d99b
> --- /dev/null
> +++ b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-dont-use-dirent-d_type-to-filter-out-files-in-scandir.patch
> @@ -0,0 +1,41 @@
> +autofs-5.0.7 - don't use dirent d_type to filter out files in scandir()
> +
> +From: Leonardo Chiquitto <leonardo.lists@gmail.com>
> +
> +The "d_type" field of a dirent structure is not filled in by all
> +file systems (XFS being one example), so we can't rely on it to
> +check file types.
> +---
> +
> + CHANGELOG            |    1 +
> + modules/lookup_dir.c |    4 ----
> + 2 files changed, 1 insertions(+), 4 deletions(-)
> +
> +
> +diff --git a/CHANGELOG b/CHANGELOG
> +index 460bd27..c9be73e 100644
> +--- a/CHANGELOG
> ++++ b/CHANGELOG
> +@@ -21,6 +21,7 @@
> + - fix submount offset delete.
> + - fix init script status return.
> + - fix use get_proximity() without libtirpc.
> ++- don't use dirent d_type to filter out files in scandir()
> + 
> + 25/07/2012 autofs-5.0.7
> + =======================
> +diff --git a/modules/lookup_dir.c b/modules/lookup_dir.c
> +index 658cc29..33901c0 100644
> +--- a/modules/lookup_dir.c
> ++++ b/modules/lookup_dir.c
> +@@ -103,10 +103,6 @@ static int acceptable_dirent_p(const struct dirent *e)
> + {
> +   size_t namesz;
> + 
> +-
> +-  if (!(e->d_type == DT_REG || e->d_type == DT_LNK))
> +-	  return 0;
> +-
> +   namesz = strlen(e->d_name);
> +   if (!namesz)
> + 	  return 0;
> diff --git a/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-automounter-support-on-parisc.patch b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-automounter-support-on-parisc.patch
> new file mode 100644
> index 0000000..e00fdc1
> --- /dev/null
> +++ b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/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@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@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/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-file-descriptor-leak-when-reloading-the-daemon.patch b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-file-descriptor-leak-when-reloading-the-daemon.patch
> new file mode 100644
> index 0000000..8ce6c0f
> --- /dev/null
> +++ b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/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@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/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-init-script-status-return.patch b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-init-script-status-return.patch
> new file mode 100644
> index 0000000..a08d62f
> --- /dev/null
> +++ b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-init-script-status-return.patch
> @@ -0,0 +1,39 @@
> +autofs-5.0.7 - fix init script status return
> +
> +From: Ian Kent <ikent@redhat.com>
> +
> +The patch that added the piddir to configure to fix incorrect init
> +script status() function returns failed to actually return the value
> +to the user.
> +---
> +
> + CHANGELOG             |    1 +
> + redhat/autofs.init.in |    2 +-
> + 2 files changed, 2 insertions(+), 1 deletions(-)
> +
> +
> +diff --git a/CHANGELOG b/CHANGELOG
> +index 76c1f73..5bcb1af 100644
> +--- a/CHANGELOG
> ++++ b/CHANGELOG
> +@@ -19,6 +19,7 @@
> + - Allow nsswitch.conf to not contain "automount:" lines.
> + - fix nobind man page description.
> + - fix submount offset delete.
> ++- fix init script status return.
> + 
> + 25/07/2012 autofs-5.0.7
> + =======================
> +diff --git a/redhat/autofs.init.in b/redhat/autofs.init.in
> +index fe18b3e..9d008ff 100644
> +--- a/redhat/autofs.init.in
> ++++ b/redhat/autofs.init.in
> +@@ -172,7 +172,7 @@ RETVAL=0
> + case "$1" in
> + 	status)
> + 		status -p @@autofspiddir@@/autofs.pid -l autofs $prog
> +-		exit 0;
> ++		exit $?;
> + 		;;
> + 	usage)
> + 		usage_message
> diff --git a/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-libtirpc-build-option.patch b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-libtirpc-build-option.patch
> new file mode 100644
> index 0000000..8ad2afa
> --- /dev/null
> +++ b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/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@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/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-map-entry-duplicate-offset-detection.patch b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-map-entry-duplicate-offset-detection.patch
> new file mode 100644
> index 0000000..126d9a2
> --- /dev/null
> +++ b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-map-entry-duplicate-offset-detection.patch
> @@ -0,0 +1,37 @@
> +autofs-5.0.7 - fix map entry duplicate offset detection
> +
> +From: Ian Kent <raven@themaw.net>
> +
> +Recent changes broke the detection of duplicate offsets in map entries.
> +---
> +
> + CHANGELOG   |    1 +
> + lib/cache.c |    2 +-
> + 2 files changed, 2 insertions(+), 1 deletions(-)
> +
> +
> +diff --git a/CHANGELOG b/CHANGELOG
> +index 8f6bb3a..bd0dd82 100644
> +--- a/CHANGELOG
> ++++ b/CHANGELOG
> +@@ -15,6 +15,7 @@
> + - fix recursive mount deadlock.
> + - increase file map read buffer size.
> + - handle new location of systemd.
> ++- fix map entry duplicate offset detection.
> + 
> + 25/07/2012 autofs-5.0.7
> + =======================
> +diff --git a/lib/cache.c b/lib/cache.c
> +index 9179ad5..1e05a99 100644
> +--- a/lib/cache.c
> ++++ b/lib/cache.c
> +@@ -659,7 +659,7 @@ int cache_update_offset(struct mapent_cache *mc, const char *mkey, const char *k
> + 
> + 	me = cache_lookup_distinct(mc, key);
> + 	if (me && me->age == age) {
> +-		if (me->multi != owner)
> ++		if (me->multi == owner)
> + 			return CHE_DUPLICATE;
> + 	}
> + 
> diff --git a/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-nobind-man-page-description.patch b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-nobind-man-page-description.patch
> new file mode 100644
> index 0000000..41328a0
> --- /dev/null
> +++ b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-nobind-man-page-description.patch
> @@ -0,0 +1,46 @@
> +autofs-5.0.7 - fix nobind man page description
> +
> +From: Ian Kent <raven@themaw.net>
> +
> +Update auto.master(5) to better describe the behavior of the "nobind"
> +option when used with direct mounts maps.
> +---
> +
> + CHANGELOG            |    1 +
> + man/auto.master.5.in |   10 +++++++---
> + 2 files changed, 8 insertions(+), 3 deletions(-)
> +
> +
> +diff --git a/CHANGELOG b/CHANGELOG
> +index 16ac2a0..7eb7235 100644
> +--- a/CHANGELOG
> ++++ b/CHANGELOG
> +@@ -17,6 +17,7 @@
> + - handle new location of systemd.
> + - fix map entry duplicate offset detection.
> + - Allow nsswitch.conf to not contain "automount:" lines.
> ++- fix nobind man page description.
> + 
> + 25/07/2012 autofs-5.0.7
> + =======================
> +diff --git a/man/auto.master.5.in b/man/auto.master.5.in
> +index 21d7544..8007542 100644
> +--- a/man/auto.master.5.in
> ++++ b/man/auto.master.5.in
> +@@ -151,9 +151,13 @@ can't be mounted.
> + 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
> + map entry (so it effects all the map entries) or with individual map
> +-entries to prevent bind mounting of local NFS filesystems. Bind mounting
> +-of NFS file systems can also be prevented for specific map entrys by
> +-adding the "port=" mount option to the entries.
> ++entries to prevent bind mounting of local NFS filesystems. For direct
> ++mount maps the option is only effective if specified on the first direct
> ++map entry and is applied to all direct mount maps in the master map. It
> ++is ignored if given on subsequent direct map entries. It may be used
> ++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 "\-r, \-\-random-multimount-selection"
> + Enables the use of ramdom selection when choosing a host from a
> diff --git a/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-requires-in-spec-file.patch b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-requires-in-spec-file.patch
> new file mode 100644
> index 0000000..404c848
> --- /dev/null
> +++ b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/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@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/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-submount-offset-delete.patch b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-submount-offset-delete.patch
> new file mode 100644
> index 0000000..b38e214
> --- /dev/null
> +++ b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-submount-offset-delete.patch
> @@ -0,0 +1,45 @@
> +autofs-5.0.7 - fix submount offset delete
> +
> +From: Ian Kent <ikent@redhat.com>
> +
> +As part of the implementation to allow for limited update of
> +the internal hosts map by using a HUP signal some code that
> +deleted any offset entries from the cache on lookup was removed
> +as it appeared to not be needed.
> +
> +There is however a case where it is needed to avoid a duplicate
> +cache entry failure on lookup.
> +---
> +
> + CHANGELOG          |    1 +
> + daemon/automount.c |    4 ++--
> + 2 files changed, 3 insertions(+), 2 deletions(-)
> +
> +
> +diff --git a/CHANGELOG b/CHANGELOG
> +index 7eb7235..76c1f73 100644
> +--- a/CHANGELOG
> ++++ b/CHANGELOG
> +@@ -18,6 +18,7 @@
> + - fix map entry duplicate offset detection.
> + - Allow nsswitch.conf to not contain "automount:" lines.
> + - fix nobind man page description.
> ++- fix submount offset delete.
> + 
> + 25/07/2012 autofs-5.0.7
> + =======================
> +diff --git a/daemon/automount.c b/daemon/automount.c
> +index e56f9e1..4a3eb3d 100644
> +--- a/daemon/automount.c
> ++++ b/daemon/automount.c
> +@@ -544,8 +544,8 @@ int umount_multi(struct autofs_point *ap, const char *path, int incl)
> + 	 * If we are a submount we need to umount any offsets our
> + 	 * parent may have mounted over top of us.
> + 	 */
> +-	/*if (ap->submount)
> +-		left += umount_subtree_mounts(ap->parent, path, is_autofs_fs);*/
> ++	if (ap->submount)
> ++		left += umount_subtree_mounts(ap->parent, path, is_autofs_fs);
> + 
> + 	left += umount_subtree_mounts(ap, path, is_autofs_fs);
> + 
> diff --git a/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-systemd-unidir-in-spec-file.patch b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-systemd-unidir-in-spec-file.patch
> new file mode 100644
> index 0000000..d856faf
> --- /dev/null
> +++ b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/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@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/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-use-get_proximity-without-libtirpc.patch b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-use-get_proximity-without-libtirpc.patch
> new file mode 100644
> index 0000000..74ed8fa
> --- /dev/null
> +++ b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-use-get_proximity-without-libtirpc.patch
> @@ -0,0 +1,54 @@
> +autofs-5.0.7 - fix use get_proximity() without libtirpc
> +
> +From: Ian Kent <raven@themaw.net>
> +
> +If autofs is not using libtirpc and there are any configured IPv6
> +interfaces then get_proximity() will fail with PROXIMITY_UNSUPPORTED.
> +
> +In this case when checking interfaces the IPv6 interfaces need to be
> +ignored.
> +---
> +
> + CHANGELOG            |    1 +
> + modules/replicated.c |    8 ++------
> + 2 files changed, 3 insertions(+), 6 deletions(-)
> +
> +
> +diff --git a/CHANGELOG b/CHANGELOG
> +index 5bcb1af..460bd27 100644
> +--- a/CHANGELOG
> ++++ b/CHANGELOG
> +@@ -20,6 +20,7 @@
> + - fix nobind man page description.
> + - fix submount offset delete.
> + - fix init script status return.
> ++- fix use get_proximity() without libtirpc.
> + 
> + 25/07/2012 autofs-5.0.7
> + =======================
> +diff --git a/modules/replicated.c b/modules/replicated.c
> +index bd6003b..6b96320 100644
> +--- a/modules/replicated.c
> ++++ b/modules/replicated.c
> +@@ -184,9 +184,7 @@ static unsigned int get_proximity(struct sockaddr *host_addr)
> + 			break;
> + 
> + 		case AF_INET6:
> +-#ifndef WITH_LIBTIRPC
> +-			return PROXIMITY_UNSUPPORTED;
> +-#else
> ++#ifdef WITH_LIBTIRPC
> + 			if (host_addr->sa_family == AF_INET)
> + 				break;
> + 			if6_addr = (struct sockaddr_in6 *) this->ifa_addr;
> +@@ -251,9 +249,7 @@ static unsigned int get_proximity(struct sockaddr *host_addr)
> + 			break;
> + 
> + 		case AF_INET6:
> +-#ifndef WITH_LIBTIRPC
> +-			return PROXIMITY_UNSUPPORTED;
> +-#else
> ++#ifdef WITH_LIBTIRPC
> + 			if (host_addr->sa_family == AF_INET)
> + 				break;
> + 			if6_addr = (struct sockaddr_in6 *) this->ifa_addr;
> diff --git a/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-wildcard-multi-map-regression.patch b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-wildcard-multi-map-regression.patch
> new file mode 100644
> index 0000000..44e4a18
> --- /dev/null
> +++ b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/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@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/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-lib-defaults-use-WITH_LDAP-conditional-around-LDAP-types.patch b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-lib-defaults-use-WITH_LDAP-conditional-around-LDAP-types.patch
> new file mode 100644
> index 0000000..22e0418
> --- /dev/null
> +++ b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-lib-defaults-use-WITH_LDAP-conditional-around-LDAP-types.patch
> @@ -0,0 +1,448 @@
> +autofs-5.0.7 - lib/defaults.c: use WITH_LDAP conditional around LDAP types
> +
> +From: Chris Packham <chris.packham@alliedtelesis.co.nz>
> +
> +Wrap the inclusion of lookup_ldap.h and functions that use ldap_uri or
> +ldap_schema with the WITH_LDAP conditional. WITH_LDAP is set by the
> +configure step when LDAP support is not desired. This also allows
> +compilation on a system that doesn't have any LDAP libraries.
> +---
> +
> + CHANGELOG             |    1 
> + include/defaults.h    |   14 +-
> + include/lookup_ldap.h |    1 
> + lib/defaults.c        |  325 +++++++++++++++++++++++++------------------------
> + modules/lookup_ldap.c |    1 
> + 5 files changed, 175 insertions(+), 167 deletions(-)
> +
> +
> +diff --git a/CHANGELOG b/CHANGELOG
> +index ba1d65b..1130db6 100644
> +--- a/CHANGELOG
> ++++ b/CHANGELOG
> +@@ -24,6 +24,7 @@
> + - don't use dirent d_type to filter out files in scandir()
> + - don't schedule new alarms after readmap.
> + - use numeric protocol ids instead of protoent structs.
> ++- lib/defaults.c: use WITH_LDAP conditional around LDAP types.
> + 
> + 25/07/2012 autofs-5.0.7
> + =======================
> +diff --git a/include/defaults.h b/include/defaults.h
> +index cda2174..871e14b 100644
> +--- a/include/defaults.h
> ++++ b/include/defaults.h
> +@@ -44,8 +44,16 @@
> + 
> + #define DEFAULT_MAP_HASH_TABLE_SIZE	1024
> + 
> ++#ifdef WITH_LDAP
> + struct ldap_schema;
> + struct ldap_searchdn;
> ++void defaults_free_uris(struct list_head *);
> ++struct list_head *defaults_get_uris(void);
> ++struct ldap_schema *defaults_get_default_schema(void);
> ++void defaults_free_searchdns(struct ldap_searchdn *);
> ++struct ldap_searchdn *defaults_get_searchdns(void);
> ++struct ldap_schema *defaults_get_schema(void);
> ++#endif
> + 
> + unsigned int defaults_read_config(unsigned int);
> + const char *defaults_get_master_map(void);
> +@@ -57,12 +65,6 @@ unsigned int defaults_get_logging(void);
> + const char *defaults_get_ldap_server(void);
> + unsigned int defaults_get_ldap_timeout(void);
> + unsigned int defaults_get_ldap_network_timeout(void);
> +-struct list_head *defaults_get_uris(void);
> +-void defaults_free_uris(struct list_head *);
> +-struct ldap_schema *defaults_get_default_schema(void);
> +-struct ldap_schema *defaults_get_schema(void);
> +-struct ldap_searchdn *defaults_get_searchdns(void);
> +-void defaults_free_searchdns(struct ldap_searchdn *);
> + unsigned int defaults_get_mount_nfs_default_proto(void);
> + unsigned int defaults_get_append_options(void);
> + unsigned int defaults_get_mount_wait(void);
> +diff --git a/include/lookup_ldap.h b/include/lookup_ldap.h
> +index e441a61..9a4ce73 100644
> +--- a/include/lookup_ldap.h
> ++++ b/include/lookup_ldap.h
> +@@ -8,7 +8,6 @@
> + #include <openssl/evp.h>
> + #include <openssl/err.h>
> + #include <sasl/sasl.h>
> +-#include <libxml/tree.h>
> + #include <krb5.h>
> + #endif
> + 
> +diff --git a/lib/defaults.c b/lib/defaults.c
> +index 5ce71b7..ae1162f 100644
> +--- a/lib/defaults.c
> ++++ b/lib/defaults.c
> +@@ -17,9 +17,12 @@
> + #include <ctype.h>
> + #include <string.h>
> + 
> ++#include "config.h"
> + #include "list.h"
> + #include "defaults.h"
> ++#ifdef WITH_LDAP
> + #include "lookup_ldap.h"
> ++#endif
> + #include "log.h"
> + #include "automount.h"
> + 
> +@@ -197,6 +200,7 @@ static int parse_line(char *line, char **res, char **value)
> + 	return 1;
> + }
> + 
> ++#ifdef WITH_LDAP
> + void defaults_free_uris(struct list_head *list)
> + {
> + 	struct list_head *next;
> +@@ -290,166 +294,6 @@ struct list_head *defaults_get_uris(void)
> + 	return list;
> + }
> + 
> +-/*
> +- * Read config env variables and check they have been set.
> +- *
> +- * This simple minded routine assumes the config file
> +- * is valid bourne shell script without spaces around "="
> +- * and that it has valid values.
> +- */
> +-unsigned int defaults_read_config(unsigned int to_syslog)
> +-{
> +-	FILE *f;
> +-	char buf[MAX_LINE_LEN];
> +-	char *res;
> +-
> +-	f = open_fopen_r(DEFAULTS_CONFIG_FILE);
> +-	if (!f)
> +-		return 0;
> +-
> +-	while ((res = fgets(buf, MAX_LINE_LEN, f))) {
> +-		char *key, *value;
> +-
> +-		if (!parse_line(res, &key, &value))
> +-			continue;
> +-
> +-		if (check_set_config_value(key, ENV_NAME_MASTER_MAP, value, to_syslog) ||
> +-		    check_set_config_value(key, ENV_NAME_TIMEOUT, value, to_syslog) ||
> +-		    check_set_config_value(key, ENV_NAME_NEGATIVE_TIMEOUT, value, to_syslog) ||
> +-		    check_set_config_value(key, ENV_NAME_BROWSE_MODE, value, to_syslog) ||
> +-		    check_set_config_value(key, ENV_NAME_LOGGING, value, to_syslog) ||
> +-		    check_set_config_value(key, ENV_LDAP_TIMEOUT, value, to_syslog) ||
> +-		    check_set_config_value(key, ENV_LDAP_NETWORK_TIMEOUT, value, to_syslog) ||
> +-		    check_set_config_value(key, ENV_NAME_MAP_OBJ_CLASS, value, to_syslog) ||
> +-		    check_set_config_value(key, ENV_NAME_ENTRY_OBJ_CLASS, value, to_syslog) ||
> +-		    check_set_config_value(key, ENV_NAME_MAP_ATTR, value, to_syslog) ||
> +-		    check_set_config_value(key, ENV_NAME_ENTRY_ATTR, value, to_syslog) ||
> +-		    check_set_config_value(key, ENV_NAME_VALUE_ATTR, value, to_syslog) ||
> +-		    check_set_config_value(key, ENV_APPEND_OPTIONS, value, to_syslog) ||
> +-		    check_set_config_value(key, ENV_MOUNT_WAIT, value, to_syslog) ||
> +-		    check_set_config_value(key, ENV_UMOUNT_WAIT, value, to_syslog) ||
> +-		    check_set_config_value(key, ENV_AUTH_CONF_FILE, value, to_syslog) ||
> +-		    check_set_config_value(key, ENV_MAP_HASH_TABLE_SIZE, value, to_syslog) ||
> +-		    check_set_config_value(key, ENV_MOUNT_NFS_DEFAULT_PROTOCOL, value, to_syslog))
> +-			;
> +-	}
> +-
> +-	if (!feof(f) || ferror(f)) {
> +-		if (!to_syslog) {
> +-			fprintf(stderr,
> +-				"fgets returned error %d while reading %s\n",
> +-				ferror(f), DEFAULTS_CONFIG_FILE);
> +-		} else {
> +-			logmsg("fgets returned error %d while reading %s",
> +-			      ferror(f), DEFAULTS_CONFIG_FILE);
> +-		}
> +-		fclose(f);
> +-		return 0;
> +-	}
> +-
> +-	fclose(f);
> +-	return 1;
> +-}
> +-
> +-const char *defaults_get_master_map(void)
> +-{
> +-	char *master;
> +-
> +-	master = get_env_string(ENV_NAME_MASTER_MAP);
> +-	if (!master)
> +-		return strdup(default_master_map_name);
> +-
> +-	return (const char *) master;
> +-}
> +-
> +-int defaults_master_set(void)
> +-{
> +-	char *val = getenv(ENV_NAME_MASTER_MAP);
> +-	if (!val)
> +-		return 0;
> +-
> +-	return 1;
> +-}
> +-
> +-unsigned int defaults_get_timeout(void)
> +-{
> +-	long timeout;
> +-
> +-	timeout = get_env_number(ENV_NAME_TIMEOUT);
> +-	if (timeout < 0)
> +-		timeout = DEFAULT_TIMEOUT;
> +-
> +-	return (unsigned int) timeout;
> +-}
> +-
> +-unsigned int defaults_get_negative_timeout(void)
> +-{
> +-	long n_timeout;
> +-
> +-	n_timeout = get_env_number(ENV_NAME_NEGATIVE_TIMEOUT);
> +-	if (n_timeout <= 0)
> +-		n_timeout = DEFAULT_NEGATIVE_TIMEOUT;
> +-
> +-	return (unsigned int) n_timeout;
> +-}
> +-
> +-unsigned int defaults_get_browse_mode(void)
> +-{
> +-	int res;
> +-
> +-	res = get_env_yesno(ENV_NAME_BROWSE_MODE);
> +-	if (res < 0)
> +-		res = DEFAULT_BROWSE_MODE;
> +-
> +-	return res;
> +-}
> +-
> +-unsigned int defaults_get_logging(void)
> +-{
> +-	char *res;
> +-	unsigned int logging = DEFAULT_LOGGING;
> +-
> +-	res = get_env_string(ENV_NAME_LOGGING);
> +-	if (!res)
> +-		return logging;
> +-
> +-	if (!strcasecmp(res, "none"))
> +-		logging = DEFAULT_LOGGING;
> +-	else {
> +-		if (!strcasecmp(res, "verbose"))
> +-			logging |= LOGOPT_VERBOSE;
> +-
> +-		if (!strcasecmp(res, "debug"))
> +-			logging |= LOGOPT_DEBUG;
> +-	}
> +-
> +-	free(res);
> +-
> +-	return logging;
> +-}
> +-
> +-unsigned int defaults_get_ldap_timeout(void)
> +-{
> +-	int res;
> +-
> +-	res = get_env_number(ENV_LDAP_TIMEOUT);
> +-	if (res < 0)
> +-		res = DEFAULT_LDAP_TIMEOUT;
> +-
> +-	return res;
> +-}
> +-
> +-unsigned int defaults_get_ldap_network_timeout(void)
> +-{
> +-	int res;
> +-
> +-	res = get_env_number(ENV_LDAP_NETWORK_TIMEOUT);
> +-	if (res < 0)
> +-		res = DEFAULT_LDAP_NETWORK_TIMEOUT;
> +-
> +-	return res;
> +-}
> +-
> + struct ldap_schema *defaults_get_default_schema(void)
> + {
> + 	struct ldap_schema *schema;
> +@@ -645,6 +489,167 @@ struct ldap_schema *defaults_get_schema(void)
> + 
> + 	return schema;
> + }
> ++#endif
> ++
> ++/*
> ++ * Read config env variables and check they have been set.
> ++ *
> ++ * This simple minded routine assumes the config file
> ++ * is valid bourne shell script without spaces around "="
> ++ * and that it has valid values.
> ++ */
> ++unsigned int defaults_read_config(unsigned int to_syslog)
> ++{
> ++	FILE *f;
> ++	char buf[MAX_LINE_LEN];
> ++	char *res;
> ++
> ++	f = open_fopen_r(DEFAULTS_CONFIG_FILE);
> ++	if (!f)
> ++		return 0;
> ++
> ++	while ((res = fgets(buf, MAX_LINE_LEN, f))) {
> ++		char *key, *value;
> ++
> ++		if (!parse_line(res, &key, &value))
> ++			continue;
> ++
> ++		if (check_set_config_value(key, ENV_NAME_MASTER_MAP, value, to_syslog) ||
> ++		    check_set_config_value(key, ENV_NAME_TIMEOUT, value, to_syslog) ||
> ++		    check_set_config_value(key, ENV_NAME_NEGATIVE_TIMEOUT, value, to_syslog) ||
> ++		    check_set_config_value(key, ENV_NAME_BROWSE_MODE, value, to_syslog) ||
> ++		    check_set_config_value(key, ENV_NAME_LOGGING, value, to_syslog) ||
> ++		    check_set_config_value(key, ENV_LDAP_TIMEOUT, value, to_syslog) ||
> ++		    check_set_config_value(key, ENV_LDAP_NETWORK_TIMEOUT, value, to_syslog) ||
> ++		    check_set_config_value(key, ENV_NAME_MAP_OBJ_CLASS, value, to_syslog) ||
> ++		    check_set_config_value(key, ENV_NAME_ENTRY_OBJ_CLASS, value, to_syslog) ||
> ++		    check_set_config_value(key, ENV_NAME_MAP_ATTR, value, to_syslog) ||
> ++		    check_set_config_value(key, ENV_NAME_ENTRY_ATTR, value, to_syslog) ||
> ++		    check_set_config_value(key, ENV_NAME_VALUE_ATTR, value, to_syslog) ||
> ++		    check_set_config_value(key, ENV_APPEND_OPTIONS, value, to_syslog) ||
> ++		    check_set_config_value(key, ENV_MOUNT_WAIT, value, to_syslog) ||
> ++		    check_set_config_value(key, ENV_UMOUNT_WAIT, value, to_syslog) ||
> ++		    check_set_config_value(key, ENV_AUTH_CONF_FILE, value, to_syslog) ||
> ++		    check_set_config_value(key, ENV_MAP_HASH_TABLE_SIZE, value, to_syslog) ||
> ++		    check_set_config_value(key, ENV_MOUNT_NFS_DEFAULT_PROTOCOL, value, to_syslog))
> ++			;
> ++	}
> ++
> ++	if (!feof(f) || ferror(f)) {
> ++		if (!to_syslog) {
> ++			fprintf(stderr,
> ++				"fgets returned error %d while reading %s\n",
> ++				ferror(f), DEFAULTS_CONFIG_FILE);
> ++		} else {
> ++			logmsg("fgets returned error %d while reading %s",
> ++			      ferror(f), DEFAULTS_CONFIG_FILE);
> ++		}
> ++		fclose(f);
> ++		return 0;
> ++	}
> ++
> ++	fclose(f);
> ++	return 1;
> ++}
> ++
> ++const char *defaults_get_master_map(void)
> ++{
> ++	char *master;
> ++
> ++	master = get_env_string(ENV_NAME_MASTER_MAP);
> ++	if (!master)
> ++		return strdup(default_master_map_name);
> ++
> ++	return (const char *) master;
> ++}
> ++
> ++int defaults_master_set(void)
> ++{
> ++	char *val = getenv(ENV_NAME_MASTER_MAP);
> ++	if (!val)
> ++		return 0;
> ++
> ++	return 1;
> ++}
> ++
> ++unsigned int defaults_get_timeout(void)
> ++{
> ++	long timeout;
> ++
> ++	timeout = get_env_number(ENV_NAME_TIMEOUT);
> ++	if (timeout < 0)
> ++		timeout = DEFAULT_TIMEOUT;
> ++
> ++	return (unsigned int) timeout;
> ++}
> ++
> ++unsigned int defaults_get_negative_timeout(void)
> ++{
> ++	long n_timeout;
> ++
> ++	n_timeout = get_env_number(ENV_NAME_NEGATIVE_TIMEOUT);
> ++	if (n_timeout <= 0)
> ++		n_timeout = DEFAULT_NEGATIVE_TIMEOUT;
> ++
> ++	return (unsigned int) n_timeout;
> ++}
> ++
> ++unsigned int defaults_get_browse_mode(void)
> ++{
> ++	int res;
> ++
> ++	res = get_env_yesno(ENV_NAME_BROWSE_MODE);
> ++	if (res < 0)
> ++		res = DEFAULT_BROWSE_MODE;
> ++
> ++	return res;
> ++}
> ++
> ++unsigned int defaults_get_logging(void)
> ++{
> ++	char *res;
> ++	unsigned int logging = DEFAULT_LOGGING;
> ++
> ++	res = get_env_string(ENV_NAME_LOGGING);
> ++	if (!res)
> ++		return logging;
> ++
> ++	if (!strcasecmp(res, "none"))
> ++		logging = DEFAULT_LOGGING;
> ++	else {
> ++		if (!strcasecmp(res, "verbose"))
> ++			logging |= LOGOPT_VERBOSE;
> ++
> ++		if (!strcasecmp(res, "debug"))
> ++			logging |= LOGOPT_DEBUG;
> ++	}
> ++
> ++	free(res);
> ++
> ++	return logging;
> ++}
> ++
> ++unsigned int defaults_get_ldap_timeout(void)
> ++{
> ++	int res;
> ++
> ++	res = get_env_number(ENV_LDAP_TIMEOUT);
> ++	if (res < 0)
> ++		res = DEFAULT_LDAP_TIMEOUT;
> ++
> ++	return res;
> ++}
> ++
> ++unsigned int defaults_get_ldap_network_timeout(void)
> ++{
> ++	int res;
> ++
> ++	res = get_env_number(ENV_LDAP_NETWORK_TIMEOUT);
> ++	if (res < 0)
> ++		res = DEFAULT_LDAP_NETWORK_TIMEOUT;
> ++
> ++	return res;
> ++}
> + 
> + unsigned int defaults_get_mount_nfs_default_proto(void)
> + {
> +diff --git a/modules/lookup_ldap.c b/modules/lookup_ldap.c
> +index 3bc4dc5..431e50d 100644
> +--- a/modules/lookup_ldap.c
> ++++ b/modules/lookup_ldap.c
> +@@ -28,6 +28,7 @@
> + #include <arpa/nameser.h>
> + #include <resolv.h>
> + #include <lber.h>
> ++#include <libxml/tree.h>
> + 
> + #define MODULE_LOOKUP
> + #include "automount.h"
> diff --git a/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-make-yellow-pages-support-optional.patch b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-make-yellow-pages-support-optional.patch
> index 9504d8e..4199690 100644
> --- a/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-make-yellow-pages-support-optional.patch
> +++ b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-make-yellow-pages-support-optional.patch
> @@ -1,5 +1,3 @@
> -Upstream-Status: Backport
> -
> autofs-5.0.7 - make yellow pages support optional
> 
> From: Chris Packham <chris.packham@alliedtelesis.co.nz>
> @@ -8,6 +6,7 @@ If rpcsvc/ypclnt.h is not available don't compile in Yellow Pages
> support.
> ---
> 
> + CHANGELOG           |    1 +
>  Makefile.conf.in    |    3 +++
>  configure           |   16 ++++++++++++++++
>  configure.in        |    9 +++++++++
> @@ -17,6 +16,18 @@ support.
>  7 files changed, 39 insertions(+), 3 deletions(-)
> 
> 
> +diff --git a/CHANGELOG b/CHANGELOG
> +index 1130db6..ed17163 100644
> +--- a/CHANGELOG
> ++++ b/CHANGELOG
> +@@ -25,6 +25,7 @@
> + - don't schedule new alarms after readmap.
> + - use numeric protocol ids instead of protoent structs.
> + - lib/defaults.c: use WITH_LDAP conditional around LDAP types.
> ++- make yellow pages support optional.
> + 
> + 25/07/2012 autofs-5.0.7
> + =======================
> diff --git a/Makefile.conf.in b/Makefile.conf.in
> index 802318b..3766d45 100644
> --- a/Makefile.conf.in
> diff --git a/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-modules-replicated-use-sin6.addr-s6_addr32.patch b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-modules-replicated-use-sin6.addr-s6_addr32.patch
> new file mode 100644
> index 0000000..4516bc5
> --- /dev/null
> +++ b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-modules-replicated-use-sin6.addr-s6_addr32.patch
> @@ -0,0 +1,39 @@
> +autofs-5.0.7 -  modules/replicated.c: use sin6_addr.s6_addr32
> +
> +From: Chris Packham <chris.packham@alliedtelesis.co.nz>
> +
> +The exported in6.h kernel header provides a convenience macro s6_addr32
> +for accessing the 32bit words of an ipv6 address. Use this instead of
> +__in6_u.__u6_addr32.
> +---
> +
> + CHANGELOG            |    1 +
> + modules/replicated.c |    2 +-
> + 2 files changed, 2 insertions(+), 1 deletions(-)
> +
> +
> +diff --git a/CHANGELOG b/CHANGELOG
> +index ed17163..4eaa9f9 100644
> +--- a/CHANGELOG
> ++++ b/CHANGELOG
> +@@ -26,6 +26,7 @@
> + - use numeric protocol ids instead of protoent structs.
> + - lib/defaults.c: use WITH_LDAP conditional around LDAP types.
> + - make yellow pages support optional.
> ++- modules/replicated.c: use sin6_addr.s6_addr32.
> + 
> + 25/07/2012 autofs-5.0.7
> + =======================
> +diff --git a/modules/replicated.c b/modules/replicated.c
> +index dbd5513..26f64b8 100644
> +--- a/modules/replicated.c
> ++++ b/modules/replicated.c
> +@@ -1146,7 +1146,7 @@ try_name:
> + 				rr4++;
> + 		} else if (this->ai_family == AF_INET6) {
> + 			struct sockaddr_in6 *addr = (struct sockaddr_in6 *) this->ai_addr;
> +-			if (!IN6_IS_ADDR_LOOPBACK(addr->sin6_addr.__in6_u.__u6_addr32))
> ++			if (!IN6_IS_ADDR_LOOPBACK(addr->sin6_addr.s6_addr32))
> + 				rr6++;
> + 		}
> + 		this = this->ai_next;
> diff --git a/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-update-kernel-include-files.patch b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-update-kernel-include-files.patch
> new file mode 100644
> index 0000000..3b6bb92
> --- /dev/null
> +++ b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/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@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/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-use-numeric-protocol-ids-instead-of-protoent-structs.patch b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-use-numeric-protocol-ids-instead-of-protoent-structs.patch
> new file mode 100644
> index 0000000..113b0a0
> --- /dev/null
> +++ b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-use-numeric-protocol-ids-instead-of-protoent-structs.patch
> @@ -0,0 +1,471 @@
> +autofs-5.0.7 - use numeric protocol ids instead of protoent structs
> +
> +From: Leonardo Chiquitto <leonardo.lists@gmail.com>
> +
> +The function getprotobyname() is not reentrant, so we can't call
> +it simultaneously from multiple threads. Instead of switching to
> +the reentrant version which adds more complexity to the code,
> +lets use numeric protocol IDs instead of protoent structures.
> +---
> +
> + CHANGELOG            |    1 +
> + include/rpc_subs.h   |    4 +--
> + lib/rpc_subs.c       |   80 ++++++++++++++++++--------------------------------
> + modules/replicated.c |   42 +++++++++++---------------
> + 4 files changed, 50 insertions(+), 77 deletions(-)
> +
> +
> +diff --git a/CHANGELOG b/CHANGELOG
> +index 4cf5621..ba1d65b 100644
> +--- a/CHANGELOG
> ++++ b/CHANGELOG
> +@@ -23,6 +23,7 @@
> + - fix use get_proximity() without libtirpc.
> + - don't use dirent d_type to filter out files in scandir()
> + - don't schedule new alarms after readmap.
> ++- use numeric protocol ids instead of protoent structs.
> + 
> + 25/07/2012 autofs-5.0.7
> + =======================
> +diff --git a/include/rpc_subs.h b/include/rpc_subs.h
> +index ca474d9..b6d59f9 100644
> +--- a/include/rpc_subs.h
> ++++ b/include/rpc_subs.h
> +@@ -54,7 +54,7 @@ struct conn_info {
> + 	unsigned short port;
> + 	unsigned long program;
> + 	unsigned long version;
> +-	struct protoent *proto;
> ++	int proto;
> + 	unsigned int send_sz;
> + 	unsigned int recv_sz;
> + 	struct timeval timeout;
> +@@ -66,7 +66,7 @@ int rpc_udp_getclient(struct conn_info *, unsigned int, unsigned int);
> + void rpc_destroy_udp_client(struct conn_info *);
> + int rpc_tcp_getclient(struct conn_info *, unsigned int, unsigned int);
> + void rpc_destroy_tcp_client(struct conn_info *);
> +-int rpc_portmap_getclient(struct conn_info *, const char *, struct sockaddr *, size_t, const char *, unsigned int);
> ++int rpc_portmap_getclient(struct conn_info *, const char *, struct sockaddr *, size_t, int, unsigned int);
> + int rpc_portmap_getport(struct conn_info *, struct pmap *, unsigned short *);
> + int rpc_ping_proto(struct conn_info *);
> + int rpc_ping(const char *, long, long, unsigned int);
> +diff --git a/lib/rpc_subs.c b/lib/rpc_subs.c
> +index d33a3c4..ad1d557 100644
> +--- a/lib/rpc_subs.c
> ++++ b/lib/rpc_subs.c
> +@@ -170,7 +170,7 @@ static int rpc_do_create_client(struct sockaddr *addr, struct conn_info *info, i
> + 
> + 	*client = NULL;
> + 
> +-	proto = info->proto->p_proto;
> ++	proto = info->proto;
> + 	if (proto == IPPROTO_UDP)
> + 		type = SOCK_DGRAM;
> + 	else
> +@@ -201,7 +201,7 @@ static int rpc_do_create_client(struct sockaddr *addr, struct conn_info *info, i
> + 	in4_raddr = (struct sockaddr_in *) addr;
> + 	in4_raddr->sin_port = htons(info->port);
> + 
> +-	switch (info->proto->p_proto) {
> ++	switch (info->proto) {
> + 	case IPPROTO_UDP:
> + 		clnt = clntudp_bufcreate(in4_raddr,
> + 					 info->program, info->version,
> +@@ -241,7 +241,7 @@ static int rpc_do_create_client(struct sockaddr *addr, struct conn_info *info, i
> + 
> + 	*client = NULL;
> + 
> +-	proto = info->proto->p_proto;
> ++	proto = info->proto;
> + 	if (proto == IPPROTO_UDP)
> + 		type = SOCK_DGRAM;
> + 	else
> +@@ -292,11 +292,11 @@ static int rpc_do_create_client(struct sockaddr *addr, struct conn_info *info, i
> + 	nb_addr.maxlen = nb_addr.len = slen;
> + 	nb_addr.buf = addr;
> + 
> +-	if (info->proto->p_proto == IPPROTO_UDP)
> ++	if (info->proto == IPPROTO_UDP)
> + 		clnt = clnt_dg_create(*fd, &nb_addr,
> + 				      info->program, info->version,
> + 				      info->send_sz, info->recv_sz);
> +-	else if (info->proto->p_proto == IPPROTO_TCP) {
> ++	else if (info->proto == IPPROTO_TCP) {
> + 		ret = connect_nb(*fd, addr, slen, &info->timeout);
> + 		if (ret < 0)
> + 			return ret;
> +@@ -355,7 +355,7 @@ static int create_client(struct conn_info *info, CLIENT **client)
> + 	memset(&hints, 0, sizeof(hints));
> + 	hints.ai_flags = AI_ADDRCONFIG;
> + 	hints.ai_family = AF_UNSPEC;
> +-	if (info->proto->p_proto == IPPROTO_UDP)
> ++	if (info->proto == IPPROTO_UDP)
> + 		hints.ai_socktype = SOCK_DGRAM;
> + 	else
> + 		hints.ai_socktype = SOCK_STREAM;
> +@@ -370,7 +370,7 @@ static int create_client(struct conn_info *info, CLIENT **client)
> + 
> + 	haddr = ai;
> + 	while (haddr) {
> +-		if (haddr->ai_protocol != info->proto->p_proto) {
> ++		if (haddr->ai_protocol != info->proto) {
> + 			haddr = haddr->ai_next;
> + 			continue;
> + 		}
> +@@ -417,16 +417,11 @@ out_close:
> + int rpc_udp_getclient(struct conn_info *info,
> + 		      unsigned int program, unsigned int version)
> + {
> +-	struct protoent *pe_proto;
> + 	CLIENT *client;
> + 	int ret;
> + 
> + 	if (!info->client) {
> +-		pe_proto = getprotobyname("udp");
> +-		if (!pe_proto)
> +-			return -ENOENT;
> +-
> +-		info->proto = pe_proto;
> ++		info->proto = IPPROTO_UDP;
> + 		info->timeout.tv_sec = RPC_TOUT_UDP;
> + 		info->timeout.tv_usec = 0;
> + 		info->send_sz = UDPMSGSIZE;
> +@@ -458,16 +453,11 @@ void rpc_destroy_udp_client(struct conn_info *info)
> + int rpc_tcp_getclient(struct conn_info *info,
> + 		      unsigned int program, unsigned int version)
> + {
> +-	struct protoent *pe_proto;
> + 	CLIENT *client;
> + 	int ret;
> + 
> + 	if (!info->client) {
> +-		pe_proto = getprotobyname("tcp");
> +-		if (!pe_proto)
> +-			return -ENOENT;
> +-
> +-		info->proto = pe_proto;
> ++		info->proto = IPPROTO_TCP;
> + 		info->timeout.tv_sec = RPC_TOUT_TCP;
> + 		info->timeout.tv_usec = 0;
> + 		info->send_sz = 0;
> +@@ -513,23 +503,18 @@ void rpc_destroy_tcp_client(struct conn_info *info)
> + 
> + int rpc_portmap_getclient(struct conn_info *info,
> + 			  const char *host, struct sockaddr *addr, size_t addr_len,
> +-			  const char *proto, unsigned int option)
> ++			  int proto, unsigned int option)
> + {
> +-	struct protoent *pe_proto;
> + 	CLIENT *client;
> + 	int ret;
> + 
> +-	pe_proto = getprotobyname(proto);
> +-	if (!pe_proto)
> +-		return -ENOENT;
> +-
> + 	info->host = host;
> + 	info->addr = addr;
> + 	info->addr_len = addr_len;
> + 	info->program = PMAPPROG;
> + 	info->port = PMAPPORT;
> + 	info->version = PMAPVERS;
> +-	info->proto = pe_proto;
> ++	info->proto = proto;
> + 	info->send_sz = RPCSMALLMSGSIZE;
> + 	info->recv_sz = RPCSMALLMSGSIZE;
> + 	info->timeout.tv_sec = PMAP_TOUT_UDP;
> +@@ -537,7 +522,7 @@ int rpc_portmap_getclient(struct conn_info *info,
> + 	info->close_option = option;
> + 	info->client = NULL;
> + 
> +-	if (pe_proto->p_proto == IPPROTO_TCP)
> ++	if (info->proto == IPPROTO_TCP)
> + 		info->timeout.tv_sec = PMAP_TOUT_TCP;
> + 
> + 	ret = create_client(info, &client);
> +@@ -555,7 +540,7 @@ int rpc_portmap_getport(struct conn_info *info,
> + 	struct conn_info pmap_info;
> + 	CLIENT *client;
> + 	enum clnt_stat status;
> +-	int proto = info->proto->p_proto;
> ++	int proto = info->proto;
> + 	int ret;
> + 
> + 	memset(&pmap_info, 0, sizeof(struct conn_info));
> +@@ -633,13 +618,13 @@ int rpc_ping_proto(struct conn_info *info)
> + {
> + 	CLIENT *client;
> + 	enum clnt_stat status;
> +-	int proto = info->proto->p_proto;
> ++	int proto = info->proto;
> + 	int ret;
> + 
> + 	if (info->client)
> + 		client = info->client;
> + 	else {
> +-		if (info->proto->p_proto == IPPROTO_UDP) {
> ++		if (info->proto == IPPROTO_UDP) {
> + 			info->send_sz = UDPMSGSIZE;
> + 			info->recv_sz = UDPMSGSIZE;
> + 		}
> +@@ -688,7 +673,7 @@ int rpc_ping_proto(struct conn_info *info)
> + 
> + static unsigned int __rpc_ping(const char *host,
> + 				unsigned long version,
> +-				char *proto,
> ++				int proto,
> + 				long seconds, long micros,
> + 				unsigned int option)
> + {
> +@@ -696,6 +681,7 @@ static unsigned int __rpc_ping(const char *host,
> + 	struct conn_info info;
> + 	struct pmap parms;
> + 
> ++	info.proto = proto;
> + 	info.host = host;
> + 	info.addr = NULL;
> + 	info.addr_len = 0;
> +@@ -710,13 +696,9 @@ static unsigned int __rpc_ping(const char *host,
> + 
> + 	status = RPC_PING_FAIL;
> + 
> +-	info.proto = getprotobyname(proto);
> +-	if (!info.proto)
> +-		return status;
> +-
> + 	parms.pm_prog = NFS_PROGRAM;
> + 	parms.pm_vers = version;
> +-	parms.pm_prot = info.proto->p_proto;
> ++	parms.pm_prot = info.proto;
> + 	parms.pm_port = 0;
> + 
> + 	status = rpc_portmap_getport(&info, &parms, &info.port);
> +@@ -734,19 +716,19 @@ int rpc_ping(const char *host, long seconds, long micros, unsigned int option)
> + 	unsigned long vers2 = NFS2_VERSION;
> + 	unsigned int status;
> + 
> +-	status = __rpc_ping(host, vers2, "udp", seconds, micros, option);
> ++	status = __rpc_ping(host, vers2, IPPROTO_UDP, seconds, micros, option);
> + 	if (status > 0)
> + 		return RPC_PING_V2 | RPC_PING_UDP;
> + 
> +-	status = __rpc_ping(host, vers3, "udp", seconds, micros, option);
> ++	status = __rpc_ping(host, vers3, IPPROTO_UDP, seconds, micros, option);
> + 	if (status > 0)
> + 		return RPC_PING_V3 | RPC_PING_UDP;
> + 
> +-	status = __rpc_ping(host, vers2, "tcp", seconds, micros, option);
> ++	status = __rpc_ping(host, vers2, IPPROTO_TCP, seconds, micros, option);
> + 	if (status > 0)
> + 		return RPC_PING_V2 | RPC_PING_TCP;
> + 
> +-	status = __rpc_ping(host, vers3, "tcp", seconds, micros, option);
> ++	status = __rpc_ping(host, vers3, IPPROTO_TCP, seconds, micros, option);
> + 	if (status > 0)
> + 		return RPC_PING_V3 | RPC_PING_TCP;
> + 
> +@@ -769,7 +751,7 @@ int rpc_time(const char *host,
> + 	double taken;
> + 	struct timeval start, end;
> + 	struct timezone tz;
> +-	char *proto = (ping_proto & RPC_PING_UDP) ? "udp" : "tcp";
> ++	int proto = (ping_proto & RPC_PING_UDP) ? IPPROTO_UDP : IPPROTO_TCP;
> + 	unsigned long vers = ping_vers;
> + 
> + 	gettimeofday(&start, &tz);
> +@@ -791,12 +773,12 @@ static int rpc_get_exports_proto(struct conn_info *info, exports *exp)
> + {
> + 	CLIENT *client;
> + 	enum clnt_stat status;
> +-	int proto = info->proto->p_proto;
> ++	int proto = info->proto;
> + 	unsigned int option = info->close_option;
> + 	int vers_entry;
> + 	int ret;
> + 
> +-	if (info->proto->p_proto == IPPROTO_UDP) {
> ++	if (info->proto == IPPROTO_UDP) {
> + 		info->send_sz = UDPMSGSIZE;
> + 		info->recv_sz = UDPMSGSIZE;
> + 	}
> +@@ -903,11 +885,9 @@ exports rpc_get_exports(const char *host, long seconds, long micros, unsigned in
> + 	parms.pm_port = 0;
> + 
> + 	/* Try UDP first */
> +-	info.proto = getprotobyname("udp");
> +-	if (!info.proto)
> +-		goto try_tcp;
> ++	info.proto = IPPROTO_UDP;
> + 
> +-	parms.pm_prot = info.proto->p_proto;
> ++	parms.pm_prot = info.proto;
> + 
> + 	status = rpc_portmap_getport(&info, &parms, &info.port);
> + 	if (status < 0)
> +@@ -920,11 +900,9 @@ exports rpc_get_exports(const char *host, long seconds, long micros, unsigned in
> + 		return exportlist;
> + 
> + try_tcp:
> +-	info.proto = getprotobyname("tcp");
> +-	if (!info.proto)
> +-		return NULL;
> ++	info.proto = IPPROTO_TCP;
> + 
> +-	parms.pm_prot = info.proto->p_proto;
> ++	parms.pm_prot = info.proto;
> + 
> + 	status = rpc_portmap_getport(&info, &parms, &info.port);
> + 	if (status < 0)
> +diff --git a/modules/replicated.c b/modules/replicated.c
> +index 6b96320..dbd5513 100644
> +--- a/modules/replicated.c
> ++++ b/modules/replicated.c
> +@@ -419,7 +419,7 @@ void free_host_list(struct host **list)
> + 
> + static unsigned int get_nfs_info(unsigned logopt, struct host *host,
> + 			 struct conn_info *pm_info, struct conn_info *rpc_info,
> +-			 const char *proto, unsigned int version, int port)
> ++			 int proto, unsigned int version, int port)
> + {
> + 	unsigned int random_selection = host->options & MOUNT_FLAG_RANDOM_SELECT;
> + 	unsigned int use_weight_only = host->options & MOUNT_FLAG_USE_WEIGHT_ONLY;
> +@@ -433,22 +433,18 @@ static unsigned int get_nfs_info(unsigned logopt, struct host *host,
> + 	int status, count = 0;
> + 
> + 	if (host->addr)
> +-		debug(logopt, "called with host %s(%s) proto %s version 0x%x",
> ++		debug(logopt, "called with host %s(%s) proto %d version 0x%x",
> + 		      host->name, get_addr_string(host->addr, buf, len),
> + 		      proto, version);
> + 	else
> + 		debug(logopt,
> +-		      "called for host %s proto %s version 0x%x",
> ++		      "called for host %s proto %d version 0x%x",
> + 		      host->name, proto, version);
> + 
> +-	rpc_info->proto = getprotobyname(proto);
> +-	if (!rpc_info->proto)
> +-		return 0;
> +-
> ++	rpc_info->proto = proto;
> + 	memset(&parms, 0, sizeof(struct pmap));
> +-
> + 	parms.pm_prog = NFS_PROGRAM;
> +-	parms.pm_prot = rpc_info->proto->p_proto;
> ++	parms.pm_prot = proto;
> + 
> + 	if (!(version & NFS4_REQUESTED))
> + 		goto v3_ver;
> +@@ -479,7 +475,7 @@ static unsigned int get_nfs_info(unsigned logopt, struct host *host,
> + 		}
> + 	}
> + 
> +-	if (rpc_info->proto->p_proto == IPPROTO_UDP)
> ++	if (rpc_info->proto == IPPROTO_UDP)
> + 		status = rpc_udp_getclient(rpc_info, NFS_PROGRAM, NFS4_VERSION);
> + 	else
> + 		status = rpc_tcp_getclient(rpc_info, NFS_PROGRAM, NFS4_VERSION);
> +@@ -540,7 +536,7 @@ v3_ver:
> + 			goto v2_ver;
> + 	}
> + 
> +-	if (rpc_info->proto->p_proto == IPPROTO_UDP)
> ++	if (rpc_info->proto == IPPROTO_UDP)
> + 		status = rpc_udp_getclient(rpc_info, NFS_PROGRAM, NFS3_VERSION);
> + 	else
> + 		status = rpc_tcp_getclient(rpc_info, NFS_PROGRAM, NFS3_VERSION);
> +@@ -587,7 +583,7 @@ v2_ver:
> + 			goto done_ver;
> + 	}
> + 
> +-	if (rpc_info->proto->p_proto == IPPROTO_UDP)
> ++	if (rpc_info->proto == IPPROTO_UDP)
> + 		status = rpc_udp_getclient(rpc_info, NFS_PROGRAM, NFS2_VERSION);
> + 	else
> + 		status = rpc_tcp_getclient(rpc_info, NFS_PROGRAM, NFS2_VERSION);
> +@@ -618,7 +614,7 @@ v2_ver:
> + 	}
> + 
> + done_ver:
> +-	if (rpc_info->proto->p_proto == IPPROTO_UDP) {
> ++	if (rpc_info->proto == IPPROTO_UDP) {
> + 		rpc_destroy_udp_client(rpc_info);
> + 		rpc_destroy_udp_client(pm_info);
> + 	} else {
> +@@ -675,7 +671,7 @@ static int get_vers_and_cost(unsigned logopt, struct host *host,
> + 
> + 	if (version & TCP_REQUESTED) {
> + 		supported = get_nfs_info(logopt, host,
> +-				   &pm_info, &rpc_info, "tcp", vers, port);
> ++				   &pm_info, &rpc_info, IPPROTO_TCP, vers, port);
> + 		if (IS_ERR(supported)) {
> + 			if (ERR(supported) == EHOSTUNREACH ||
> + 			    ERR(supported) == ETIMEDOUT)
> +@@ -688,7 +684,7 @@ static int get_vers_and_cost(unsigned logopt, struct host *host,
> + 
> + 	if (version & UDP_REQUESTED) {
> + 		supported = get_nfs_info(logopt, host,
> +-				   &pm_info, &rpc_info, "udp", vers, port);
> ++				   &pm_info, &rpc_info, IPPROTO_UDP, vers, port);
> + 		if (IS_ERR(supported)) {
> + 			if (!ret && ERR(supported) == ETIMEDOUT)
> + 				return ret;
> +@@ -709,7 +705,7 @@ static int get_supported_ver_and_cost(unsigned logopt, struct host *host,
> + 	socklen_t len = INET6_ADDRSTRLEN;
> + 	char buf[len + 1];
> + 	struct conn_info pm_info, rpc_info;
> +-	const char *proto;
> ++	int proto;
> + 	unsigned int vers;
> + 	struct timeval start, end;
> + 	struct timezone tz;
> +@@ -748,10 +744,10 @@ static int get_supported_ver_and_cost(unsigned logopt, struct host *host,
> + 	 *  So, we do the conversion here.
> + 	 */
> + 	if (version & UDP_SELECTED_MASK) {
> +-		proto = "udp";
> ++		proto = IPPROTO_UDP;
> + 		version >>= 8;
> + 	} else
> +-		proto = "tcp";
> ++		proto = IPPROTO_TCP;
> + 
> + 	switch (version) {
> + 	case NFS2_SUPPORTED:
> +@@ -768,9 +764,7 @@ static int get_supported_ver_and_cost(unsigned logopt, struct host *host,
> + 		return 0;
> + 	}
> + 
> +-	rpc_info.proto = getprotobyname(proto);
> +-	if (!rpc_info.proto)
> +-		return 0;
> ++	rpc_info.proto = proto;
> + 
> + 	if (port > 0)
> + 		rpc_info.port = port;
> +@@ -786,14 +780,14 @@ static int get_supported_ver_and_cost(unsigned logopt, struct host *host,
> + 
> + 		memset(&parms, 0, sizeof(struct pmap));
> + 		parms.pm_prog = NFS_PROGRAM;
> +-		parms.pm_prot = rpc_info.proto->p_proto;
> ++		parms.pm_prot = rpc_info.proto;
> + 		parms.pm_vers = vers;
> + 		ret = rpc_portmap_getport(&pm_info, &parms, &rpc_info.port);
> + 		if (ret < 0)
> + 			goto done;
> + 	}
> + 
> +-	if (rpc_info.proto->p_proto == IPPROTO_UDP)
> ++	if (rpc_info.proto == IPPROTO_UDP)
> + 		status = rpc_udp_getclient(&rpc_info, NFS_PROGRAM, vers);
> + 	else
> + 		status = rpc_tcp_getclient(&rpc_info, NFS_PROGRAM, vers);
> +@@ -815,7 +809,7 @@ static int get_supported_ver_and_cost(unsigned logopt, struct host *host,
> + 		}
> + 	}
> + done:
> +-	if (rpc_info.proto->p_proto == IPPROTO_UDP) {
> ++	if (rpc_info.proto == IPPROTO_UDP) {
> + 		rpc_destroy_udp_client(&rpc_info);
> + 		rpc_destroy_udp_client(&pm_info);
> + 	} else {
> diff --git a/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-workaround-missing-GNU-versionsort-extension.patch b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-workaround-missing-GNU-versionsort-extension.patch
> new file mode 100644
> index 0000000..6a1a49e
> --- /dev/null
> +++ b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-workaround-missing-GNU-versionsort-extension.patch
> @@ -0,0 +1,149 @@
> +autofs-5.0.7 - workaround missing GNU versionsort extension
> +
> +From: Chris Packham <chris.packham@alliedtelesis.co.nz>
> +
> +alphasort() and scandir() are specified in POSIX.1-2008, versionsort()
> +is a GNU extension. When versionsort isn't available fallback to using
> +alphasort.
> +---
> +
> + CHANGELOG            |    1 +
> + configure            |   62 ++++++++++++++++++++++++++++++++++++++++++++++++++
> + configure.in         |    6 +++++
> + include/config.h.in  |    3 ++
> + modules/lookup_dir.c |    5 ++++
> + 5 files changed, 77 insertions(+), 0 deletions(-)
> +
> +
> +diff --git a/CHANGELOG b/CHANGELOG
> +index 4eaa9f9..39388a5 100644
> +--- a/CHANGELOG
> ++++ b/CHANGELOG
> +@@ -27,6 +27,7 @@
> + - lib/defaults.c: use WITH_LDAP conditional around LDAP types.
> + - make yellow pages support optional.
> + - modules/replicated.c: use sin6_addr.s6_addr32.
> ++- workaround missing GNU versionsort extension.
> + 
> + 25/07/2012 autofs-5.0.7
> + =======================
> +diff --git a/configure b/configure
> +index cf6428c..c1423d8 100755
> +--- a/configure
> ++++ b/configure
> +@@ -4010,6 +4010,68 @@ $as_echo "yes" >&6; }
> +   KRB5_FLAGS=`$KRB5_CONFIG --cflags`
> + fi
> + 
> ++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing versionsort" >&5
> ++$as_echo_n "checking for library containing versionsort... " >&6; }
> ++if ${ac_cv_search_versionsort+:} false; then :
> ++  $as_echo_n "(cached) " >&6
> ++else
> ++  ac_func_search_save_LIBS=$LIBS
> ++cat confdefs.h - <<_ACEOF >conftest.$ac_ext
> ++/* end confdefs.h.  */
> ++
> ++/* Override any GCC internal prototype to avoid an error.
> ++   Use char because int might match the return type of a GCC
> ++   builtin and then its argument prototype would still apply.  */
> ++#ifdef __cplusplus
> ++extern "C"
> ++#endif
> ++char versionsort ();
> ++int
> ++main ()
> ++{
> ++return versionsort ();
> ++  ;
> ++  return 0;
> ++}
> ++_ACEOF
> ++for ac_lib in '' ; do
> ++  if test -z "$ac_lib"; then
> ++    ac_res="none required"
> ++  else
> ++    ac_res=-l$ac_lib
> ++    LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
> ++  fi
> ++  if ac_fn_c_try_link "$LINENO"; then :
> ++  ac_cv_search_versionsort=$ac_res
> ++fi
> ++rm -f core conftest.err conftest.$ac_objext \
> ++    conftest$ac_exeext
> ++  if ${ac_cv_search_versionsort+:} false; then :
> ++  break
> ++fi
> ++done
> ++if ${ac_cv_search_versionsort+:} false; then :
> ++
> ++else
> ++  ac_cv_search_versionsort=no
> ++fi
> ++rm conftest.$ac_ext
> ++LIBS=$ac_func_search_save_LIBS
> ++fi
> ++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_versionsort" >&5
> ++$as_echo "$ac_cv_search_versionsort" >&6; }
> ++ac_res=$ac_cv_search_versionsort
> ++if test "$ac_res" != no; then :
> ++  test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
> ++
> ++fi
> ++
> ++if test "$ac_cv_search_versionsort" = "no"; then
> ++
> ++$as_echo "#define WITHOUT_VERSIONSORT 1" >>confdefs.h
> ++
> ++fi
> ++
> + #
> + # glibc/libc 6 new libraries
> + #
> +diff --git a/configure.in b/configure.in
> +index 363c376..4029375 100644
> +--- a/configure.in
> ++++ b/configure.in
> +@@ -163,6 +163,12 @@ AF_SLOPPY_MOUNT()
> + AF_CHECK_LIBXML()
> + AF_CHECK_KRB5()
> + 
> ++AC_SEARCH_LIBS([versionsort],[])
> ++if test "$ac_cv_search_versionsort" = "no"; then
> ++	AC_DEFINE(WITHOUT_VERSIONSORT, 1,
> ++		[Define if your C library does not provide versionsort])
> ++fi
> ++
> + #
> + # glibc/libc 6 new libraries
> + #
> +diff --git a/include/config.h.in b/include/config.h.in
> +index 7f1c5b5..a2a05a8 100644
> +--- a/include/config.h.in
> ++++ b/include/config.h.in
> +@@ -135,6 +135,9 @@
> + /* Define to 1 to use the libtirpc tsd usage workaround */
> + #undef TIRPC_WORKAROUND
> + 
> ++/* Define if your C library does not provide versionsort */
> ++#undef WITHOUT_VERSIONSORT
> ++
> + /* Define if using the dmalloc debugging malloc package */
> + #undef WITH_DMALLOC
> + 
> +diff --git a/modules/lookup_dir.c b/modules/lookup_dir.c
> +index 33901c0..07471b7 100644
> +--- a/modules/lookup_dir.c
> ++++ b/modules/lookup_dir.c
> +@@ -39,6 +39,11 @@
> + #define AUTOFS_DIR_EXT ".autofs"
> + #define AUTOFS_DIR_EXTSIZ (sizeof(AUTOFS_DIR_EXT) - 1)
> + 
> ++/* Work around non-GNU systems that don't provide versionsort */
> ++#ifdef WITHOUT_VERSIONSORT
> ++#define versionsort alphasort
> ++#endif
> ++
> + struct lookup_context {
> +   const char *mapname;
> + };
> diff --git a/meta-networking/recipes-daemons/autofs/autofs_5.0.7.bb b/meta-networking/recipes-daemons/autofs/autofs_5.0.7.bb
> index 7d8cf17..6751402 100644
> --- a/meta-networking/recipes-daemons/autofs/autofs_5.0.7.bb
> +++ b/meta-networking/recipes-daemons/autofs/autofs_5.0.7.bb
> @@ -3,7 +3,7 @@ SECTION = "base"
> LICENSE = "GPL-2.0"
> LIC_FILES_CHKSUM = "file://COPYING;md5=0636e73ff0215e8d672dc4c32c317bb3"
> 
> -PR = "r2"
> +PR = "r3"
> 
> DEPENDS += "libtirpc flex-native bison-native"
> 
> @@ -27,7 +27,30 @@ SRC_URI = "${KERNELORG_MIRROR}/linux/daemons/autofs/v5/autofs-${PV}.tar.bz2 \
>            file://autofs-5.0.6-fix-recursive-mount-deadlock.patch \
>            file://autofs-5.0.6-increase-file-map-read-buffer-size.patch \
>            file://autofs-5.0.7-handle-new-location-of-systemd.patch \
> +           file://autofs-5.0.7-fix-map-entry-duplicate-offset-detection.patch \
> +           file://autofs-5.0.7-allow-nsswitch_conf-to-not-contain-automount-lines.patch \
> +           file://autofs-5.0.7-fix-nobind-man-page-description.patch \
> +           file://autofs-5.0.7-fix-submount-offset-delete.patch \
> +           file://autofs-5.0.7-fix-init-script-status-return.patch \
> +           file://autofs-5.0.7-fix-use-get_proximity-without-libtirpc.patch \
> +           file://autofs-5.0.7-dont-use-dirent-d_type-to-filter-out-files-in-scandir.patch \
> +           file://autofs-5.0.7-dont-schedule-new-alarms-after-readmap.patch \
> +           file://autofs-5.0.7-use-numeric-protocol-ids-instead-of-protoent-structs.patch \
> +           file://autofs-5.0.7-lib-defaults-use-WITH_LDAP-conditional-around-LDAP-types.patch \
>            file://autofs-5.0.7-make-yellow-pages-support-optional.patch \
> +           file://autofs-5.0.7-modules-replicated-use-sin6.addr-s6_addr32.patch \
> +           file://autofs-5.0.7-workaround-missing-GNU-versionsort-extension.patch \
> +           file://autofs-5.0.7-dont-fail-on-master-map-self-include.patch \
> +           file://autofs-5.0.7-fix-wildcard-multi-map-regression.patch \
> +           file://autofs-5.0.7-fix-file-descriptor-leak-when-reloading-the-daemon.patch \
> +           file://autofs-5.0.7-depricate-nosymlink-pseudo-option.patch \
> +           file://autofs-5.0.7-add-symlink-pseudo-option.patch \
> +           file://autofs-5.0.7-update-kernel-include-files.patch \
> +           file://autofs-5.0.7-fix-requires-in-spec-file.patch \
> +           file://autofs-5.0.7-fix-libtirpc-build-option.patch \
> +           file://autofs-5.0.7-fix-systemd-unidir-in-spec-file.patch \
> +           file://autofs-5.0.7-document-browse-option-in-man-page.patch \
> +           file://autofs-5.0.7-fix-automounter-support-on-parisc.patch \
>            file://autofs-5.0.7-include-linux-nfs.h-directly-in-rpc_sub.patch \
>            file://Makefile.rules-cross.patch \
>            file://no-bash.patch \
> -- 
> 1.7.10.4
> 
> 
> _______________________________________________
> Openembedded-devel mailing list
> Openembedded-devel@lists.openembedded.org
> http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/openembedded-devel
Andreas Oberritter - March 19, 2013, 4:51 p.m.
Hello Khem,

On 19.03.2013 17:38, Khem Raj wrote:
> what kind of testing have you done on this patch set 

I mounted an nfs share and a local ext3 partition with it and reloaded
the config with SIGHUP. The last test failed before but worked with this
patchlevel.

Regards,
Andreas
Joe MacDonald - March 19, 2013, 6:11 p.m.
[Re: [oe] [meta-networking][PATCH] autofs: update to current patchlevel] On 13.03.19 (Tue 16:40) Andreas Oberritter wrote:

> On 19.03.2013 13:49, Joe MacDonald wrote:
> > [[oe] [meta-networking][PATCH] autofs: update to current patchlevel] On 13.03.19 (Tue 11:24) Andreas Oberritter wrote:
> > 
> >> * Apply all patches from ftp.kernel.org/pub/linux/daemons/autofs/v5/patches-5.0.8/
> >>
> >> Signed-off-by: Andreas Oberritter <obi@opendreambox.org>
> >> ---
> >>  .../autofs-5.0.7-add-symlink-pseudo-option.patch   |  217 +++++++++
> >>  ...witch_conf-to-not-contain-automount-lines.patch |   50 +++
> >>  ...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 +++
> >>  ....7-dont-schedule-new-alarms-after-readmap.patch |   69 +++
> >>  ...ent-d_type-to-filter-out-files-in-scandir.patch |   41 ++
> >>  ...s-5.0.7-fix-automounter-support-on-parisc.patch |   24 +
> >>  ...descriptor-leak-when-reloading-the-daemon.patch |  179 ++++++++
> >>  ...utofs-5.0.7-fix-init-script-status-return.patch |   39 ++
> >>  .../autofs-5.0.7-fix-libtirpc-build-option.patch   |   66 +++
> >>  ...-fix-map-entry-duplicate-offset-detection.patch |   37 ++
> >>  ...ofs-5.0.7-fix-nobind-man-page-description.patch |   46 ++
> >>  .../autofs-5.0.7-fix-requires-in-spec-file.patch   |   37 ++
> >>  .../autofs-5.0.7-fix-submount-offset-delete.patch  |   45 ++
> >>  ...ofs-5.0.7-fix-systemd-unidir-in-spec-file.patch |   72 +++
> >>  ....7-fix-use-get_proximity-without-libtirpc.patch |   54 +++
> >>  ...s-5.0.7-fix-wildcard-multi-map-regression.patch |  225 ++++++++++
> >>  ...e-WITH_LDAP-conditional-around-LDAP-types.patch |  448 +++++++++++++++++++
> >>  ...-5.0.7-make-yellow-pages-support-optional.patch |   15 +-
> >>  ...odules-replicated-use-sin6.addr-s6_addr32.patch |   39 ++
> >>  .../autofs-5.0.7-update-kernel-include-files.patch |   92 ++++
> >>  ...-protocol-ids-instead-of-protoent-structs.patch |  471 ++++++++++++++++++++
> >>  ...karound-missing-GNU-versionsort-extension.patch |  149 +++++++
> >>  .../recipes-daemons/autofs/autofs_5.0.7.bb         |   25 +-
> >>  25 files changed, 2582 insertions(+), 3 deletions(-)
> > 
> > I had started to ask why we wouldn't just update to 5.0.8 directly
> > instead of patching our way there.  Then I thought I'd look myself and
> > now I know.  :-)
> > 
> > This is just a simple (and wholesale) integration of the patches already
> > upstream?  That seems reasonable to me.
> 
> Yes.
> 
> In the future, maybe we should switch to Git. A repository for autofs is
> available at
> git://git.kernel.org/pub/scm/linux/storage/autofs/autofs.git. For now, I
> didn't want to change the recipe too much.
> 
> One of these patches fixed a problem, where the automount daemon would
> hang after receiving SIGHUP, but I don't know which one exactly.

Woo.  Nice.  Well, on the whole I don't have any objection to
5.0.8-ifying this anyway, so importing the batch is reasonable even if
it's just to resolve a single problem.

I'd be a little concerned about going to a straight git source based
solely on some hassle I've had with meta-selinux in the past, but
there's a history for that, too, so maybe it's not a bad idea either.

As it stands, though, I'm happy to merge this.  We can visit the git
tree question pretty much any time.
Joe MacDonald - March 21, 2013, 6:10 p.m.
Merged, thanks.
-J.

[[oe] [meta-networking][PATCH] autofs: update to current patchlevel] On 13.03.19 (Tue 11:24) Andreas Oberritter wrote:

> * Apply all patches from ftp.kernel.org/pub/linux/daemons/autofs/v5/patches-5.0.8/
> 
> Signed-off-by: Andreas Oberritter <obi@opendreambox.org>
> ---
>  .../autofs-5.0.7-add-symlink-pseudo-option.patch   |  217 +++++++++
>  ...witch_conf-to-not-contain-automount-lines.patch |   50 +++
>  ...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 +++
>  ....7-dont-schedule-new-alarms-after-readmap.patch |   69 +++
>  ...ent-d_type-to-filter-out-files-in-scandir.patch |   41 ++
>  ...s-5.0.7-fix-automounter-support-on-parisc.patch |   24 +
>  ...descriptor-leak-when-reloading-the-daemon.patch |  179 ++++++++
>  ...utofs-5.0.7-fix-init-script-status-return.patch |   39 ++
>  .../autofs-5.0.7-fix-libtirpc-build-option.patch   |   66 +++
>  ...-fix-map-entry-duplicate-offset-detection.patch |   37 ++
>  ...ofs-5.0.7-fix-nobind-man-page-description.patch |   46 ++
>  .../autofs-5.0.7-fix-requires-in-spec-file.patch   |   37 ++
>  .../autofs-5.0.7-fix-submount-offset-delete.patch  |   45 ++
>  ...ofs-5.0.7-fix-systemd-unidir-in-spec-file.patch |   72 +++
>  ....7-fix-use-get_proximity-without-libtirpc.patch |   54 +++
>  ...s-5.0.7-fix-wildcard-multi-map-regression.patch |  225 ++++++++++
>  ...e-WITH_LDAP-conditional-around-LDAP-types.patch |  448 +++++++++++++++++++
>  ...-5.0.7-make-yellow-pages-support-optional.patch |   15 +-
>  ...odules-replicated-use-sin6.addr-s6_addr32.patch |   39 ++
>  .../autofs-5.0.7-update-kernel-include-files.patch |   92 ++++
>  ...-protocol-ids-instead-of-protoent-structs.patch |  471 ++++++++++++++++++++
>  ...karound-missing-GNU-versionsort-extension.patch |  149 +++++++
>  .../recipes-daemons/autofs/autofs_5.0.7.bb         |   25 +-
>  25 files changed, 2582 insertions(+), 3 deletions(-)
>  create mode 100644 meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-add-symlink-pseudo-option.patch
>  create mode 100644 meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-allow-nsswitch_conf-to-not-contain-automount-lines.patch
>  create mode 100644 meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-depricate-nosymlink-pseudo-option.patch
>  create mode 100644 meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-document-browse-option-in-man-page.patch
>  create mode 100644 meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-dont-fail-on-master-map-self-include.patch
>  create mode 100644 meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-dont-schedule-new-alarms-after-readmap.patch
>  create mode 100644 meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-dont-use-dirent-d_type-to-filter-out-files-in-scandir.patch
>  create mode 100644 meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-automounter-support-on-parisc.patch
>  create mode 100644 meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-file-descriptor-leak-when-reloading-the-daemon.patch
>  create mode 100644 meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-init-script-status-return.patch
>  create mode 100644 meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-libtirpc-build-option.patch
>  create mode 100644 meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-map-entry-duplicate-offset-detection.patch
>  create mode 100644 meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-nobind-man-page-description.patch
>  create mode 100644 meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-requires-in-spec-file.patch
>  create mode 100644 meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-submount-offset-delete.patch
>  create mode 100644 meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-systemd-unidir-in-spec-file.patch
>  create mode 100644 meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-use-get_proximity-without-libtirpc.patch
>  create mode 100644 meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-wildcard-multi-map-regression.patch
>  create mode 100644 meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-lib-defaults-use-WITH_LDAP-conditional-around-LDAP-types.patch
>  create mode 100644 meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-modules-replicated-use-sin6.addr-s6_addr32.patch
>  create mode 100644 meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-update-kernel-include-files.patch
>  create mode 100644 meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-use-numeric-protocol-ids-instead-of-protoent-structs.patch
>  create mode 100644 meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-workaround-missing-GNU-versionsort-extension.patch
> 
> diff --git a/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-add-symlink-pseudo-option.patch b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-add-symlink-pseudo-option.patch
> new file mode 100644
> index 0000000..b0440f4
> --- /dev/null
> +++ b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/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@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/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-allow-nsswitch_conf-to-not-contain-automount-lines.patch b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-allow-nsswitch_conf-to-not-contain-automount-lines.patch
> new file mode 100644
> index 0000000..c342d10
> --- /dev/null
> +++ b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-allow-nsswitch_conf-to-not-contain-automount-lines.patch
> @@ -0,0 +1,50 @@
> +autofs-5.0.7 - Allow nsswitch.conf to not contain "automount:" lines
> +
> +From: Michael Tokarev <mjt@tls.msk.ru>
> +
> +Current code does not allow a case when nsswitch.conf
> +does not mention automount map at all, like all new
> +installations.  It logs a rather unpleasant error
> +message instead:
> +
> + syntax error in nsswitch config near [ syntax error ]
> +
> +this patch has a minimal fix, to allo "file" to be empty.
> +
> +Whole parser in C is about 25 lines of code, the "grammar"
> +is trivial, and it is better to ditch all this yacc/lex
> +stuff, but that will be much more intrusive change.
> +
> +Signed-off-by: Michael Tokarev <mjt@tls.msk.ru>
> +Cc: 682266@bugs.debian.org
> +---
> +
> + CHANGELOG       |    1 +
> + lib/nss_parse.y |    1 +
> + 2 files changed, 2 insertions(+), 0 deletions(-)
> +
> +
> +diff --git a/CHANGELOG b/CHANGELOG
> +index bd0dd82..16ac2a0 100644
> +--- a/CHANGELOG
> ++++ b/CHANGELOG
> +@@ -16,6 +16,7 @@
> + - increase file map read buffer size.
> + - handle new location of systemd.
> + - fix map entry duplicate offset detection.
> ++- Allow nsswitch.conf to not contain "automount:" lines.
> + 
> + 25/07/2012 autofs-5.0.7
> + =======================
> +diff --git a/lib/nss_parse.y b/lib/nss_parse.y
> +index a39fda4..055e9d7 100644
> +--- a/lib/nss_parse.y
> ++++ b/lib/nss_parse.y
> +@@ -72,6 +72,7 @@ file: {
> + 		nss_debug = YYDEBUG;
> + #endif
> + 	} sources NL
> ++	| /* empty */
> + 	;
> + 
> + sources: nss_source
> diff --git a/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-depricate-nosymlink-pseudo-option.patch b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-depricate-nosymlink-pseudo-option.patch
> new file mode 100644
> index 0000000..c784de7
> --- /dev/null
> +++ b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/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@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/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-document-browse-option-in-man-page.patch b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-document-browse-option-in-man-page.patch
> new file mode 100644
> index 0000000..4641342
> --- /dev/null
> +++ b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/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@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/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-dont-fail-on-master-map-self-include.patch b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-dont-fail-on-master-map-self-include.patch
> new file mode 100644
> index 0000000..afb908b
> --- /dev/null
> +++ b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/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@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/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-dont-schedule-new-alarms-after-readmap.patch b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-dont-schedule-new-alarms-after-readmap.patch
> new file mode 100644
> index 0000000..6444687
> --- /dev/null
> +++ b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-dont-schedule-new-alarms-after-readmap.patch
> @@ -0,0 +1,69 @@
> +autofs-5.0.7 - don't schedule new alarms after readmap
> +
> +From: Leonardo Chiquitto <leonardo.lists@gmail.com>
> +
> +Currently, a new alarm is scheduled every time the daemon receives
> +a SIGHUP (map re-read) or SIGUSR1 (forced expiration). Besides that,
> +map re-reads started on demand when a map is found to be outdated
> +also generate a new alarm.
> +
> +Once added, these alarms are never deleted and hence increase the
> +number of times the daemon wakes up to run the expiration procedure.
> +After a couple of months, in setups with many mount points, it's
> +normal to see automount waking up every second to handle the
> +expiration timer.
> +
> +This patch removes the alarm scheduling from the readmap cleanup
> +routine and makes sure the alarm is re-added after the expiration
> +process only when it was not triggered by SIGUSR1.
> +
> +I couldn't think of any use case to justify keeping these alarms:
> +it's critical to have the alarm ticking every timeout/4 seconds,
> +but more than one periodic alarm running doesn't seem to make
> +sense.
> +---
> +
> + CHANGELOG      |    1 +
> + daemon/state.c |    6 +-----
> + 2 files changed, 2 insertions(+), 5 deletions(-)
> +
> +
> +diff --git a/CHANGELOG b/CHANGELOG
> +index c9be73e..4cf5621 100644
> +--- a/CHANGELOG
> ++++ b/CHANGELOG
> +@@ -22,6 +22,7 @@
> + - fix init script status return.
> + - fix use get_proximity() without libtirpc.
> + - don't use dirent d_type to filter out files in scandir()
> ++- don't schedule new alarms after readmap.
> + 
> + 25/07/2012 autofs-5.0.7
> + =======================
> +diff --git a/daemon/state.c b/daemon/state.c
> +index b451c56..6e23022 100644
> +--- a/daemon/state.c
> ++++ b/daemon/state.c
> +@@ -144,7 +144,7 @@ void expire_cleanup(void *arg)
> + 					ap->submount = 2;
> + 			}
> + 
> +-			if (!ap->submount)
> ++			if (ap->state == ST_EXPIRE && !ap->submount)
> + 				alarm_add(ap, ap->exp_runfreq);
> + 
> + 			/* FALLTHROUGH */
> +@@ -330,13 +330,9 @@ static void do_readmap_cleanup(void *arg)
> + 	ap = ra->ap;
> + 
> + 	st_mutex_lock();
> +-
> + 	ap->readmap_thread = 0;
> + 	st_set_done(ap);
> +-	if (!ap->submount)
> +-		alarm_add(ap, ap->exp_runfreq);
> + 	st_ready(ap);
> +-
> + 	st_mutex_unlock();
> + 
> + 	free(ra);
> diff --git a/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-dont-use-dirent-d_type-to-filter-out-files-in-scandir.patch b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-dont-use-dirent-d_type-to-filter-out-files-in-scandir.patch
> new file mode 100644
> index 0000000..9c9d99b
> --- /dev/null
> +++ b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-dont-use-dirent-d_type-to-filter-out-files-in-scandir.patch
> @@ -0,0 +1,41 @@
> +autofs-5.0.7 - don't use dirent d_type to filter out files in scandir()
> +
> +From: Leonardo Chiquitto <leonardo.lists@gmail.com>
> +
> +The "d_type" field of a dirent structure is not filled in by all
> +file systems (XFS being one example), so we can't rely on it to
> +check file types.
> +---
> +
> + CHANGELOG            |    1 +
> + modules/lookup_dir.c |    4 ----
> + 2 files changed, 1 insertions(+), 4 deletions(-)
> +
> +
> +diff --git a/CHANGELOG b/CHANGELOG
> +index 460bd27..c9be73e 100644
> +--- a/CHANGELOG
> ++++ b/CHANGELOG
> +@@ -21,6 +21,7 @@
> + - fix submount offset delete.
> + - fix init script status return.
> + - fix use get_proximity() without libtirpc.
> ++- don't use dirent d_type to filter out files in scandir()
> + 
> + 25/07/2012 autofs-5.0.7
> + =======================
> +diff --git a/modules/lookup_dir.c b/modules/lookup_dir.c
> +index 658cc29..33901c0 100644
> +--- a/modules/lookup_dir.c
> ++++ b/modules/lookup_dir.c
> +@@ -103,10 +103,6 @@ static int acceptable_dirent_p(const struct dirent *e)
> + {
> +   size_t namesz;
> + 
> +-
> +-  if (!(e->d_type == DT_REG || e->d_type == DT_LNK))
> +-	  return 0;
> +-
> +   namesz = strlen(e->d_name);
> +   if (!namesz)
> + 	  return 0;
> diff --git a/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-automounter-support-on-parisc.patch b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-automounter-support-on-parisc.patch
> new file mode 100644
> index 0000000..e00fdc1
> --- /dev/null
> +++ b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/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@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@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/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-file-descriptor-leak-when-reloading-the-daemon.patch b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-file-descriptor-leak-when-reloading-the-daemon.patch
> new file mode 100644
> index 0000000..8ce6c0f
> --- /dev/null
> +++ b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/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@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/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-init-script-status-return.patch b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-init-script-status-return.patch
> new file mode 100644
> index 0000000..a08d62f
> --- /dev/null
> +++ b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-init-script-status-return.patch
> @@ -0,0 +1,39 @@
> +autofs-5.0.7 - fix init script status return
> +
> +From: Ian Kent <ikent@redhat.com>
> +
> +The patch that added the piddir to configure to fix incorrect init
> +script status() function returns failed to actually return the value
> +to the user.
> +---
> +
> + CHANGELOG             |    1 +
> + redhat/autofs.init.in |    2 +-
> + 2 files changed, 2 insertions(+), 1 deletions(-)
> +
> +
> +diff --git a/CHANGELOG b/CHANGELOG
> +index 76c1f73..5bcb1af 100644
> +--- a/CHANGELOG
> ++++ b/CHANGELOG
> +@@ -19,6 +19,7 @@
> + - Allow nsswitch.conf to not contain "automount:" lines.
> + - fix nobind man page description.
> + - fix submount offset delete.
> ++- fix init script status return.
> + 
> + 25/07/2012 autofs-5.0.7
> + =======================
> +diff --git a/redhat/autofs.init.in b/redhat/autofs.init.in
> +index fe18b3e..9d008ff 100644
> +--- a/redhat/autofs.init.in
> ++++ b/redhat/autofs.init.in
> +@@ -172,7 +172,7 @@ RETVAL=0
> + case "$1" in
> + 	status)
> + 		status -p @@autofspiddir@@/autofs.pid -l autofs $prog
> +-		exit 0;
> ++		exit $?;
> + 		;;
> + 	usage)
> + 		usage_message
> diff --git a/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-libtirpc-build-option.patch b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-libtirpc-build-option.patch
> new file mode 100644
> index 0000000..8ad2afa
> --- /dev/null
> +++ b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/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@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/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-map-entry-duplicate-offset-detection.patch b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-map-entry-duplicate-offset-detection.patch
> new file mode 100644
> index 0000000..126d9a2
> --- /dev/null
> +++ b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-map-entry-duplicate-offset-detection.patch
> @@ -0,0 +1,37 @@
> +autofs-5.0.7 - fix map entry duplicate offset detection
> +
> +From: Ian Kent <raven@themaw.net>
> +
> +Recent changes broke the detection of duplicate offsets in map entries.
> +---
> +
> + CHANGELOG   |    1 +
> + lib/cache.c |    2 +-
> + 2 files changed, 2 insertions(+), 1 deletions(-)
> +
> +
> +diff --git a/CHANGELOG b/CHANGELOG
> +index 8f6bb3a..bd0dd82 100644
> +--- a/CHANGELOG
> ++++ b/CHANGELOG
> +@@ -15,6 +15,7 @@
> + - fix recursive mount deadlock.
> + - increase file map read buffer size.
> + - handle new location of systemd.
> ++- fix map entry duplicate offset detection.
> + 
> + 25/07/2012 autofs-5.0.7
> + =======================
> +diff --git a/lib/cache.c b/lib/cache.c
> +index 9179ad5..1e05a99 100644
> +--- a/lib/cache.c
> ++++ b/lib/cache.c
> +@@ -659,7 +659,7 @@ int cache_update_offset(struct mapent_cache *mc, const char *mkey, const char *k
> + 
> + 	me = cache_lookup_distinct(mc, key);
> + 	if (me && me->age == age) {
> +-		if (me->multi != owner)
> ++		if (me->multi == owner)
> + 			return CHE_DUPLICATE;
> + 	}
> + 
> diff --git a/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-nobind-man-page-description.patch b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-nobind-man-page-description.patch
> new file mode 100644
> index 0000000..41328a0
> --- /dev/null
> +++ b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-nobind-man-page-description.patch
> @@ -0,0 +1,46 @@
> +autofs-5.0.7 - fix nobind man page description
> +
> +From: Ian Kent <raven@themaw.net>
> +
> +Update auto.master(5) to better describe the behavior of the "nobind"
> +option when used with direct mounts maps.
> +---
> +
> + CHANGELOG            |    1 +
> + man/auto.master.5.in |   10 +++++++---
> + 2 files changed, 8 insertions(+), 3 deletions(-)
> +
> +
> +diff --git a/CHANGELOG b/CHANGELOG
> +index 16ac2a0..7eb7235 100644
> +--- a/CHANGELOG
> ++++ b/CHANGELOG
> +@@ -17,6 +17,7 @@
> + - handle new location of systemd.
> + - fix map entry duplicate offset detection.
> + - Allow nsswitch.conf to not contain "automount:" lines.
> ++- fix nobind man page description.
> + 
> + 25/07/2012 autofs-5.0.7
> + =======================
> +diff --git a/man/auto.master.5.in b/man/auto.master.5.in
> +index 21d7544..8007542 100644
> +--- a/man/auto.master.5.in
> ++++ b/man/auto.master.5.in
> +@@ -151,9 +151,13 @@ can't be mounted.
> + 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
> + map entry (so it effects all the map entries) or with individual map
> +-entries to prevent bind mounting of local NFS filesystems. Bind mounting
> +-of NFS file systems can also be prevented for specific map entrys by
> +-adding the "port=" mount option to the entries.
> ++entries to prevent bind mounting of local NFS filesystems. For direct
> ++mount maps the option is only effective if specified on the first direct
> ++map entry and is applied to all direct mount maps in the master map. It
> ++is ignored if given on subsequent direct map entries. It may be used
> ++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 "\-r, \-\-random-multimount-selection"
> + Enables the use of ramdom selection when choosing a host from a
> diff --git a/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-requires-in-spec-file.patch b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-requires-in-spec-file.patch
> new file mode 100644
> index 0000000..404c848
> --- /dev/null
> +++ b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/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@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/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-submount-offset-delete.patch b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-submount-offset-delete.patch
> new file mode 100644
> index 0000000..b38e214
> --- /dev/null
> +++ b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-submount-offset-delete.patch
> @@ -0,0 +1,45 @@
> +autofs-5.0.7 - fix submount offset delete
> +
> +From: Ian Kent <ikent@redhat.com>
> +
> +As part of the implementation to allow for limited update of
> +the internal hosts map by using a HUP signal some code that
> +deleted any offset entries from the cache on lookup was removed
> +as it appeared to not be needed.
> +
> +There is however a case where it is needed to avoid a duplicate
> +cache entry failure on lookup.
> +---
> +
> + CHANGELOG          |    1 +
> + daemon/automount.c |    4 ++--
> + 2 files changed, 3 insertions(+), 2 deletions(-)
> +
> +
> +diff --git a/CHANGELOG b/CHANGELOG
> +index 7eb7235..76c1f73 100644
> +--- a/CHANGELOG
> ++++ b/CHANGELOG
> +@@ -18,6 +18,7 @@
> + - fix map entry duplicate offset detection.
> + - Allow nsswitch.conf to not contain "automount:" lines.
> + - fix nobind man page description.
> ++- fix submount offset delete.
> + 
> + 25/07/2012 autofs-5.0.7
> + =======================
> +diff --git a/daemon/automount.c b/daemon/automount.c
> +index e56f9e1..4a3eb3d 100644
> +--- a/daemon/automount.c
> ++++ b/daemon/automount.c
> +@@ -544,8 +544,8 @@ int umount_multi(struct autofs_point *ap, const char *path, int incl)
> + 	 * If we are a submount we need to umount any offsets our
> + 	 * parent may have mounted over top of us.
> + 	 */
> +-	/*if (ap->submount)
> +-		left += umount_subtree_mounts(ap->parent, path, is_autofs_fs);*/
> ++	if (ap->submount)
> ++		left += umount_subtree_mounts(ap->parent, path, is_autofs_fs);
> + 
> + 	left += umount_subtree_mounts(ap, path, is_autofs_fs);
> + 
> diff --git a/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-systemd-unidir-in-spec-file.patch b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-systemd-unidir-in-spec-file.patch
> new file mode 100644
> index 0000000..d856faf
> --- /dev/null
> +++ b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/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@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/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-use-get_proximity-without-libtirpc.patch b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-use-get_proximity-without-libtirpc.patch
> new file mode 100644
> index 0000000..74ed8fa
> --- /dev/null
> +++ b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-use-get_proximity-without-libtirpc.patch
> @@ -0,0 +1,54 @@
> +autofs-5.0.7 - fix use get_proximity() without libtirpc
> +
> +From: Ian Kent <raven@themaw.net>
> +
> +If autofs is not using libtirpc and there are any configured IPv6
> +interfaces then get_proximity() will fail with PROXIMITY_UNSUPPORTED.
> +
> +In this case when checking interfaces the IPv6 interfaces need to be
> +ignored.
> +---
> +
> + CHANGELOG            |    1 +
> + modules/replicated.c |    8 ++------
> + 2 files changed, 3 insertions(+), 6 deletions(-)
> +
> +
> +diff --git a/CHANGELOG b/CHANGELOG
> +index 5bcb1af..460bd27 100644
> +--- a/CHANGELOG
> ++++ b/CHANGELOG
> +@@ -20,6 +20,7 @@
> + - fix nobind man page description.
> + - fix submount offset delete.
> + - fix init script status return.
> ++- fix use get_proximity() without libtirpc.
> + 
> + 25/07/2012 autofs-5.0.7
> + =======================
> +diff --git a/modules/replicated.c b/modules/replicated.c
> +index bd6003b..6b96320 100644
> +--- a/modules/replicated.c
> ++++ b/modules/replicated.c
> +@@ -184,9 +184,7 @@ static unsigned int get_proximity(struct sockaddr *host_addr)
> + 			break;
> + 
> + 		case AF_INET6:
> +-#ifndef WITH_LIBTIRPC
> +-			return PROXIMITY_UNSUPPORTED;
> +-#else
> ++#ifdef WITH_LIBTIRPC
> + 			if (host_addr->sa_family == AF_INET)
> + 				break;
> + 			if6_addr = (struct sockaddr_in6 *) this->ifa_addr;
> +@@ -251,9 +249,7 @@ static unsigned int get_proximity(struct sockaddr *host_addr)
> + 			break;
> + 
> + 		case AF_INET6:
> +-#ifndef WITH_LIBTIRPC
> +-			return PROXIMITY_UNSUPPORTED;
> +-#else
> ++#ifdef WITH_LIBTIRPC
> + 			if (host_addr->sa_family == AF_INET)
> + 				break;
> + 			if6_addr = (struct sockaddr_in6 *) this->ifa_addr;
> diff --git a/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-wildcard-multi-map-regression.patch b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-wildcard-multi-map-regression.patch
> new file mode 100644
> index 0000000..44e4a18
> --- /dev/null
> +++ b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/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@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/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-lib-defaults-use-WITH_LDAP-conditional-around-LDAP-types.patch b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-lib-defaults-use-WITH_LDAP-conditional-around-LDAP-types.patch
> new file mode 100644
> index 0000000..22e0418
> --- /dev/null
> +++ b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-lib-defaults-use-WITH_LDAP-conditional-around-LDAP-types.patch
> @@ -0,0 +1,448 @@
> +autofs-5.0.7 - lib/defaults.c: use WITH_LDAP conditional around LDAP types
> +
> +From: Chris Packham <chris.packham@alliedtelesis.co.nz>
> +
> +Wrap the inclusion of lookup_ldap.h and functions that use ldap_uri or
> +ldap_schema with the WITH_LDAP conditional. WITH_LDAP is set by the
> +configure step when LDAP support is not desired. This also allows
> +compilation on a system that doesn't have any LDAP libraries.
> +---
> +
> + CHANGELOG             |    1 
> + include/defaults.h    |   14 +-
> + include/lookup_ldap.h |    1 
> + lib/defaults.c        |  325 +++++++++++++++++++++++++------------------------
> + modules/lookup_ldap.c |    1 
> + 5 files changed, 175 insertions(+), 167 deletions(-)
> +
> +
> +diff --git a/CHANGELOG b/CHANGELOG
> +index ba1d65b..1130db6 100644
> +--- a/CHANGELOG
> ++++ b/CHANGELOG
> +@@ -24,6 +24,7 @@
> + - don't use dirent d_type to filter out files in scandir()
> + - don't schedule new alarms after readmap.
> + - use numeric protocol ids instead of protoent structs.
> ++- lib/defaults.c: use WITH_LDAP conditional around LDAP types.
> + 
> + 25/07/2012 autofs-5.0.7
> + =======================
> +diff --git a/include/defaults.h b/include/defaults.h
> +index cda2174..871e14b 100644
> +--- a/include/defaults.h
> ++++ b/include/defaults.h
> +@@ -44,8 +44,16 @@
> + 
> + #define DEFAULT_MAP_HASH_TABLE_SIZE	1024
> + 
> ++#ifdef WITH_LDAP
> + struct ldap_schema;
> + struct ldap_searchdn;
> ++void defaults_free_uris(struct list_head *);
> ++struct list_head *defaults_get_uris(void);
> ++struct ldap_schema *defaults_get_default_schema(void);
> ++void defaults_free_searchdns(struct ldap_searchdn *);
> ++struct ldap_searchdn *defaults_get_searchdns(void);
> ++struct ldap_schema *defaults_get_schema(void);
> ++#endif
> + 
> + unsigned int defaults_read_config(unsigned int);
> + const char *defaults_get_master_map(void);
> +@@ -57,12 +65,6 @@ unsigned int defaults_get_logging(void);
> + const char *defaults_get_ldap_server(void);
> + unsigned int defaults_get_ldap_timeout(void);
> + unsigned int defaults_get_ldap_network_timeout(void);
> +-struct list_head *defaults_get_uris(void);
> +-void defaults_free_uris(struct list_head *);
> +-struct ldap_schema *defaults_get_default_schema(void);
> +-struct ldap_schema *defaults_get_schema(void);
> +-struct ldap_searchdn *defaults_get_searchdns(void);
> +-void defaults_free_searchdns(struct ldap_searchdn *);
> + unsigned int defaults_get_mount_nfs_default_proto(void);
> + unsigned int defaults_get_append_options(void);
> + unsigned int defaults_get_mount_wait(void);
> +diff --git a/include/lookup_ldap.h b/include/lookup_ldap.h
> +index e441a61..9a4ce73 100644
> +--- a/include/lookup_ldap.h
> ++++ b/include/lookup_ldap.h
> +@@ -8,7 +8,6 @@
> + #include <openssl/evp.h>
> + #include <openssl/err.h>
> + #include <sasl/sasl.h>
> +-#include <libxml/tree.h>
> + #include <krb5.h>
> + #endif
> + 
> +diff --git a/lib/defaults.c b/lib/defaults.c
> +index 5ce71b7..ae1162f 100644
> +--- a/lib/defaults.c
> ++++ b/lib/defaults.c
> +@@ -17,9 +17,12 @@
> + #include <ctype.h>
> + #include <string.h>
> + 
> ++#include "config.h"
> + #include "list.h"
> + #include "defaults.h"
> ++#ifdef WITH_LDAP
> + #include "lookup_ldap.h"
> ++#endif
> + #include "log.h"
> + #include "automount.h"
> + 
> +@@ -197,6 +200,7 @@ static int parse_line(char *line, char **res, char **value)
> + 	return 1;
> + }
> + 
> ++#ifdef WITH_LDAP
> + void defaults_free_uris(struct list_head *list)
> + {
> + 	struct list_head *next;
> +@@ -290,166 +294,6 @@ struct list_head *defaults_get_uris(void)
> + 	return list;
> + }
> + 
> +-/*
> +- * Read config env variables and check they have been set.
> +- *
> +- * This simple minded routine assumes the config file
> +- * is valid bourne shell script without spaces around "="
> +- * and that it has valid values.
> +- */
> +-unsigned int defaults_read_config(unsigned int to_syslog)
> +-{
> +-	FILE *f;
> +-	char buf[MAX_LINE_LEN];
> +-	char *res;
> +-
> +-	f = open_fopen_r(DEFAULTS_CONFIG_FILE);
> +-	if (!f)
> +-		return 0;
> +-
> +-	while ((res = fgets(buf, MAX_LINE_LEN, f))) {
> +-		char *key, *value;
> +-
> +-		if (!parse_line(res, &key, &value))
> +-			continue;
> +-
> +-		if (check_set_config_value(key, ENV_NAME_MASTER_MAP, value, to_syslog) ||
> +-		    check_set_config_value(key, ENV_NAME_TIMEOUT, value, to_syslog) ||
> +-		    check_set_config_value(key, ENV_NAME_NEGATIVE_TIMEOUT, value, to_syslog) ||
> +-		    check_set_config_value(key, ENV_NAME_BROWSE_MODE, value, to_syslog) ||
> +-		    check_set_config_value(key, ENV_NAME_LOGGING, value, to_syslog) ||
> +-		    check_set_config_value(key, ENV_LDAP_TIMEOUT, value, to_syslog) ||
> +-		    check_set_config_value(key, ENV_LDAP_NETWORK_TIMEOUT, value, to_syslog) ||
> +-		    check_set_config_value(key, ENV_NAME_MAP_OBJ_CLASS, value, to_syslog) ||
> +-		    check_set_config_value(key, ENV_NAME_ENTRY_OBJ_CLASS, value, to_syslog) ||
> +-		    check_set_config_value(key, ENV_NAME_MAP_ATTR, value, to_syslog) ||
> +-		    check_set_config_value(key, ENV_NAME_ENTRY_ATTR, value, to_syslog) ||
> +-		    check_set_config_value(key, ENV_NAME_VALUE_ATTR, value, to_syslog) ||
> +-		    check_set_config_value(key, ENV_APPEND_OPTIONS, value, to_syslog) ||
> +-		    check_set_config_value(key, ENV_MOUNT_WAIT, value, to_syslog) ||
> +-		    check_set_config_value(key, ENV_UMOUNT_WAIT, value, to_syslog) ||
> +-		    check_set_config_value(key, ENV_AUTH_CONF_FILE, value, to_syslog) ||
> +-		    check_set_config_value(key, ENV_MAP_HASH_TABLE_SIZE, value, to_syslog) ||
> +-		    check_set_config_value(key, ENV_MOUNT_NFS_DEFAULT_PROTOCOL, value, to_syslog))
> +-			;
> +-	}
> +-
> +-	if (!feof(f) || ferror(f)) {
> +-		if (!to_syslog) {
> +-			fprintf(stderr,
> +-				"fgets returned error %d while reading %s\n",
> +-				ferror(f), DEFAULTS_CONFIG_FILE);
> +-		} else {
> +-			logmsg("fgets returned error %d while reading %s",
> +-			      ferror(f), DEFAULTS_CONFIG_FILE);
> +-		}
> +-		fclose(f);
> +-		return 0;
> +-	}
> +-
> +-	fclose(f);
> +-	return 1;
> +-}
> +-
> +-const char *defaults_get_master_map(void)
> +-{
> +-	char *master;
> +-
> +-	master = get_env_string(ENV_NAME_MASTER_MAP);
> +-	if (!master)
> +-		return strdup(default_master_map_name);
> +-
> +-	return (const char *) master;
> +-}
> +-
> +-int defaults_master_set(void)
> +-{
> +-	char *val = getenv(ENV_NAME_MASTER_MAP);
> +-	if (!val)
> +-		return 0;
> +-
> +-	return 1;
> +-}
> +-
> +-unsigned int defaults_get_timeout(void)
> +-{
> +-	long timeout;
> +-
> +-	timeout = get_env_number(ENV_NAME_TIMEOUT);
> +-	if (timeout < 0)
> +-		timeout = DEFAULT_TIMEOUT;
> +-
> +-	return (unsigned int) timeout;
> +-}
> +-
> +-unsigned int defaults_get_negative_timeout(void)
> +-{
> +-	long n_timeout;
> +-
> +-	n_timeout = get_env_number(ENV_NAME_NEGATIVE_TIMEOUT);
> +-	if (n_timeout <= 0)
> +-		n_timeout = DEFAULT_NEGATIVE_TIMEOUT;
> +-
> +-	return (unsigned int) n_timeout;
> +-}
> +-
> +-unsigned int defaults_get_browse_mode(void)
> +-{
> +-	int res;
> +-
> +-	res = get_env_yesno(ENV_NAME_BROWSE_MODE);
> +-	if (res < 0)
> +-		res = DEFAULT_BROWSE_MODE;
> +-
> +-	return res;
> +-}
> +-
> +-unsigned int defaults_get_logging(void)
> +-{
> +-	char *res;
> +-	unsigned int logging = DEFAULT_LOGGING;
> +-
> +-	res = get_env_string(ENV_NAME_LOGGING);
> +-	if (!res)
> +-		return logging;
> +-
> +-	if (!strcasecmp(res, "none"))
> +-		logging = DEFAULT_LOGGING;
> +-	else {
> +-		if (!strcasecmp(res, "verbose"))
> +-			logging |= LOGOPT_VERBOSE;
> +-
> +-		if (!strcasecmp(res, "debug"))
> +-			logging |= LOGOPT_DEBUG;
> +-	}
> +-
> +-	free(res);
> +-
> +-	return logging;
> +-}
> +-
> +-unsigned int defaults_get_ldap_timeout(void)
> +-{
> +-	int res;
> +-
> +-	res = get_env_number(ENV_LDAP_TIMEOUT);
> +-	if (res < 0)
> +-		res = DEFAULT_LDAP_TIMEOUT;
> +-
> +-	return res;
> +-}
> +-
> +-unsigned int defaults_get_ldap_network_timeout(void)
> +-{
> +-	int res;
> +-
> +-	res = get_env_number(ENV_LDAP_NETWORK_TIMEOUT);
> +-	if (res < 0)
> +-		res = DEFAULT_LDAP_NETWORK_TIMEOUT;
> +-
> +-	return res;
> +-}
> +-
> + struct ldap_schema *defaults_get_default_schema(void)
> + {
> + 	struct ldap_schema *schema;
> +@@ -645,6 +489,167 @@ struct ldap_schema *defaults_get_schema(void)
> + 
> + 	return schema;
> + }
> ++#endif
> ++
> ++/*
> ++ * Read config env variables and check they have been set.
> ++ *
> ++ * This simple minded routine assumes the config file
> ++ * is valid bourne shell script without spaces around "="
> ++ * and that it has valid values.
> ++ */
> ++unsigned int defaults_read_config(unsigned int to_syslog)
> ++{
> ++	FILE *f;
> ++	char buf[MAX_LINE_LEN];
> ++	char *res;
> ++
> ++	f = open_fopen_r(DEFAULTS_CONFIG_FILE);
> ++	if (!f)
> ++		return 0;
> ++
> ++	while ((res = fgets(buf, MAX_LINE_LEN, f))) {
> ++		char *key, *value;
> ++
> ++		if (!parse_line(res, &key, &value))
> ++			continue;
> ++
> ++		if (check_set_config_value(key, ENV_NAME_MASTER_MAP, value, to_syslog) ||
> ++		    check_set_config_value(key, ENV_NAME_TIMEOUT, value, to_syslog) ||
> ++		    check_set_config_value(key, ENV_NAME_NEGATIVE_TIMEOUT, value, to_syslog) ||
> ++		    check_set_config_value(key, ENV_NAME_BROWSE_MODE, value, to_syslog) ||
> ++		    check_set_config_value(key, ENV_NAME_LOGGING, value, to_syslog) ||
> ++		    check_set_config_value(key, ENV_LDAP_TIMEOUT, value, to_syslog) ||
> ++		    check_set_config_value(key, ENV_LDAP_NETWORK_TIMEOUT, value, to_syslog) ||
> ++		    check_set_config_value(key, ENV_NAME_MAP_OBJ_CLASS, value, to_syslog) ||
> ++		    check_set_config_value(key, ENV_NAME_ENTRY_OBJ_CLASS, value, to_syslog) ||
> ++		    check_set_config_value(key, ENV_NAME_MAP_ATTR, value, to_syslog) ||
> ++		    check_set_config_value(key, ENV_NAME_ENTRY_ATTR, value, to_syslog) ||
> ++		    check_set_config_value(key, ENV_NAME_VALUE_ATTR, value, to_syslog) ||
> ++		    check_set_config_value(key, ENV_APPEND_OPTIONS, value, to_syslog) ||
> ++		    check_set_config_value(key, ENV_MOUNT_WAIT, value, to_syslog) ||
> ++		    check_set_config_value(key, ENV_UMOUNT_WAIT, value, to_syslog) ||
> ++		    check_set_config_value(key, ENV_AUTH_CONF_FILE, value, to_syslog) ||
> ++		    check_set_config_value(key, ENV_MAP_HASH_TABLE_SIZE, value, to_syslog) ||
> ++		    check_set_config_value(key, ENV_MOUNT_NFS_DEFAULT_PROTOCOL, value, to_syslog))
> ++			;
> ++	}
> ++
> ++	if (!feof(f) || ferror(f)) {
> ++		if (!to_syslog) {
> ++			fprintf(stderr,
> ++				"fgets returned error %d while reading %s\n",
> ++				ferror(f), DEFAULTS_CONFIG_FILE);
> ++		} else {
> ++			logmsg("fgets returned error %d while reading %s",
> ++			      ferror(f), DEFAULTS_CONFIG_FILE);
> ++		}
> ++		fclose(f);
> ++		return 0;
> ++	}
> ++
> ++	fclose(f);
> ++	return 1;
> ++}
> ++
> ++const char *defaults_get_master_map(void)
> ++{
> ++	char *master;
> ++
> ++	master = get_env_string(ENV_NAME_MASTER_MAP);
> ++	if (!master)
> ++		return strdup(default_master_map_name);
> ++
> ++	return (const char *) master;
> ++}
> ++
> ++int defaults_master_set(void)
> ++{
> ++	char *val = getenv(ENV_NAME_MASTER_MAP);
> ++	if (!val)
> ++		return 0;
> ++
> ++	return 1;
> ++}
> ++
> ++unsigned int defaults_get_timeout(void)
> ++{
> ++	long timeout;
> ++
> ++	timeout = get_env_number(ENV_NAME_TIMEOUT);
> ++	if (timeout < 0)
> ++		timeout = DEFAULT_TIMEOUT;
> ++
> ++	return (unsigned int) timeout;
> ++}
> ++
> ++unsigned int defaults_get_negative_timeout(void)
> ++{
> ++	long n_timeout;
> ++
> ++	n_timeout = get_env_number(ENV_NAME_NEGATIVE_TIMEOUT);
> ++	if (n_timeout <= 0)
> ++		n_timeout = DEFAULT_NEGATIVE_TIMEOUT;
> ++
> ++	return (unsigned int) n_timeout;
> ++}
> ++
> ++unsigned int defaults_get_browse_mode(void)
> ++{
> ++	int res;
> ++
> ++	res = get_env_yesno(ENV_NAME_BROWSE_MODE);
> ++	if (res < 0)
> ++		res = DEFAULT_BROWSE_MODE;
> ++
> ++	return res;
> ++}
> ++
> ++unsigned int defaults_get_logging(void)
> ++{
> ++	char *res;
> ++	unsigned int logging = DEFAULT_LOGGING;
> ++
> ++	res = get_env_string(ENV_NAME_LOGGING);
> ++	if (!res)
> ++		return logging;
> ++
> ++	if (!strcasecmp(res, "none"))
> ++		logging = DEFAULT_LOGGING;
> ++	else {
> ++		if (!strcasecmp(res, "verbose"))
> ++			logging |= LOGOPT_VERBOSE;
> ++
> ++		if (!strcasecmp(res, "debug"))
> ++			logging |= LOGOPT_DEBUG;
> ++	}
> ++
> ++	free(res);
> ++
> ++	return logging;
> ++}
> ++
> ++unsigned int defaults_get_ldap_timeout(void)
> ++{
> ++	int res;
> ++
> ++	res = get_env_number(ENV_LDAP_TIMEOUT);
> ++	if (res < 0)
> ++		res = DEFAULT_LDAP_TIMEOUT;
> ++
> ++	return res;
> ++}
> ++
> ++unsigned int defaults_get_ldap_network_timeout(void)
> ++{
> ++	int res;
> ++
> ++	res = get_env_number(ENV_LDAP_NETWORK_TIMEOUT);
> ++	if (res < 0)
> ++		res = DEFAULT_LDAP_NETWORK_TIMEOUT;
> ++
> ++	return res;
> ++}
> + 
> + unsigned int defaults_get_mount_nfs_default_proto(void)
> + {
> +diff --git a/modules/lookup_ldap.c b/modules/lookup_ldap.c
> +index 3bc4dc5..431e50d 100644
> +--- a/modules/lookup_ldap.c
> ++++ b/modules/lookup_ldap.c
> +@@ -28,6 +28,7 @@
> + #include <arpa/nameser.h>
> + #include <resolv.h>
> + #include <lber.h>
> ++#include <libxml/tree.h>
> + 
> + #define MODULE_LOOKUP
> + #include "automount.h"
> diff --git a/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-make-yellow-pages-support-optional.patch b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-make-yellow-pages-support-optional.patch
> index 9504d8e..4199690 100644
> --- a/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-make-yellow-pages-support-optional.patch
> +++ b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-make-yellow-pages-support-optional.patch
> @@ -1,5 +1,3 @@
> -Upstream-Status: Backport
> -
>  autofs-5.0.7 - make yellow pages support optional
>  
>  From: Chris Packham <chris.packham@alliedtelesis.co.nz>
> @@ -8,6 +6,7 @@ If rpcsvc/ypclnt.h is not available don't compile in Yellow Pages
>  support.
>  ---
>  
> + CHANGELOG           |    1 +
>   Makefile.conf.in    |    3 +++
>   configure           |   16 ++++++++++++++++
>   configure.in        |    9 +++++++++
> @@ -17,6 +16,18 @@ support.
>   7 files changed, 39 insertions(+), 3 deletions(-)
>  
>  
> +diff --git a/CHANGELOG b/CHANGELOG
> +index 1130db6..ed17163 100644
> +--- a/CHANGELOG
> ++++ b/CHANGELOG
> +@@ -25,6 +25,7 @@
> + - don't schedule new alarms after readmap.
> + - use numeric protocol ids instead of protoent structs.
> + - lib/defaults.c: use WITH_LDAP conditional around LDAP types.
> ++- make yellow pages support optional.
> + 
> + 25/07/2012 autofs-5.0.7
> + =======================
>  diff --git a/Makefile.conf.in b/Makefile.conf.in
>  index 802318b..3766d45 100644
>  --- a/Makefile.conf.in
> diff --git a/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-modules-replicated-use-sin6.addr-s6_addr32.patch b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-modules-replicated-use-sin6.addr-s6_addr32.patch
> new file mode 100644
> index 0000000..4516bc5
> --- /dev/null
> +++ b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-modules-replicated-use-sin6.addr-s6_addr32.patch
> @@ -0,0 +1,39 @@
> +autofs-5.0.7 -  modules/replicated.c: use sin6_addr.s6_addr32
> +
> +From: Chris Packham <chris.packham@alliedtelesis.co.nz>
> +
> +The exported in6.h kernel header provides a convenience macro s6_addr32
> +for accessing the 32bit words of an ipv6 address. Use this instead of
> +__in6_u.__u6_addr32.
> +---
> +
> + CHANGELOG            |    1 +
> + modules/replicated.c |    2 +-
> + 2 files changed, 2 insertions(+), 1 deletions(-)
> +
> +
> +diff --git a/CHANGELOG b/CHANGELOG
> +index ed17163..4eaa9f9 100644
> +--- a/CHANGELOG
> ++++ b/CHANGELOG
> +@@ -26,6 +26,7 @@
> + - use numeric protocol ids instead of protoent structs.
> + - lib/defaults.c: use WITH_LDAP conditional around LDAP types.
> + - make yellow pages support optional.
> ++- modules/replicated.c: use sin6_addr.s6_addr32.
> + 
> + 25/07/2012 autofs-5.0.7
> + =======================
> +diff --git a/modules/replicated.c b/modules/replicated.c
> +index dbd5513..26f64b8 100644
> +--- a/modules/replicated.c
> ++++ b/modules/replicated.c
> +@@ -1146,7 +1146,7 @@ try_name:
> + 				rr4++;
> + 		} else if (this->ai_family == AF_INET6) {
> + 			struct sockaddr_in6 *addr = (struct sockaddr_in6 *) this->ai_addr;
> +-			if (!IN6_IS_ADDR_LOOPBACK(addr->sin6_addr.__in6_u.__u6_addr32))
> ++			if (!IN6_IS_ADDR_LOOPBACK(addr->sin6_addr.s6_addr32))
> + 				rr6++;
> + 		}
> + 		this = this->ai_next;
> diff --git a/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-update-kernel-include-files.patch b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-update-kernel-include-files.patch
> new file mode 100644
> index 0000000..3b6bb92
> --- /dev/null
> +++ b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/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@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/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-use-numeric-protocol-ids-instead-of-protoent-structs.patch b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-use-numeric-protocol-ids-instead-of-protoent-structs.patch
> new file mode 100644
> index 0000000..113b0a0
> --- /dev/null
> +++ b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-use-numeric-protocol-ids-instead-of-protoent-structs.patch
> @@ -0,0 +1,471 @@
> +autofs-5.0.7 - use numeric protocol ids instead of protoent structs
> +
> +From: Leonardo Chiquitto <leonardo.lists@gmail.com>
> +
> +The function getprotobyname() is not reentrant, so we can't call
> +it simultaneously from multiple threads. Instead of switching to
> +the reentrant version which adds more complexity to the code,
> +lets use numeric protocol IDs instead of protoent structures.
> +---
> +
> + CHANGELOG            |    1 +
> + include/rpc_subs.h   |    4 +--
> + lib/rpc_subs.c       |   80 ++++++++++++++++++--------------------------------
> + modules/replicated.c |   42 +++++++++++---------------
> + 4 files changed, 50 insertions(+), 77 deletions(-)
> +
> +
> +diff --git a/CHANGELOG b/CHANGELOG
> +index 4cf5621..ba1d65b 100644
> +--- a/CHANGELOG
> ++++ b/CHANGELOG
> +@@ -23,6 +23,7 @@
> + - fix use get_proximity() without libtirpc.
> + - don't use dirent d_type to filter out files in scandir()
> + - don't schedule new alarms after readmap.
> ++- use numeric protocol ids instead of protoent structs.
> + 
> + 25/07/2012 autofs-5.0.7
> + =======================
> +diff --git a/include/rpc_subs.h b/include/rpc_subs.h
> +index ca474d9..b6d59f9 100644
> +--- a/include/rpc_subs.h
> ++++ b/include/rpc_subs.h
> +@@ -54,7 +54,7 @@ struct conn_info {
> + 	unsigned short port;
> + 	unsigned long program;
> + 	unsigned long version;
> +-	struct protoent *proto;
> ++	int proto;
> + 	unsigned int send_sz;
> + 	unsigned int recv_sz;
> + 	struct timeval timeout;
> +@@ -66,7 +66,7 @@ int rpc_udp_getclient(struct conn_info *, unsigned int, unsigned int);
> + void rpc_destroy_udp_client(struct conn_info *);
> + int rpc_tcp_getclient(struct conn_info *, unsigned int, unsigned int);
> + void rpc_destroy_tcp_client(struct conn_info *);
> +-int rpc_portmap_getclient(struct conn_info *, const char *, struct sockaddr *, size_t, const char *, unsigned int);
> ++int rpc_portmap_getclient(struct conn_info *, const char *, struct sockaddr *, size_t, int, unsigned int);
> + int rpc_portmap_getport(struct conn_info *, struct pmap *, unsigned short *);
> + int rpc_ping_proto(struct conn_info *);
> + int rpc_ping(const char *, long, long, unsigned int);
> +diff --git a/lib/rpc_subs.c b/lib/rpc_subs.c
> +index d33a3c4..ad1d557 100644
> +--- a/lib/rpc_subs.c
> ++++ b/lib/rpc_subs.c
> +@@ -170,7 +170,7 @@ static int rpc_do_create_client(struct sockaddr *addr, struct conn_info *info, i
> + 
> + 	*client = NULL;
> + 
> +-	proto = info->proto->p_proto;
> ++	proto = info->proto;
> + 	if (proto == IPPROTO_UDP)
> + 		type = SOCK_DGRAM;
> + 	else
> +@@ -201,7 +201,7 @@ static int rpc_do_create_client(struct sockaddr *addr, struct conn_info *info, i
> + 	in4_raddr = (struct sockaddr_in *) addr;
> + 	in4_raddr->sin_port = htons(info->port);
> + 
> +-	switch (info->proto->p_proto) {
> ++	switch (info->proto) {
> + 	case IPPROTO_UDP:
> + 		clnt = clntudp_bufcreate(in4_raddr,
> + 					 info->program, info->version,
> +@@ -241,7 +241,7 @@ static int rpc_do_create_client(struct sockaddr *addr, struct conn_info *info, i
> + 
> + 	*client = NULL;
> + 
> +-	proto = info->proto->p_proto;
> ++	proto = info->proto;
> + 	if (proto == IPPROTO_UDP)
> + 		type = SOCK_DGRAM;
> + 	else
> +@@ -292,11 +292,11 @@ static int rpc_do_create_client(struct sockaddr *addr, struct conn_info *info, i
> + 	nb_addr.maxlen = nb_addr.len = slen;
> + 	nb_addr.buf = addr;
> + 
> +-	if (info->proto->p_proto == IPPROTO_UDP)
> ++	if (info->proto == IPPROTO_UDP)
> + 		clnt = clnt_dg_create(*fd, &nb_addr,
> + 				      info->program, info->version,
> + 				      info->send_sz, info->recv_sz);
> +-	else if (info->proto->p_proto == IPPROTO_TCP) {
> ++	else if (info->proto == IPPROTO_TCP) {
> + 		ret = connect_nb(*fd, addr, slen, &info->timeout);
> + 		if (ret < 0)
> + 			return ret;
> +@@ -355,7 +355,7 @@ static int create_client(struct conn_info *info, CLIENT **client)
> + 	memset(&hints, 0, sizeof(hints));
> + 	hints.ai_flags = AI_ADDRCONFIG;
> + 	hints.ai_family = AF_UNSPEC;
> +-	if (info->proto->p_proto == IPPROTO_UDP)
> ++	if (info->proto == IPPROTO_UDP)
> + 		hints.ai_socktype = SOCK_DGRAM;
> + 	else
> + 		hints.ai_socktype = SOCK_STREAM;
> +@@ -370,7 +370,7 @@ static int create_client(struct conn_info *info, CLIENT **client)
> + 
> + 	haddr = ai;
> + 	while (haddr) {
> +-		if (haddr->ai_protocol != info->proto->p_proto) {
> ++		if (haddr->ai_protocol != info->proto) {
> + 			haddr = haddr->ai_next;
> + 			continue;
> + 		}
> +@@ -417,16 +417,11 @@ out_close:
> + int rpc_udp_getclient(struct conn_info *info,
> + 		      unsigned int program, unsigned int version)
> + {
> +-	struct protoent *pe_proto;
> + 	CLIENT *client;
> + 	int ret;
> + 
> + 	if (!info->client) {
> +-		pe_proto = getprotobyname("udp");
> +-		if (!pe_proto)
> +-			return -ENOENT;
> +-
> +-		info->proto = pe_proto;
> ++		info->proto = IPPROTO_UDP;
> + 		info->timeout.tv_sec = RPC_TOUT_UDP;
> + 		info->timeout.tv_usec = 0;
> + 		info->send_sz = UDPMSGSIZE;
> +@@ -458,16 +453,11 @@ void rpc_destroy_udp_client(struct conn_info *info)
> + int rpc_tcp_getclient(struct conn_info *info,
> + 		      unsigned int program, unsigned int version)
> + {
> +-	struct protoent *pe_proto;
> + 	CLIENT *client;
> + 	int ret;
> + 
> + 	if (!info->client) {
> +-		pe_proto = getprotobyname("tcp");
> +-		if (!pe_proto)
> +-			return -ENOENT;
> +-
> +-		info->proto = pe_proto;
> ++		info->proto = IPPROTO_TCP;
> + 		info->timeout.tv_sec = RPC_TOUT_TCP;
> + 		info->timeout.tv_usec = 0;
> + 		info->send_sz = 0;
> +@@ -513,23 +503,18 @@ void rpc_destroy_tcp_client(struct conn_info *info)
> + 
> + int rpc_portmap_getclient(struct conn_info *info,
> + 			  const char *host, struct sockaddr *addr, size_t addr_len,
> +-			  const char *proto, unsigned int option)
> ++			  int proto, unsigned int option)
> + {
> +-	struct protoent *pe_proto;
> + 	CLIENT *client;
> + 	int ret;
> + 
> +-	pe_proto = getprotobyname(proto);
> +-	if (!pe_proto)
> +-		return -ENOENT;
> +-
> + 	info->host = host;
> + 	info->addr = addr;
> + 	info->addr_len = addr_len;
> + 	info->program = PMAPPROG;
> + 	info->port = PMAPPORT;
> + 	info->version = PMAPVERS;
> +-	info->proto = pe_proto;
> ++	info->proto = proto;
> + 	info->send_sz = RPCSMALLMSGSIZE;
> + 	info->recv_sz = RPCSMALLMSGSIZE;
> + 	info->timeout.tv_sec = PMAP_TOUT_UDP;
> +@@ -537,7 +522,7 @@ int rpc_portmap_getclient(struct conn_info *info,
> + 	info->close_option = option;
> + 	info->client = NULL;
> + 
> +-	if (pe_proto->p_proto == IPPROTO_TCP)
> ++	if (info->proto == IPPROTO_TCP)
> + 		info->timeout.tv_sec = PMAP_TOUT_TCP;
> + 
> + 	ret = create_client(info, &client);
> +@@ -555,7 +540,7 @@ int rpc_portmap_getport(struct conn_info *info,
> + 	struct conn_info pmap_info;
> + 	CLIENT *client;
> + 	enum clnt_stat status;
> +-	int proto = info->proto->p_proto;
> ++	int proto = info->proto;
> + 	int ret;
> + 
> + 	memset(&pmap_info, 0, sizeof(struct conn_info));
> +@@ -633,13 +618,13 @@ int rpc_ping_proto(struct conn_info *info)
> + {
> + 	CLIENT *client;
> + 	enum clnt_stat status;
> +-	int proto = info->proto->p_proto;
> ++	int proto = info->proto;
> + 	int ret;
> + 
> + 	if (info->client)
> + 		client = info->client;
> + 	else {
> +-		if (info->proto->p_proto == IPPROTO_UDP) {
> ++		if (info->proto == IPPROTO_UDP) {
> + 			info->send_sz = UDPMSGSIZE;
> + 			info->recv_sz = UDPMSGSIZE;
> + 		}
> +@@ -688,7 +673,7 @@ int rpc_ping_proto(struct conn_info *info)
> + 
> + static unsigned int __rpc_ping(const char *host,
> + 				unsigned long version,
> +-				char *proto,
> ++				int proto,
> + 				long seconds, long micros,
> + 				unsigned int option)
> + {
> +@@ -696,6 +681,7 @@ static unsigned int __rpc_ping(const char *host,
> + 	struct conn_info info;
> + 	struct pmap parms;
> + 
> ++	info.proto = proto;
> + 	info.host = host;
> + 	info.addr = NULL;
> + 	info.addr_len = 0;
> +@@ -710,13 +696,9 @@ static unsigned int __rpc_ping(const char *host,
> + 
> + 	status = RPC_PING_FAIL;
> + 
> +-	info.proto = getprotobyname(proto);
> +-	if (!info.proto)
> +-		return status;
> +-
> + 	parms.pm_prog = NFS_PROGRAM;
> + 	parms.pm_vers = version;
> +-	parms.pm_prot = info.proto->p_proto;
> ++	parms.pm_prot = info.proto;
> + 	parms.pm_port = 0;
> + 
> + 	status = rpc_portmap_getport(&info, &parms, &info.port);
> +@@ -734,19 +716,19 @@ int rpc_ping(const char *host, long seconds, long micros, unsigned int option)
> + 	unsigned long vers2 = NFS2_VERSION;
> + 	unsigned int status;
> + 
> +-	status = __rpc_ping(host, vers2, "udp", seconds, micros, option);
> ++	status = __rpc_ping(host, vers2, IPPROTO_UDP, seconds, micros, option);
> + 	if (status > 0)
> + 		return RPC_PING_V2 | RPC_PING_UDP;
> + 
> +-	status = __rpc_ping(host, vers3, "udp", seconds, micros, option);
> ++	status = __rpc_ping(host, vers3, IPPROTO_UDP, seconds, micros, option);
> + 	if (status > 0)
> + 		return RPC_PING_V3 | RPC_PING_UDP;
> + 
> +-	status = __rpc_ping(host, vers2, "tcp", seconds, micros, option);
> ++	status = __rpc_ping(host, vers2, IPPROTO_TCP, seconds, micros, option);
> + 	if (status > 0)
> + 		return RPC_PING_V2 | RPC_PING_TCP;
> + 
> +-	status = __rpc_ping(host, vers3, "tcp", seconds, micros, option);
> ++	status = __rpc_ping(host, vers3, IPPROTO_TCP, seconds, micros, option);
> + 	if (status > 0)
> + 		return RPC_PING_V3 | RPC_PING_TCP;
> + 
> +@@ -769,7 +751,7 @@ int rpc_time(const char *host,
> + 	double taken;
> + 	struct timeval start, end;
> + 	struct timezone tz;
> +-	char *proto = (ping_proto & RPC_PING_UDP) ? "udp" : "tcp";
> ++	int proto = (ping_proto & RPC_PING_UDP) ? IPPROTO_UDP : IPPROTO_TCP;
> + 	unsigned long vers = ping_vers;
> + 
> + 	gettimeofday(&start, &tz);
> +@@ -791,12 +773,12 @@ static int rpc_get_exports_proto(struct conn_info *info, exports *exp)
> + {
> + 	CLIENT *client;
> + 	enum clnt_stat status;
> +-	int proto = info->proto->p_proto;
> ++	int proto = info->proto;
> + 	unsigned int option = info->close_option;
> + 	int vers_entry;
> + 	int ret;
> + 
> +-	if (info->proto->p_proto == IPPROTO_UDP) {
> ++	if (info->proto == IPPROTO_UDP) {
> + 		info->send_sz = UDPMSGSIZE;
> + 		info->recv_sz = UDPMSGSIZE;
> + 	}
> +@@ -903,11 +885,9 @@ exports rpc_get_exports(const char *host, long seconds, long micros, unsigned in
> + 	parms.pm_port = 0;
> + 
> + 	/* Try UDP first */
> +-	info.proto = getprotobyname("udp");
> +-	if (!info.proto)
> +-		goto try_tcp;
> ++	info.proto = IPPROTO_UDP;
> + 
> +-	parms.pm_prot = info.proto->p_proto;
> ++	parms.pm_prot = info.proto;
> + 
> + 	status = rpc_portmap_getport(&info, &parms, &info.port);
> + 	if (status < 0)
> +@@ -920,11 +900,9 @@ exports rpc_get_exports(const char *host, long seconds, long micros, unsigned in
> + 		return exportlist;
> + 
> + try_tcp:
> +-	info.proto = getprotobyname("tcp");
> +-	if (!info.proto)
> +-		return NULL;
> ++	info.proto = IPPROTO_TCP;
> + 
> +-	parms.pm_prot = info.proto->p_proto;
> ++	parms.pm_prot = info.proto;
> + 
> + 	status = rpc_portmap_getport(&info, &parms, &info.port);
> + 	if (status < 0)
> +diff --git a/modules/replicated.c b/modules/replicated.c
> +index 6b96320..dbd5513 100644
> +--- a/modules/replicated.c
> ++++ b/modules/replicated.c
> +@@ -419,7 +419,7 @@ void free_host_list(struct host **list)
> + 
> + static unsigned int get_nfs_info(unsigned logopt, struct host *host,
> + 			 struct conn_info *pm_info, struct conn_info *rpc_info,
> +-			 const char *proto, unsigned int version, int port)
> ++			 int proto, unsigned int version, int port)
> + {
> + 	unsigned int random_selection = host->options & MOUNT_FLAG_RANDOM_SELECT;
> + 	unsigned int use_weight_only = host->options & MOUNT_FLAG_USE_WEIGHT_ONLY;
> +@@ -433,22 +433,18 @@ static unsigned int get_nfs_info(unsigned logopt, struct host *host,
> + 	int status, count = 0;
> + 
> + 	if (host->addr)
> +-		debug(logopt, "called with host %s(%s) proto %s version 0x%x",
> ++		debug(logopt, "called with host %s(%s) proto %d version 0x%x",
> + 		      host->name, get_addr_string(host->addr, buf, len),
> + 		      proto, version);
> + 	else
> + 		debug(logopt,
> +-		      "called for host %s proto %s version 0x%x",
> ++		      "called for host %s proto %d version 0x%x",
> + 		      host->name, proto, version);
> + 
> +-	rpc_info->proto = getprotobyname(proto);
> +-	if (!rpc_info->proto)
> +-		return 0;
> +-
> ++	rpc_info->proto = proto;
> + 	memset(&parms, 0, sizeof(struct pmap));
> +-
> + 	parms.pm_prog = NFS_PROGRAM;
> +-	parms.pm_prot = rpc_info->proto->p_proto;
> ++	parms.pm_prot = proto;
> + 
> + 	if (!(version & NFS4_REQUESTED))
> + 		goto v3_ver;
> +@@ -479,7 +475,7 @@ static unsigned int get_nfs_info(unsigned logopt, struct host *host,
> + 		}
> + 	}
> + 
> +-	if (rpc_info->proto->p_proto == IPPROTO_UDP)
> ++	if (rpc_info->proto == IPPROTO_UDP)
> + 		status = rpc_udp_getclient(rpc_info, NFS_PROGRAM, NFS4_VERSION);
> + 	else
> + 		status = rpc_tcp_getclient(rpc_info, NFS_PROGRAM, NFS4_VERSION);
> +@@ -540,7 +536,7 @@ v3_ver:
> + 			goto v2_ver;
> + 	}
> + 
> +-	if (rpc_info->proto->p_proto == IPPROTO_UDP)
> ++	if (rpc_info->proto == IPPROTO_UDP)
> + 		status = rpc_udp_getclient(rpc_info, NFS_PROGRAM, NFS3_VERSION);
> + 	else
> + 		status = rpc_tcp_getclient(rpc_info, NFS_PROGRAM, NFS3_VERSION);
> +@@ -587,7 +583,7 @@ v2_ver:
> + 			goto done_ver;
> + 	}
> + 
> +-	if (rpc_info->proto->p_proto == IPPROTO_UDP)
> ++	if (rpc_info->proto == IPPROTO_UDP)
> + 		status = rpc_udp_getclient(rpc_info, NFS_PROGRAM, NFS2_VERSION);
> + 	else
> + 		status = rpc_tcp_getclient(rpc_info, NFS_PROGRAM, NFS2_VERSION);
> +@@ -618,7 +614,7 @@ v2_ver:
> + 	}
> + 
> + done_ver:
> +-	if (rpc_info->proto->p_proto == IPPROTO_UDP) {
> ++	if (rpc_info->proto == IPPROTO_UDP) {
> + 		rpc_destroy_udp_client(rpc_info);
> + 		rpc_destroy_udp_client(pm_info);
> + 	} else {
> +@@ -675,7 +671,7 @@ static int get_vers_and_cost(unsigned logopt, struct host *host,
> + 
> + 	if (version & TCP_REQUESTED) {
> + 		supported = get_nfs_info(logopt, host,
> +-				   &pm_info, &rpc_info, "tcp", vers, port);
> ++				   &pm_info, &rpc_info, IPPROTO_TCP, vers, port);
> + 		if (IS_ERR(supported)) {
> + 			if (ERR(supported) == EHOSTUNREACH ||
> + 			    ERR(supported) == ETIMEDOUT)
> +@@ -688,7 +684,7 @@ static int get_vers_and_cost(unsigned logopt, struct host *host,
> + 
> + 	if (version & UDP_REQUESTED) {
> + 		supported = get_nfs_info(logopt, host,
> +-				   &pm_info, &rpc_info, "udp", vers, port);
> ++				   &pm_info, &rpc_info, IPPROTO_UDP, vers, port);
> + 		if (IS_ERR(supported)) {
> + 			if (!ret && ERR(supported) == ETIMEDOUT)
> + 				return ret;
> +@@ -709,7 +705,7 @@ static int get_supported_ver_and_cost(unsigned logopt, struct host *host,
> + 	socklen_t len = INET6_ADDRSTRLEN;
> + 	char buf[len + 1];
> + 	struct conn_info pm_info, rpc_info;
> +-	const char *proto;
> ++	int proto;
> + 	unsigned int vers;
> + 	struct timeval start, end;
> + 	struct timezone tz;
> +@@ -748,10 +744,10 @@ static int get_supported_ver_and_cost(unsigned logopt, struct host *host,
> + 	 *  So, we do the conversion here.
> + 	 */
> + 	if (version & UDP_SELECTED_MASK) {
> +-		proto = "udp";
> ++		proto = IPPROTO_UDP;
> + 		version >>= 8;
> + 	} else
> +-		proto = "tcp";
> ++		proto = IPPROTO_TCP;
> + 
> + 	switch (version) {
> + 	case NFS2_SUPPORTED:
> +@@ -768,9 +764,7 @@ static int get_supported_ver_and_cost(unsigned logopt, struct host *host,
> + 		return 0;
> + 	}
> + 
> +-	rpc_info.proto = getprotobyname(proto);
> +-	if (!rpc_info.proto)
> +-		return 0;
> ++	rpc_info.proto = proto;
> + 
> + 	if (port > 0)
> + 		rpc_info.port = port;
> +@@ -786,14 +780,14 @@ static int get_supported_ver_and_cost(unsigned logopt, struct host *host,
> + 
> + 		memset(&parms, 0, sizeof(struct pmap));
> + 		parms.pm_prog = NFS_PROGRAM;
> +-		parms.pm_prot = rpc_info.proto->p_proto;
> ++		parms.pm_prot = rpc_info.proto;
> + 		parms.pm_vers = vers;
> + 		ret = rpc_portmap_getport(&pm_info, &parms, &rpc_info.port);
> + 		if (ret < 0)
> + 			goto done;
> + 	}
> + 
> +-	if (rpc_info.proto->p_proto == IPPROTO_UDP)
> ++	if (rpc_info.proto == IPPROTO_UDP)
> + 		status = rpc_udp_getclient(&rpc_info, NFS_PROGRAM, vers);
> + 	else
> + 		status = rpc_tcp_getclient(&rpc_info, NFS_PROGRAM, vers);
> +@@ -815,7 +809,7 @@ static int get_supported_ver_and_cost(unsigned logopt, struct host *host,
> + 		}
> + 	}
> + done:
> +-	if (rpc_info.proto->p_proto == IPPROTO_UDP) {
> ++	if (rpc_info.proto == IPPROTO_UDP) {
> + 		rpc_destroy_udp_client(&rpc_info);
> + 		rpc_destroy_udp_client(&pm_info);
> + 	} else {
> diff --git a/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-workaround-missing-GNU-versionsort-extension.patch b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-workaround-missing-GNU-versionsort-extension.patch
> new file mode 100644
> index 0000000..6a1a49e
> --- /dev/null
> +++ b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-workaround-missing-GNU-versionsort-extension.patch
> @@ -0,0 +1,149 @@
> +autofs-5.0.7 - workaround missing GNU versionsort extension
> +
> +From: Chris Packham <chris.packham@alliedtelesis.co.nz>
> +
> +alphasort() and scandir() are specified in POSIX.1-2008, versionsort()
> +is a GNU extension. When versionsort isn't available fallback to using
> +alphasort.
> +---
> +
> + CHANGELOG            |    1 +
> + configure            |   62 ++++++++++++++++++++++++++++++++++++++++++++++++++
> + configure.in         |    6 +++++
> + include/config.h.in  |    3 ++
> + modules/lookup_dir.c |    5 ++++
> + 5 files changed, 77 insertions(+), 0 deletions(-)
> +
> +
> +diff --git a/CHANGELOG b/CHANGELOG
> +index 4eaa9f9..39388a5 100644
> +--- a/CHANGELOG
> ++++ b/CHANGELOG
> +@@ -27,6 +27,7 @@
> + - lib/defaults.c: use WITH_LDAP conditional around LDAP types.
> + - make yellow pages support optional.
> + - modules/replicated.c: use sin6_addr.s6_addr32.
> ++- workaround missing GNU versionsort extension.
> + 
> + 25/07/2012 autofs-5.0.7
> + =======================
> +diff --git a/configure b/configure
> +index cf6428c..c1423d8 100755
> +--- a/configure
> ++++ b/configure
> +@@ -4010,6 +4010,68 @@ $as_echo "yes" >&6; }
> +   KRB5_FLAGS=`$KRB5_CONFIG --cflags`
> + fi
> + 
> ++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing versionsort" >&5
> ++$as_echo_n "checking for library containing versionsort... " >&6; }
> ++if ${ac_cv_search_versionsort+:} false; then :
> ++  $as_echo_n "(cached) " >&6
> ++else
> ++  ac_func_search_save_LIBS=$LIBS
> ++cat confdefs.h - <<_ACEOF >conftest.$ac_ext
> ++/* end confdefs.h.  */
> ++
> ++/* Override any GCC internal prototype to avoid an error.
> ++   Use char because int might match the return type of a GCC
> ++   builtin and then its argument prototype would still apply.  */
> ++#ifdef __cplusplus
> ++extern "C"
> ++#endif
> ++char versionsort ();
> ++int
> ++main ()
> ++{
> ++return versionsort ();
> ++  ;
> ++  return 0;
> ++}
> ++_ACEOF
> ++for ac_lib in '' ; do
> ++  if test -z "$ac_lib"; then
> ++    ac_res="none required"
> ++  else
> ++    ac_res=-l$ac_lib
> ++    LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
> ++  fi
> ++  if ac_fn_c_try_link "$LINENO"; then :
> ++  ac_cv_search_versionsort=$ac_res
> ++fi
> ++rm -f core conftest.err conftest.$ac_objext \
> ++    conftest$ac_exeext
> ++  if ${ac_cv_search_versionsort+:} false; then :
> ++  break
> ++fi
> ++done
> ++if ${ac_cv_search_versionsort+:} false; then :
> ++
> ++else
> ++  ac_cv_search_versionsort=no
> ++fi
> ++rm conftest.$ac_ext
> ++LIBS=$ac_func_search_save_LIBS
> ++fi
> ++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_versionsort" >&5
> ++$as_echo "$ac_cv_search_versionsort" >&6; }
> ++ac_res=$ac_cv_search_versionsort
> ++if test "$ac_res" != no; then :
> ++  test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
> ++
> ++fi
> ++
> ++if test "$ac_cv_search_versionsort" = "no"; then
> ++
> ++$as_echo "#define WITHOUT_VERSIONSORT 1" >>confdefs.h
> ++
> ++fi
> ++
> + #
> + # glibc/libc 6 new libraries
> + #
> +diff --git a/configure.in b/configure.in
> +index 363c376..4029375 100644
> +--- a/configure.in
> ++++ b/configure.in
> +@@ -163,6 +163,12 @@ AF_SLOPPY_MOUNT()
> + AF_CHECK_LIBXML()
> + AF_CHECK_KRB5()
> + 
> ++AC_SEARCH_LIBS([versionsort],[])
> ++if test "$ac_cv_search_versionsort" = "no"; then
> ++	AC_DEFINE(WITHOUT_VERSIONSORT, 1,
> ++		[Define if your C library does not provide versionsort])
> ++fi
> ++
> + #
> + # glibc/libc 6 new libraries
> + #
> +diff --git a/include/config.h.in b/include/config.h.in
> +index 7f1c5b5..a2a05a8 100644
> +--- a/include/config.h.in
> ++++ b/include/config.h.in
> +@@ -135,6 +135,9 @@
> + /* Define to 1 to use the libtirpc tsd usage workaround */
> + #undef TIRPC_WORKAROUND
> + 
> ++/* Define if your C library does not provide versionsort */
> ++#undef WITHOUT_VERSIONSORT
> ++
> + /* Define if using the dmalloc debugging malloc package */
> + #undef WITH_DMALLOC
> + 
> +diff --git a/modules/lookup_dir.c b/modules/lookup_dir.c
> +index 33901c0..07471b7 100644
> +--- a/modules/lookup_dir.c
> ++++ b/modules/lookup_dir.c
> +@@ -39,6 +39,11 @@
> + #define AUTOFS_DIR_EXT ".autofs"
> + #define AUTOFS_DIR_EXTSIZ (sizeof(AUTOFS_DIR_EXT) - 1)
> + 
> ++/* Work around non-GNU systems that don't provide versionsort */
> ++#ifdef WITHOUT_VERSIONSORT
> ++#define versionsort alphasort
> ++#endif
> ++
> + struct lookup_context {
> +   const char *mapname;
> + };
> diff --git a/meta-networking/recipes-daemons/autofs/autofs_5.0.7.bb b/meta-networking/recipes-daemons/autofs/autofs_5.0.7.bb
> index 7d8cf17..6751402 100644
> --- a/meta-networking/recipes-daemons/autofs/autofs_5.0.7.bb
> +++ b/meta-networking/recipes-daemons/autofs/autofs_5.0.7.bb
> @@ -3,7 +3,7 @@ SECTION = "base"
>  LICENSE = "GPL-2.0"
>  LIC_FILES_CHKSUM = "file://COPYING;md5=0636e73ff0215e8d672dc4c32c317bb3"
>  
> -PR = "r2"
> +PR = "r3"
>  
>  DEPENDS += "libtirpc flex-native bison-native"
>  
> @@ -27,7 +27,30 @@ SRC_URI = "${KERNELORG_MIRROR}/linux/daemons/autofs/v5/autofs-${PV}.tar.bz2 \
>             file://autofs-5.0.6-fix-recursive-mount-deadlock.patch \
>             file://autofs-5.0.6-increase-file-map-read-buffer-size.patch \
>             file://autofs-5.0.7-handle-new-location-of-systemd.patch \
> +           file://autofs-5.0.7-fix-map-entry-duplicate-offset-detection.patch \
> +           file://autofs-5.0.7-allow-nsswitch_conf-to-not-contain-automount-lines.patch \
> +           file://autofs-5.0.7-fix-nobind-man-page-description.patch \
> +           file://autofs-5.0.7-fix-submount-offset-delete.patch \
> +           file://autofs-5.0.7-fix-init-script-status-return.patch \
> +           file://autofs-5.0.7-fix-use-get_proximity-without-libtirpc.patch \
> +           file://autofs-5.0.7-dont-use-dirent-d_type-to-filter-out-files-in-scandir.patch \
> +           file://autofs-5.0.7-dont-schedule-new-alarms-after-readmap.patch \
> +           file://autofs-5.0.7-use-numeric-protocol-ids-instead-of-protoent-structs.patch \
> +           file://autofs-5.0.7-lib-defaults-use-WITH_LDAP-conditional-around-LDAP-types.patch \
>             file://autofs-5.0.7-make-yellow-pages-support-optional.patch \
> +           file://autofs-5.0.7-modules-replicated-use-sin6.addr-s6_addr32.patch \
> +           file://autofs-5.0.7-workaround-missing-GNU-versionsort-extension.patch \
> +           file://autofs-5.0.7-dont-fail-on-master-map-self-include.patch \
> +           file://autofs-5.0.7-fix-wildcard-multi-map-regression.patch \
> +           file://autofs-5.0.7-fix-file-descriptor-leak-when-reloading-the-daemon.patch \
> +           file://autofs-5.0.7-depricate-nosymlink-pseudo-option.patch \
> +           file://autofs-5.0.7-add-symlink-pseudo-option.patch \
> +           file://autofs-5.0.7-update-kernel-include-files.patch \
> +           file://autofs-5.0.7-fix-requires-in-spec-file.patch \
> +           file://autofs-5.0.7-fix-libtirpc-build-option.patch \
> +           file://autofs-5.0.7-fix-systemd-unidir-in-spec-file.patch \
> +           file://autofs-5.0.7-document-browse-option-in-man-page.patch \
> +           file://autofs-5.0.7-fix-automounter-support-on-parisc.patch \
>             file://autofs-5.0.7-include-linux-nfs.h-directly-in-rpc_sub.patch \
>             file://Makefile.rules-cross.patch \
>             file://no-bash.patch \

Patch

diff --git a/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-add-symlink-pseudo-option.patch b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-add-symlink-pseudo-option.patch
new file mode 100644
index 0000000..b0440f4
--- /dev/null
+++ b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/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@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/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-allow-nsswitch_conf-to-not-contain-automount-lines.patch b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-allow-nsswitch_conf-to-not-contain-automount-lines.patch
new file mode 100644
index 0000000..c342d10
--- /dev/null
+++ b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-allow-nsswitch_conf-to-not-contain-automount-lines.patch
@@ -0,0 +1,50 @@ 
+autofs-5.0.7 - Allow nsswitch.conf to not contain "automount:" lines
+
+From: Michael Tokarev <mjt@tls.msk.ru>
+
+Current code does not allow a case when nsswitch.conf
+does not mention automount map at all, like all new
+installations.  It logs a rather unpleasant error
+message instead:
+
+ syntax error in nsswitch config near [ syntax error ]
+
+this patch has a minimal fix, to allo "file" to be empty.
+
+Whole parser in C is about 25 lines of code, the "grammar"
+is trivial, and it is better to ditch all this yacc/lex
+stuff, but that will be much more intrusive change.
+
+Signed-off-by: Michael Tokarev <mjt@tls.msk.ru>
+Cc: 682266@bugs.debian.org
+---
+
+ CHANGELOG       |    1 +
+ lib/nss_parse.y |    1 +
+ 2 files changed, 2 insertions(+), 0 deletions(-)
+
+
+diff --git a/CHANGELOG b/CHANGELOG
+index bd0dd82..16ac2a0 100644
+--- a/CHANGELOG
++++ b/CHANGELOG
+@@ -16,6 +16,7 @@
+ - increase file map read buffer size.
+ - handle new location of systemd.
+ - fix map entry duplicate offset detection.
++- Allow nsswitch.conf to not contain "automount:" lines.
+ 
+ 25/07/2012 autofs-5.0.7
+ =======================
+diff --git a/lib/nss_parse.y b/lib/nss_parse.y
+index a39fda4..055e9d7 100644
+--- a/lib/nss_parse.y
++++ b/lib/nss_parse.y
+@@ -72,6 +72,7 @@ file: {
+ 		nss_debug = YYDEBUG;
+ #endif
+ 	} sources NL
++	| /* empty */
+ 	;
+ 
+ sources: nss_source
diff --git a/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-depricate-nosymlink-pseudo-option.patch b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-depricate-nosymlink-pseudo-option.patch
new file mode 100644
index 0000000..c784de7
--- /dev/null
+++ b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/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@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/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-document-browse-option-in-man-page.patch b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-document-browse-option-in-man-page.patch
new file mode 100644
index 0000000..4641342
--- /dev/null
+++ b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/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@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/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-dont-fail-on-master-map-self-include.patch b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-dont-fail-on-master-map-self-include.patch
new file mode 100644
index 0000000..afb908b
--- /dev/null
+++ b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/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@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/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-dont-schedule-new-alarms-after-readmap.patch b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-dont-schedule-new-alarms-after-readmap.patch
new file mode 100644
index 0000000..6444687
--- /dev/null
+++ b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-dont-schedule-new-alarms-after-readmap.patch
@@ -0,0 +1,69 @@ 
+autofs-5.0.7 - don't schedule new alarms after readmap
+
+From: Leonardo Chiquitto <leonardo.lists@gmail.com>
+
+Currently, a new alarm is scheduled every time the daemon receives
+a SIGHUP (map re-read) or SIGUSR1 (forced expiration). Besides that,
+map re-reads started on demand when a map is found to be outdated
+also generate a new alarm.
+
+Once added, these alarms are never deleted and hence increase the
+number of times the daemon wakes up to run the expiration procedure.
+After a couple of months, in setups with many mount points, it's
+normal to see automount waking up every second to handle the
+expiration timer.
+
+This patch removes the alarm scheduling from the readmap cleanup
+routine and makes sure the alarm is re-added after the expiration
+process only when it was not triggered by SIGUSR1.
+
+I couldn't think of any use case to justify keeping these alarms:
+it's critical to have the alarm ticking every timeout/4 seconds,
+but more than one periodic alarm running doesn't seem to make
+sense.
+---
+
+ CHANGELOG      |    1 +
+ daemon/state.c |    6 +-----
+ 2 files changed, 2 insertions(+), 5 deletions(-)
+
+
+diff --git a/CHANGELOG b/CHANGELOG
+index c9be73e..4cf5621 100644
+--- a/CHANGELOG
++++ b/CHANGELOG
+@@ -22,6 +22,7 @@
+ - fix init script status return.
+ - fix use get_proximity() without libtirpc.
+ - don't use dirent d_type to filter out files in scandir()
++- don't schedule new alarms after readmap.
+ 
+ 25/07/2012 autofs-5.0.7
+ =======================
+diff --git a/daemon/state.c b/daemon/state.c
+index b451c56..6e23022 100644
+--- a/daemon/state.c
++++ b/daemon/state.c
+@@ -144,7 +144,7 @@ void expire_cleanup(void *arg)
+ 					ap->submount = 2;
+ 			}
+ 
+-			if (!ap->submount)
++			if (ap->state == ST_EXPIRE && !ap->submount)
+ 				alarm_add(ap, ap->exp_runfreq);
+ 
+ 			/* FALLTHROUGH */
+@@ -330,13 +330,9 @@ static void do_readmap_cleanup(void *arg)
+ 	ap = ra->ap;
+ 
+ 	st_mutex_lock();
+-
+ 	ap->readmap_thread = 0;
+ 	st_set_done(ap);
+-	if (!ap->submount)
+-		alarm_add(ap, ap->exp_runfreq);
+ 	st_ready(ap);
+-
+ 	st_mutex_unlock();
+ 
+ 	free(ra);
diff --git a/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-dont-use-dirent-d_type-to-filter-out-files-in-scandir.patch b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-dont-use-dirent-d_type-to-filter-out-files-in-scandir.patch
new file mode 100644
index 0000000..9c9d99b
--- /dev/null
+++ b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-dont-use-dirent-d_type-to-filter-out-files-in-scandir.patch
@@ -0,0 +1,41 @@ 
+autofs-5.0.7 - don't use dirent d_type to filter out files in scandir()
+
+From: Leonardo Chiquitto <leonardo.lists@gmail.com>
+
+The "d_type" field of a dirent structure is not filled in by all
+file systems (XFS being one example), so we can't rely on it to
+check file types.
+---
+
+ CHANGELOG            |    1 +
+ modules/lookup_dir.c |    4 ----
+ 2 files changed, 1 insertions(+), 4 deletions(-)
+
+
+diff --git a/CHANGELOG b/CHANGELOG
+index 460bd27..c9be73e 100644
+--- a/CHANGELOG
++++ b/CHANGELOG
+@@ -21,6 +21,7 @@
+ - fix submount offset delete.
+ - fix init script status return.
+ - fix use get_proximity() without libtirpc.
++- don't use dirent d_type to filter out files in scandir()
+ 
+ 25/07/2012 autofs-5.0.7
+ =======================
+diff --git a/modules/lookup_dir.c b/modules/lookup_dir.c
+index 658cc29..33901c0 100644
+--- a/modules/lookup_dir.c
++++ b/modules/lookup_dir.c
+@@ -103,10 +103,6 @@ static int acceptable_dirent_p(const struct dirent *e)
+ {
+   size_t namesz;
+ 
+-
+-  if (!(e->d_type == DT_REG || e->d_type == DT_LNK))
+-	  return 0;
+-
+   namesz = strlen(e->d_name);
+   if (!namesz)
+ 	  return 0;
diff --git a/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-automounter-support-on-parisc.patch b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-automounter-support-on-parisc.patch
new file mode 100644
index 0000000..e00fdc1
--- /dev/null
+++ b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/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@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@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/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-file-descriptor-leak-when-reloading-the-daemon.patch b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-file-descriptor-leak-when-reloading-the-daemon.patch
new file mode 100644
index 0000000..8ce6c0f
--- /dev/null
+++ b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/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@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/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-init-script-status-return.patch b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-init-script-status-return.patch
new file mode 100644
index 0000000..a08d62f
--- /dev/null
+++ b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-init-script-status-return.patch
@@ -0,0 +1,39 @@ 
+autofs-5.0.7 - fix init script status return
+
+From: Ian Kent <ikent@redhat.com>
+
+The patch that added the piddir to configure to fix incorrect init
+script status() function returns failed to actually return the value
+to the user.
+---
+
+ CHANGELOG             |    1 +
+ redhat/autofs.init.in |    2 +-
+ 2 files changed, 2 insertions(+), 1 deletions(-)
+
+
+diff --git a/CHANGELOG b/CHANGELOG
+index 76c1f73..5bcb1af 100644
+--- a/CHANGELOG
++++ b/CHANGELOG
+@@ -19,6 +19,7 @@
+ - Allow nsswitch.conf to not contain "automount:" lines.
+ - fix nobind man page description.
+ - fix submount offset delete.
++- fix init script status return.
+ 
+ 25/07/2012 autofs-5.0.7
+ =======================
+diff --git a/redhat/autofs.init.in b/redhat/autofs.init.in
+index fe18b3e..9d008ff 100644
+--- a/redhat/autofs.init.in
++++ b/redhat/autofs.init.in
+@@ -172,7 +172,7 @@ RETVAL=0
+ case "$1" in
+ 	status)
+ 		status -p @@autofspiddir@@/autofs.pid -l autofs $prog
+-		exit 0;
++		exit $?;
+ 		;;
+ 	usage)
+ 		usage_message
diff --git a/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-libtirpc-build-option.patch b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-libtirpc-build-option.patch
new file mode 100644
index 0000000..8ad2afa
--- /dev/null
+++ b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/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@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/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-map-entry-duplicate-offset-detection.patch b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-map-entry-duplicate-offset-detection.patch
new file mode 100644
index 0000000..126d9a2
--- /dev/null
+++ b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-map-entry-duplicate-offset-detection.patch
@@ -0,0 +1,37 @@ 
+autofs-5.0.7 - fix map entry duplicate offset detection
+
+From: Ian Kent <raven@themaw.net>
+
+Recent changes broke the detection of duplicate offsets in map entries.
+---
+
+ CHANGELOG   |    1 +
+ lib/cache.c |    2 +-
+ 2 files changed, 2 insertions(+), 1 deletions(-)
+
+
+diff --git a/CHANGELOG b/CHANGELOG
+index 8f6bb3a..bd0dd82 100644
+--- a/CHANGELOG
++++ b/CHANGELOG
+@@ -15,6 +15,7 @@
+ - fix recursive mount deadlock.
+ - increase file map read buffer size.
+ - handle new location of systemd.
++- fix map entry duplicate offset detection.
+ 
+ 25/07/2012 autofs-5.0.7
+ =======================
+diff --git a/lib/cache.c b/lib/cache.c
+index 9179ad5..1e05a99 100644
+--- a/lib/cache.c
++++ b/lib/cache.c
+@@ -659,7 +659,7 @@ int cache_update_offset(struct mapent_cache *mc, const char *mkey, const char *k
+ 
+ 	me = cache_lookup_distinct(mc, key);
+ 	if (me && me->age == age) {
+-		if (me->multi != owner)
++		if (me->multi == owner)
+ 			return CHE_DUPLICATE;
+ 	}
+ 
diff --git a/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-nobind-man-page-description.patch b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-nobind-man-page-description.patch
new file mode 100644
index 0000000..41328a0
--- /dev/null
+++ b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-nobind-man-page-description.patch
@@ -0,0 +1,46 @@ 
+autofs-5.0.7 - fix nobind man page description
+
+From: Ian Kent <raven@themaw.net>
+
+Update auto.master(5) to better describe the behavior of the "nobind"
+option when used with direct mounts maps.
+---
+
+ CHANGELOG            |    1 +
+ man/auto.master.5.in |   10 +++++++---
+ 2 files changed, 8 insertions(+), 3 deletions(-)
+
+
+diff --git a/CHANGELOG b/CHANGELOG
+index 16ac2a0..7eb7235 100644
+--- a/CHANGELOG
++++ b/CHANGELOG
+@@ -17,6 +17,7 @@
+ - handle new location of systemd.
+ - fix map entry duplicate offset detection.
+ - Allow nsswitch.conf to not contain "automount:" lines.
++- fix nobind man page description.
+ 
+ 25/07/2012 autofs-5.0.7
+ =======================
+diff --git a/man/auto.master.5.in b/man/auto.master.5.in
+index 21d7544..8007542 100644
+--- a/man/auto.master.5.in
++++ b/man/auto.master.5.in
+@@ -151,9 +151,13 @@ can't be mounted.
+ 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
+ map entry (so it effects all the map entries) or with individual map
+-entries to prevent bind mounting of local NFS filesystems. Bind mounting
+-of NFS file systems can also be prevented for specific map entrys by
+-adding the "port=" mount option to the entries.
++entries to prevent bind mounting of local NFS filesystems. For direct
++mount maps the option is only effective if specified on the first direct
++map entry and is applied to all direct mount maps in the master map. It
++is ignored if given on subsequent direct map entries. It may be used
++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 "\-r, \-\-random-multimount-selection"
+ Enables the use of ramdom selection when choosing a host from a
diff --git a/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-requires-in-spec-file.patch b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-requires-in-spec-file.patch
new file mode 100644
index 0000000..404c848
--- /dev/null
+++ b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/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@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/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-submount-offset-delete.patch b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-submount-offset-delete.patch
new file mode 100644
index 0000000..b38e214
--- /dev/null
+++ b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-submount-offset-delete.patch
@@ -0,0 +1,45 @@ 
+autofs-5.0.7 - fix submount offset delete
+
+From: Ian Kent <ikent@redhat.com>
+
+As part of the implementation to allow for limited update of
+the internal hosts map by using a HUP signal some code that
+deleted any offset entries from the cache on lookup was removed
+as it appeared to not be needed.
+
+There is however a case where it is needed to avoid a duplicate
+cache entry failure on lookup.
+---
+
+ CHANGELOG          |    1 +
+ daemon/automount.c |    4 ++--
+ 2 files changed, 3 insertions(+), 2 deletions(-)
+
+
+diff --git a/CHANGELOG b/CHANGELOG
+index 7eb7235..76c1f73 100644
+--- a/CHANGELOG
++++ b/CHANGELOG
+@@ -18,6 +18,7 @@
+ - fix map entry duplicate offset detection.
+ - Allow nsswitch.conf to not contain "automount:" lines.
+ - fix nobind man page description.
++- fix submount offset delete.
+ 
+ 25/07/2012 autofs-5.0.7
+ =======================
+diff --git a/daemon/automount.c b/daemon/automount.c
+index e56f9e1..4a3eb3d 100644
+--- a/daemon/automount.c
++++ b/daemon/automount.c
+@@ -544,8 +544,8 @@ int umount_multi(struct autofs_point *ap, const char *path, int incl)
+ 	 * If we are a submount we need to umount any offsets our
+ 	 * parent may have mounted over top of us.
+ 	 */
+-	/*if (ap->submount)
+-		left += umount_subtree_mounts(ap->parent, path, is_autofs_fs);*/
++	if (ap->submount)
++		left += umount_subtree_mounts(ap->parent, path, is_autofs_fs);
+ 
+ 	left += umount_subtree_mounts(ap, path, is_autofs_fs);
+ 
diff --git a/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-systemd-unidir-in-spec-file.patch b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-systemd-unidir-in-spec-file.patch
new file mode 100644
index 0000000..d856faf
--- /dev/null
+++ b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/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@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/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-use-get_proximity-without-libtirpc.patch b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-use-get_proximity-without-libtirpc.patch
new file mode 100644
index 0000000..74ed8fa
--- /dev/null
+++ b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-use-get_proximity-without-libtirpc.patch
@@ -0,0 +1,54 @@ 
+autofs-5.0.7 - fix use get_proximity() without libtirpc
+
+From: Ian Kent <raven@themaw.net>
+
+If autofs is not using libtirpc and there are any configured IPv6
+interfaces then get_proximity() will fail with PROXIMITY_UNSUPPORTED.
+
+In this case when checking interfaces the IPv6 interfaces need to be
+ignored.
+---
+
+ CHANGELOG            |    1 +
+ modules/replicated.c |    8 ++------
+ 2 files changed, 3 insertions(+), 6 deletions(-)
+
+
+diff --git a/CHANGELOG b/CHANGELOG
+index 5bcb1af..460bd27 100644
+--- a/CHANGELOG
++++ b/CHANGELOG
+@@ -20,6 +20,7 @@
+ - fix nobind man page description.
+ - fix submount offset delete.
+ - fix init script status return.
++- fix use get_proximity() without libtirpc.
+ 
+ 25/07/2012 autofs-5.0.7
+ =======================
+diff --git a/modules/replicated.c b/modules/replicated.c
+index bd6003b..6b96320 100644
+--- a/modules/replicated.c
++++ b/modules/replicated.c
+@@ -184,9 +184,7 @@ static unsigned int get_proximity(struct sockaddr *host_addr)
+ 			break;
+ 
+ 		case AF_INET6:
+-#ifndef WITH_LIBTIRPC
+-			return PROXIMITY_UNSUPPORTED;
+-#else
++#ifdef WITH_LIBTIRPC
+ 			if (host_addr->sa_family == AF_INET)
+ 				break;
+ 			if6_addr = (struct sockaddr_in6 *) this->ifa_addr;
+@@ -251,9 +249,7 @@ static unsigned int get_proximity(struct sockaddr *host_addr)
+ 			break;
+ 
+ 		case AF_INET6:
+-#ifndef WITH_LIBTIRPC
+-			return PROXIMITY_UNSUPPORTED;
+-#else
++#ifdef WITH_LIBTIRPC
+ 			if (host_addr->sa_family == AF_INET)
+ 				break;
+ 			if6_addr = (struct sockaddr_in6 *) this->ifa_addr;
diff --git a/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-wildcard-multi-map-regression.patch b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-fix-wildcard-multi-map-regression.patch
new file mode 100644
index 0000000..44e4a18
--- /dev/null
+++ b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/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@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/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-lib-defaults-use-WITH_LDAP-conditional-around-LDAP-types.patch b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-lib-defaults-use-WITH_LDAP-conditional-around-LDAP-types.patch
new file mode 100644
index 0000000..22e0418
--- /dev/null
+++ b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-lib-defaults-use-WITH_LDAP-conditional-around-LDAP-types.patch
@@ -0,0 +1,448 @@ 
+autofs-5.0.7 - lib/defaults.c: use WITH_LDAP conditional around LDAP types
+
+From: Chris Packham <chris.packham@alliedtelesis.co.nz>
+
+Wrap the inclusion of lookup_ldap.h and functions that use ldap_uri or
+ldap_schema with the WITH_LDAP conditional. WITH_LDAP is set by the
+configure step when LDAP support is not desired. This also allows
+compilation on a system that doesn't have any LDAP libraries.
+---
+
+ CHANGELOG             |    1 
+ include/defaults.h    |   14 +-
+ include/lookup_ldap.h |    1 
+ lib/defaults.c        |  325 +++++++++++++++++++++++++------------------------
+ modules/lookup_ldap.c |    1 
+ 5 files changed, 175 insertions(+), 167 deletions(-)
+
+
+diff --git a/CHANGELOG b/CHANGELOG
+index ba1d65b..1130db6 100644
+--- a/CHANGELOG
++++ b/CHANGELOG
+@@ -24,6 +24,7 @@
+ - don't use dirent d_type to filter out files in scandir()
+ - don't schedule new alarms after readmap.
+ - use numeric protocol ids instead of protoent structs.
++- lib/defaults.c: use WITH_LDAP conditional around LDAP types.
+ 
+ 25/07/2012 autofs-5.0.7
+ =======================
+diff --git a/include/defaults.h b/include/defaults.h
+index cda2174..871e14b 100644
+--- a/include/defaults.h
++++ b/include/defaults.h
+@@ -44,8 +44,16 @@
+ 
+ #define DEFAULT_MAP_HASH_TABLE_SIZE	1024
+ 
++#ifdef WITH_LDAP
+ struct ldap_schema;
+ struct ldap_searchdn;
++void defaults_free_uris(struct list_head *);
++struct list_head *defaults_get_uris(void);
++struct ldap_schema *defaults_get_default_schema(void);
++void defaults_free_searchdns(struct ldap_searchdn *);
++struct ldap_searchdn *defaults_get_searchdns(void);
++struct ldap_schema *defaults_get_schema(void);
++#endif
+ 
+ unsigned int defaults_read_config(unsigned int);
+ const char *defaults_get_master_map(void);
+@@ -57,12 +65,6 @@ unsigned int defaults_get_logging(void);
+ const char *defaults_get_ldap_server(void);
+ unsigned int defaults_get_ldap_timeout(void);
+ unsigned int defaults_get_ldap_network_timeout(void);
+-struct list_head *defaults_get_uris(void);
+-void defaults_free_uris(struct list_head *);
+-struct ldap_schema *defaults_get_default_schema(void);
+-struct ldap_schema *defaults_get_schema(void);
+-struct ldap_searchdn *defaults_get_searchdns(void);
+-void defaults_free_searchdns(struct ldap_searchdn *);
+ unsigned int defaults_get_mount_nfs_default_proto(void);
+ unsigned int defaults_get_append_options(void);
+ unsigned int defaults_get_mount_wait(void);
+diff --git a/include/lookup_ldap.h b/include/lookup_ldap.h
+index e441a61..9a4ce73 100644
+--- a/include/lookup_ldap.h
++++ b/include/lookup_ldap.h
+@@ -8,7 +8,6 @@
+ #include <openssl/evp.h>
+ #include <openssl/err.h>
+ #include <sasl/sasl.h>
+-#include <libxml/tree.h>
+ #include <krb5.h>
+ #endif
+ 
+diff --git a/lib/defaults.c b/lib/defaults.c
+index 5ce71b7..ae1162f 100644
+--- a/lib/defaults.c
++++ b/lib/defaults.c
+@@ -17,9 +17,12 @@
+ #include <ctype.h>
+ #include <string.h>
+ 
++#include "config.h"
+ #include "list.h"
+ #include "defaults.h"
++#ifdef WITH_LDAP
+ #include "lookup_ldap.h"
++#endif
+ #include "log.h"
+ #include "automount.h"
+ 
+@@ -197,6 +200,7 @@ static int parse_line(char *line, char **res, char **value)
+ 	return 1;
+ }
+ 
++#ifdef WITH_LDAP
+ void defaults_free_uris(struct list_head *list)
+ {
+ 	struct list_head *next;
+@@ -290,166 +294,6 @@ struct list_head *defaults_get_uris(void)
+ 	return list;
+ }
+ 
+-/*
+- * Read config env variables and check they have been set.
+- *
+- * This simple minded routine assumes the config file
+- * is valid bourne shell script without spaces around "="
+- * and that it has valid values.
+- */
+-unsigned int defaults_read_config(unsigned int to_syslog)
+-{
+-	FILE *f;
+-	char buf[MAX_LINE_LEN];
+-	char *res;
+-
+-	f = open_fopen_r(DEFAULTS_CONFIG_FILE);
+-	if (!f)
+-		return 0;
+-
+-	while ((res = fgets(buf, MAX_LINE_LEN, f))) {
+-		char *key, *value;
+-
+-		if (!parse_line(res, &key, &value))
+-			continue;
+-
+-		if (check_set_config_value(key, ENV_NAME_MASTER_MAP, value, to_syslog) ||
+-		    check_set_config_value(key, ENV_NAME_TIMEOUT, value, to_syslog) ||
+-		    check_set_config_value(key, ENV_NAME_NEGATIVE_TIMEOUT, value, to_syslog) ||
+-		    check_set_config_value(key, ENV_NAME_BROWSE_MODE, value, to_syslog) ||
+-		    check_set_config_value(key, ENV_NAME_LOGGING, value, to_syslog) ||
+-		    check_set_config_value(key, ENV_LDAP_TIMEOUT, value, to_syslog) ||
+-		    check_set_config_value(key, ENV_LDAP_NETWORK_TIMEOUT, value, to_syslog) ||
+-		    check_set_config_value(key, ENV_NAME_MAP_OBJ_CLASS, value, to_syslog) ||
+-		    check_set_config_value(key, ENV_NAME_ENTRY_OBJ_CLASS, value, to_syslog) ||
+-		    check_set_config_value(key, ENV_NAME_MAP_ATTR, value, to_syslog) ||
+-		    check_set_config_value(key, ENV_NAME_ENTRY_ATTR, value, to_syslog) ||
+-		    check_set_config_value(key, ENV_NAME_VALUE_ATTR, value, to_syslog) ||
+-		    check_set_config_value(key, ENV_APPEND_OPTIONS, value, to_syslog) ||
+-		    check_set_config_value(key, ENV_MOUNT_WAIT, value, to_syslog) ||
+-		    check_set_config_value(key, ENV_UMOUNT_WAIT, value, to_syslog) ||
+-		    check_set_config_value(key, ENV_AUTH_CONF_FILE, value, to_syslog) ||
+-		    check_set_config_value(key, ENV_MAP_HASH_TABLE_SIZE, value, to_syslog) ||
+-		    check_set_config_value(key, ENV_MOUNT_NFS_DEFAULT_PROTOCOL, value, to_syslog))
+-			;
+-	}
+-
+-	if (!feof(f) || ferror(f)) {
+-		if (!to_syslog) {
+-			fprintf(stderr,
+-				"fgets returned error %d while reading %s\n",
+-				ferror(f), DEFAULTS_CONFIG_FILE);
+-		} else {
+-			logmsg("fgets returned error %d while reading %s",
+-			      ferror(f), DEFAULTS_CONFIG_FILE);
+-		}
+-		fclose(f);
+-		return 0;
+-	}
+-
+-	fclose(f);
+-	return 1;
+-}
+-
+-const char *defaults_get_master_map(void)
+-{
+-	char *master;
+-
+-	master = get_env_string(ENV_NAME_MASTER_MAP);
+-	if (!master)
+-		return strdup(default_master_map_name);
+-
+-	return (const char *) master;
+-}
+-
+-int defaults_master_set(void)
+-{
+-	char *val = getenv(ENV_NAME_MASTER_MAP);
+-	if (!val)
+-		return 0;
+-
+-	return 1;
+-}
+-
+-unsigned int defaults_get_timeout(void)
+-{
+-	long timeout;
+-
+-	timeout = get_env_number(ENV_NAME_TIMEOUT);
+-	if (timeout < 0)
+-		timeout = DEFAULT_TIMEOUT;
+-
+-	return (unsigned int) timeout;
+-}
+-
+-unsigned int defaults_get_negative_timeout(void)
+-{
+-	long n_timeout;
+-
+-	n_timeout = get_env_number(ENV_NAME_NEGATIVE_TIMEOUT);
+-	if (n_timeout <= 0)
+-		n_timeout = DEFAULT_NEGATIVE_TIMEOUT;
+-
+-	return (unsigned int) n_timeout;
+-}
+-
+-unsigned int defaults_get_browse_mode(void)
+-{
+-	int res;
+-
+-	res = get_env_yesno(ENV_NAME_BROWSE_MODE);
+-	if (res < 0)
+-		res = DEFAULT_BROWSE_MODE;
+-
+-	return res;
+-}
+-
+-unsigned int defaults_get_logging(void)
+-{
+-	char *res;
+-	unsigned int logging = DEFAULT_LOGGING;
+-
+-	res = get_env_string(ENV_NAME_LOGGING);
+-	if (!res)
+-		return logging;
+-
+-	if (!strcasecmp(res, "none"))
+-		logging = DEFAULT_LOGGING;
+-	else {
+-		if (!strcasecmp(res, "verbose"))
+-			logging |= LOGOPT_VERBOSE;
+-
+-		if (!strcasecmp(res, "debug"))
+-			logging |= LOGOPT_DEBUG;
+-	}
+-
+-	free(res);
+-
+-	return logging;
+-}
+-
+-unsigned int defaults_get_ldap_timeout(void)
+-{
+-	int res;
+-
+-	res = get_env_number(ENV_LDAP_TIMEOUT);
+-	if (res < 0)
+-		res = DEFAULT_LDAP_TIMEOUT;
+-
+-	return res;
+-}
+-
+-unsigned int defaults_get_ldap_network_timeout(void)
+-{
+-	int res;
+-
+-	res = get_env_number(ENV_LDAP_NETWORK_TIMEOUT);
+-	if (res < 0)
+-		res = DEFAULT_LDAP_NETWORK_TIMEOUT;
+-
+-	return res;
+-}
+-
+ struct ldap_schema *defaults_get_default_schema(void)
+ {
+ 	struct ldap_schema *schema;
+@@ -645,6 +489,167 @@ struct ldap_schema *defaults_get_schema(void)
+ 
+ 	return schema;
+ }
++#endif
++
++/*
++ * Read config env variables and check they have been set.
++ *
++ * This simple minded routine assumes the config file
++ * is valid bourne shell script without spaces around "="
++ * and that it has valid values.
++ */
++unsigned int defaults_read_config(unsigned int to_syslog)
++{
++	FILE *f;
++	char buf[MAX_LINE_LEN];
++	char *res;
++
++	f = open_fopen_r(DEFAULTS_CONFIG_FILE);
++	if (!f)
++		return 0;
++
++	while ((res = fgets(buf, MAX_LINE_LEN, f))) {
++		char *key, *value;
++
++		if (!parse_line(res, &key, &value))
++			continue;
++
++		if (check_set_config_value(key, ENV_NAME_MASTER_MAP, value, to_syslog) ||
++		    check_set_config_value(key, ENV_NAME_TIMEOUT, value, to_syslog) ||
++		    check_set_config_value(key, ENV_NAME_NEGATIVE_TIMEOUT, value, to_syslog) ||
++		    check_set_config_value(key, ENV_NAME_BROWSE_MODE, value, to_syslog) ||
++		    check_set_config_value(key, ENV_NAME_LOGGING, value, to_syslog) ||
++		    check_set_config_value(key, ENV_LDAP_TIMEOUT, value, to_syslog) ||
++		    check_set_config_value(key, ENV_LDAP_NETWORK_TIMEOUT, value, to_syslog) ||
++		    check_set_config_value(key, ENV_NAME_MAP_OBJ_CLASS, value, to_syslog) ||
++		    check_set_config_value(key, ENV_NAME_ENTRY_OBJ_CLASS, value, to_syslog) ||
++		    check_set_config_value(key, ENV_NAME_MAP_ATTR, value, to_syslog) ||
++		    check_set_config_value(key, ENV_NAME_ENTRY_ATTR, value, to_syslog) ||
++		    check_set_config_value(key, ENV_NAME_VALUE_ATTR, value, to_syslog) ||
++		    check_set_config_value(key, ENV_APPEND_OPTIONS, value, to_syslog) ||
++		    check_set_config_value(key, ENV_MOUNT_WAIT, value, to_syslog) ||
++		    check_set_config_value(key, ENV_UMOUNT_WAIT, value, to_syslog) ||
++		    check_set_config_value(key, ENV_AUTH_CONF_FILE, value, to_syslog) ||
++		    check_set_config_value(key, ENV_MAP_HASH_TABLE_SIZE, value, to_syslog) ||
++		    check_set_config_value(key, ENV_MOUNT_NFS_DEFAULT_PROTOCOL, value, to_syslog))
++			;
++	}
++
++	if (!feof(f) || ferror(f)) {
++		if (!to_syslog) {
++			fprintf(stderr,
++				"fgets returned error %d while reading %s\n",
++				ferror(f), DEFAULTS_CONFIG_FILE);
++		} else {
++			logmsg("fgets returned error %d while reading %s",
++			      ferror(f), DEFAULTS_CONFIG_FILE);
++		}
++		fclose(f);
++		return 0;
++	}
++
++	fclose(f);
++	return 1;
++}
++
++const char *defaults_get_master_map(void)
++{
++	char *master;
++
++	master = get_env_string(ENV_NAME_MASTER_MAP);
++	if (!master)
++		return strdup(default_master_map_name);
++
++	return (const char *) master;
++}
++
++int defaults_master_set(void)
++{
++	char *val = getenv(ENV_NAME_MASTER_MAP);
++	if (!val)
++		return 0;
++
++	return 1;
++}
++
++unsigned int defaults_get_timeout(void)
++{
++	long timeout;
++
++	timeout = get_env_number(ENV_NAME_TIMEOUT);
++	if (timeout < 0)
++		timeout = DEFAULT_TIMEOUT;
++
++	return (unsigned int) timeout;
++}
++
++unsigned int defaults_get_negative_timeout(void)
++{
++	long n_timeout;
++
++	n_timeout = get_env_number(ENV_NAME_NEGATIVE_TIMEOUT);
++	if (n_timeout <= 0)
++		n_timeout = DEFAULT_NEGATIVE_TIMEOUT;
++
++	return (unsigned int) n_timeout;
++}
++
++unsigned int defaults_get_browse_mode(void)
++{
++	int res;
++
++	res = get_env_yesno(ENV_NAME_BROWSE_MODE);
++	if (res < 0)
++		res = DEFAULT_BROWSE_MODE;
++
++	return res;
++}
++
++unsigned int defaults_get_logging(void)
++{
++	char *res;
++	unsigned int logging = DEFAULT_LOGGING;
++
++	res = get_env_string(ENV_NAME_LOGGING);
++	if (!res)
++		return logging;
++
++	if (!strcasecmp(res, "none"))
++		logging = DEFAULT_LOGGING;
++	else {
++		if (!strcasecmp(res, "verbose"))
++			logging |= LOGOPT_VERBOSE;
++
++		if (!strcasecmp(res, "debug"))
++			logging |= LOGOPT_DEBUG;
++	}
++
++	free(res);
++
++	return logging;
++}
++
++unsigned int defaults_get_ldap_timeout(void)
++{
++	int res;
++
++	res = get_env_number(ENV_LDAP_TIMEOUT);
++	if (res < 0)
++		res = DEFAULT_LDAP_TIMEOUT;
++
++	return res;
++}
++
++unsigned int defaults_get_ldap_network_timeout(void)
++{
++	int res;
++
++	res = get_env_number(ENV_LDAP_NETWORK_TIMEOUT);
++	if (res < 0)
++		res = DEFAULT_LDAP_NETWORK_TIMEOUT;
++
++	return res;
++}
+ 
+ unsigned int defaults_get_mount_nfs_default_proto(void)
+ {
+diff --git a/modules/lookup_ldap.c b/modules/lookup_ldap.c
+index 3bc4dc5..431e50d 100644
+--- a/modules/lookup_ldap.c
++++ b/modules/lookup_ldap.c
+@@ -28,6 +28,7 @@
+ #include <arpa/nameser.h>
+ #include <resolv.h>
+ #include <lber.h>
++#include <libxml/tree.h>
+ 
+ #define MODULE_LOOKUP
+ #include "automount.h"
diff --git a/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-make-yellow-pages-support-optional.patch b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-make-yellow-pages-support-optional.patch
index 9504d8e..4199690 100644
--- a/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-make-yellow-pages-support-optional.patch
+++ b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-make-yellow-pages-support-optional.patch
@@ -1,5 +1,3 @@ 
-Upstream-Status: Backport
-
 autofs-5.0.7 - make yellow pages support optional
 
 From: Chris Packham <chris.packham@alliedtelesis.co.nz>
@@ -8,6 +6,7 @@  If rpcsvc/ypclnt.h is not available don't compile in Yellow Pages
 support.
 ---
 
+ CHANGELOG           |    1 +
  Makefile.conf.in    |    3 +++
  configure           |   16 ++++++++++++++++
  configure.in        |    9 +++++++++
@@ -17,6 +16,18 @@  support.
  7 files changed, 39 insertions(+), 3 deletions(-)
 
 
+diff --git a/CHANGELOG b/CHANGELOG
+index 1130db6..ed17163 100644
+--- a/CHANGELOG
++++ b/CHANGELOG
+@@ -25,6 +25,7 @@
+ - don't schedule new alarms after readmap.
+ - use numeric protocol ids instead of protoent structs.
+ - lib/defaults.c: use WITH_LDAP conditional around LDAP types.
++- make yellow pages support optional.
+ 
+ 25/07/2012 autofs-5.0.7
+ =======================
 diff --git a/Makefile.conf.in b/Makefile.conf.in
 index 802318b..3766d45 100644
 --- a/Makefile.conf.in
diff --git a/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-modules-replicated-use-sin6.addr-s6_addr32.patch b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-modules-replicated-use-sin6.addr-s6_addr32.patch
new file mode 100644
index 0000000..4516bc5
--- /dev/null
+++ b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-modules-replicated-use-sin6.addr-s6_addr32.patch
@@ -0,0 +1,39 @@ 
+autofs-5.0.7 -  modules/replicated.c: use sin6_addr.s6_addr32
+
+From: Chris Packham <chris.packham@alliedtelesis.co.nz>
+
+The exported in6.h kernel header provides a convenience macro s6_addr32
+for accessing the 32bit words of an ipv6 address. Use this instead of
+__in6_u.__u6_addr32.
+---
+
+ CHANGELOG            |    1 +
+ modules/replicated.c |    2 +-
+ 2 files changed, 2 insertions(+), 1 deletions(-)
+
+
+diff --git a/CHANGELOG b/CHANGELOG
+index ed17163..4eaa9f9 100644
+--- a/CHANGELOG
++++ b/CHANGELOG
+@@ -26,6 +26,7 @@
+ - use numeric protocol ids instead of protoent structs.
+ - lib/defaults.c: use WITH_LDAP conditional around LDAP types.
+ - make yellow pages support optional.
++- modules/replicated.c: use sin6_addr.s6_addr32.
+ 
+ 25/07/2012 autofs-5.0.7
+ =======================
+diff --git a/modules/replicated.c b/modules/replicated.c
+index dbd5513..26f64b8 100644
+--- a/modules/replicated.c
++++ b/modules/replicated.c
+@@ -1146,7 +1146,7 @@ try_name:
+ 				rr4++;
+ 		} else if (this->ai_family == AF_INET6) {
+ 			struct sockaddr_in6 *addr = (struct sockaddr_in6 *) this->ai_addr;
+-			if (!IN6_IS_ADDR_LOOPBACK(addr->sin6_addr.__in6_u.__u6_addr32))
++			if (!IN6_IS_ADDR_LOOPBACK(addr->sin6_addr.s6_addr32))
+ 				rr6++;
+ 		}
+ 		this = this->ai_next;
diff --git a/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-update-kernel-include-files.patch b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-update-kernel-include-files.patch
new file mode 100644
index 0000000..3b6bb92
--- /dev/null
+++ b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/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@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/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-use-numeric-protocol-ids-instead-of-protoent-structs.patch b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-use-numeric-protocol-ids-instead-of-protoent-structs.patch
new file mode 100644
index 0000000..113b0a0
--- /dev/null
+++ b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-use-numeric-protocol-ids-instead-of-protoent-structs.patch
@@ -0,0 +1,471 @@ 
+autofs-5.0.7 - use numeric protocol ids instead of protoent structs
+
+From: Leonardo Chiquitto <leonardo.lists@gmail.com>
+
+The function getprotobyname() is not reentrant, so we can't call
+it simultaneously from multiple threads. Instead of switching to
+the reentrant version which adds more complexity to the code,
+lets use numeric protocol IDs instead of protoent structures.
+---
+
+ CHANGELOG            |    1 +
+ include/rpc_subs.h   |    4 +--
+ lib/rpc_subs.c       |   80 ++++++++++++++++++--------------------------------
+ modules/replicated.c |   42 +++++++++++---------------
+ 4 files changed, 50 insertions(+), 77 deletions(-)
+
+
+diff --git a/CHANGELOG b/CHANGELOG
+index 4cf5621..ba1d65b 100644
+--- a/CHANGELOG
++++ b/CHANGELOG
+@@ -23,6 +23,7 @@
+ - fix use get_proximity() without libtirpc.
+ - don't use dirent d_type to filter out files in scandir()
+ - don't schedule new alarms after readmap.
++- use numeric protocol ids instead of protoent structs.
+ 
+ 25/07/2012 autofs-5.0.7
+ =======================
+diff --git a/include/rpc_subs.h b/include/rpc_subs.h
+index ca474d9..b6d59f9 100644
+--- a/include/rpc_subs.h
++++ b/include/rpc_subs.h
+@@ -54,7 +54,7 @@ struct conn_info {
+ 	unsigned short port;
+ 	unsigned long program;
+ 	unsigned long version;
+-	struct protoent *proto;
++	int proto;
+ 	unsigned int send_sz;
+ 	unsigned int recv_sz;
+ 	struct timeval timeout;
+@@ -66,7 +66,7 @@ int rpc_udp_getclient(struct conn_info *, unsigned int, unsigned int);
+ void rpc_destroy_udp_client(struct conn_info *);
+ int rpc_tcp_getclient(struct conn_info *, unsigned int, unsigned int);
+ void rpc_destroy_tcp_client(struct conn_info *);
+-int rpc_portmap_getclient(struct conn_info *, const char *, struct sockaddr *, size_t, const char *, unsigned int);
++int rpc_portmap_getclient(struct conn_info *, const char *, struct sockaddr *, size_t, int, unsigned int);
+ int rpc_portmap_getport(struct conn_info *, struct pmap *, unsigned short *);
+ int rpc_ping_proto(struct conn_info *);
+ int rpc_ping(const char *, long, long, unsigned int);
+diff --git a/lib/rpc_subs.c b/lib/rpc_subs.c
+index d33a3c4..ad1d557 100644
+--- a/lib/rpc_subs.c
++++ b/lib/rpc_subs.c
+@@ -170,7 +170,7 @@ static int rpc_do_create_client(struct sockaddr *addr, struct conn_info *info, i
+ 
+ 	*client = NULL;
+ 
+-	proto = info->proto->p_proto;
++	proto = info->proto;
+ 	if (proto == IPPROTO_UDP)
+ 		type = SOCK_DGRAM;
+ 	else
+@@ -201,7 +201,7 @@ static int rpc_do_create_client(struct sockaddr *addr, struct conn_info *info, i
+ 	in4_raddr = (struct sockaddr_in *) addr;
+ 	in4_raddr->sin_port = htons(info->port);
+ 
+-	switch (info->proto->p_proto) {
++	switch (info->proto) {
+ 	case IPPROTO_UDP:
+ 		clnt = clntudp_bufcreate(in4_raddr,
+ 					 info->program, info->version,
+@@ -241,7 +241,7 @@ static int rpc_do_create_client(struct sockaddr *addr, struct conn_info *info, i
+ 
+ 	*client = NULL;
+ 
+-	proto = info->proto->p_proto;
++	proto = info->proto;
+ 	if (proto == IPPROTO_UDP)
+ 		type = SOCK_DGRAM;
+ 	else
+@@ -292,11 +292,11 @@ static int rpc_do_create_client(struct sockaddr *addr, struct conn_info *info, i
+ 	nb_addr.maxlen = nb_addr.len = slen;
+ 	nb_addr.buf = addr;
+ 
+-	if (info->proto->p_proto == IPPROTO_UDP)
++	if (info->proto == IPPROTO_UDP)
+ 		clnt = clnt_dg_create(*fd, &nb_addr,
+ 				      info->program, info->version,
+ 				      info->send_sz, info->recv_sz);
+-	else if (info->proto->p_proto == IPPROTO_TCP) {
++	else if (info->proto == IPPROTO_TCP) {
+ 		ret = connect_nb(*fd, addr, slen, &info->timeout);
+ 		if (ret < 0)
+ 			return ret;
+@@ -355,7 +355,7 @@ static int create_client(struct conn_info *info, CLIENT **client)
+ 	memset(&hints, 0, sizeof(hints));
+ 	hints.ai_flags = AI_ADDRCONFIG;
+ 	hints.ai_family = AF_UNSPEC;
+-	if (info->proto->p_proto == IPPROTO_UDP)
++	if (info->proto == IPPROTO_UDP)
+ 		hints.ai_socktype = SOCK_DGRAM;
+ 	else
+ 		hints.ai_socktype = SOCK_STREAM;
+@@ -370,7 +370,7 @@ static int create_client(struct conn_info *info, CLIENT **client)
+ 
+ 	haddr = ai;
+ 	while (haddr) {
+-		if (haddr->ai_protocol != info->proto->p_proto) {
++		if (haddr->ai_protocol != info->proto) {
+ 			haddr = haddr->ai_next;
+ 			continue;
+ 		}
+@@ -417,16 +417,11 @@ out_close:
+ int rpc_udp_getclient(struct conn_info *info,
+ 		      unsigned int program, unsigned int version)
+ {
+-	struct protoent *pe_proto;
+ 	CLIENT *client;
+ 	int ret;
+ 
+ 	if (!info->client) {
+-		pe_proto = getprotobyname("udp");
+-		if (!pe_proto)
+-			return -ENOENT;
+-
+-		info->proto = pe_proto;
++		info->proto = IPPROTO_UDP;
+ 		info->timeout.tv_sec = RPC_TOUT_UDP;
+ 		info->timeout.tv_usec = 0;
+ 		info->send_sz = UDPMSGSIZE;
+@@ -458,16 +453,11 @@ void rpc_destroy_udp_client(struct conn_info *info)
+ int rpc_tcp_getclient(struct conn_info *info,
+ 		      unsigned int program, unsigned int version)
+ {
+-	struct protoent *pe_proto;
+ 	CLIENT *client;
+ 	int ret;
+ 
+ 	if (!info->client) {
+-		pe_proto = getprotobyname("tcp");
+-		if (!pe_proto)
+-			return -ENOENT;
+-
+-		info->proto = pe_proto;
++		info->proto = IPPROTO_TCP;
+ 		info->timeout.tv_sec = RPC_TOUT_TCP;
+ 		info->timeout.tv_usec = 0;
+ 		info->send_sz = 0;
+@@ -513,23 +503,18 @@ void rpc_destroy_tcp_client(struct conn_info *info)
+ 
+ int rpc_portmap_getclient(struct conn_info *info,
+ 			  const char *host, struct sockaddr *addr, size_t addr_len,
+-			  const char *proto, unsigned int option)
++			  int proto, unsigned int option)
+ {
+-	struct protoent *pe_proto;
+ 	CLIENT *client;
+ 	int ret;
+ 
+-	pe_proto = getprotobyname(proto);
+-	if (!pe_proto)
+-		return -ENOENT;
+-
+ 	info->host = host;
+ 	info->addr = addr;
+ 	info->addr_len = addr_len;
+ 	info->program = PMAPPROG;
+ 	info->port = PMAPPORT;
+ 	info->version = PMAPVERS;
+-	info->proto = pe_proto;
++	info->proto = proto;
+ 	info->send_sz = RPCSMALLMSGSIZE;
+ 	info->recv_sz = RPCSMALLMSGSIZE;
+ 	info->timeout.tv_sec = PMAP_TOUT_UDP;
+@@ -537,7 +522,7 @@ int rpc_portmap_getclient(struct conn_info *info,
+ 	info->close_option = option;
+ 	info->client = NULL;
+ 
+-	if (pe_proto->p_proto == IPPROTO_TCP)
++	if (info->proto == IPPROTO_TCP)
+ 		info->timeout.tv_sec = PMAP_TOUT_TCP;
+ 
+ 	ret = create_client(info, &client);
+@@ -555,7 +540,7 @@ int rpc_portmap_getport(struct conn_info *info,
+ 	struct conn_info pmap_info;
+ 	CLIENT *client;
+ 	enum clnt_stat status;
+-	int proto = info->proto->p_proto;
++	int proto = info->proto;
+ 	int ret;
+ 
+ 	memset(&pmap_info, 0, sizeof(struct conn_info));
+@@ -633,13 +618,13 @@ int rpc_ping_proto(struct conn_info *info)
+ {
+ 	CLIENT *client;
+ 	enum clnt_stat status;
+-	int proto = info->proto->p_proto;
++	int proto = info->proto;
+ 	int ret;
+ 
+ 	if (info->client)
+ 		client = info->client;
+ 	else {
+-		if (info->proto->p_proto == IPPROTO_UDP) {
++		if (info->proto == IPPROTO_UDP) {
+ 			info->send_sz = UDPMSGSIZE;
+ 			info->recv_sz = UDPMSGSIZE;
+ 		}
+@@ -688,7 +673,7 @@ int rpc_ping_proto(struct conn_info *info)
+ 
+ static unsigned int __rpc_ping(const char *host,
+ 				unsigned long version,
+-				char *proto,
++				int proto,
+ 				long seconds, long micros,
+ 				unsigned int option)
+ {
+@@ -696,6 +681,7 @@ static unsigned int __rpc_ping(const char *host,
+ 	struct conn_info info;
+ 	struct pmap parms;
+ 
++	info.proto = proto;
+ 	info.host = host;
+ 	info.addr = NULL;
+ 	info.addr_len = 0;
+@@ -710,13 +696,9 @@ static unsigned int __rpc_ping(const char *host,
+ 
+ 	status = RPC_PING_FAIL;
+ 
+-	info.proto = getprotobyname(proto);
+-	if (!info.proto)
+-		return status;
+-
+ 	parms.pm_prog = NFS_PROGRAM;
+ 	parms.pm_vers = version;
+-	parms.pm_prot = info.proto->p_proto;
++	parms.pm_prot = info.proto;
+ 	parms.pm_port = 0;
+ 
+ 	status = rpc_portmap_getport(&info, &parms, &info.port);
+@@ -734,19 +716,19 @@ int rpc_ping(const char *host, long seconds, long micros, unsigned int option)
+ 	unsigned long vers2 = NFS2_VERSION;
+ 	unsigned int status;
+ 
+-	status = __rpc_ping(host, vers2, "udp", seconds, micros, option);
++	status = __rpc_ping(host, vers2, IPPROTO_UDP, seconds, micros, option);
+ 	if (status > 0)
+ 		return RPC_PING_V2 | RPC_PING_UDP;
+ 
+-	status = __rpc_ping(host, vers3, "udp", seconds, micros, option);
++	status = __rpc_ping(host, vers3, IPPROTO_UDP, seconds, micros, option);
+ 	if (status > 0)
+ 		return RPC_PING_V3 | RPC_PING_UDP;
+ 
+-	status = __rpc_ping(host, vers2, "tcp", seconds, micros, option);
++	status = __rpc_ping(host, vers2, IPPROTO_TCP, seconds, micros, option);
+ 	if (status > 0)
+ 		return RPC_PING_V2 | RPC_PING_TCP;
+ 
+-	status = __rpc_ping(host, vers3, "tcp", seconds, micros, option);
++	status = __rpc_ping(host, vers3, IPPROTO_TCP, seconds, micros, option);
+ 	if (status > 0)
+ 		return RPC_PING_V3 | RPC_PING_TCP;
+ 
+@@ -769,7 +751,7 @@ int rpc_time(const char *host,
+ 	double taken;
+ 	struct timeval start, end;
+ 	struct timezone tz;
+-	char *proto = (ping_proto & RPC_PING_UDP) ? "udp" : "tcp";
++	int proto = (ping_proto & RPC_PING_UDP) ? IPPROTO_UDP : IPPROTO_TCP;
+ 	unsigned long vers = ping_vers;
+ 
+ 	gettimeofday(&start, &tz);
+@@ -791,12 +773,12 @@ static int rpc_get_exports_proto(struct conn_info *info, exports *exp)
+ {
+ 	CLIENT *client;
+ 	enum clnt_stat status;
+-	int proto = info->proto->p_proto;
++	int proto = info->proto;
+ 	unsigned int option = info->close_option;
+ 	int vers_entry;
+ 	int ret;
+ 
+-	if (info->proto->p_proto == IPPROTO_UDP) {
++	if (info->proto == IPPROTO_UDP) {
+ 		info->send_sz = UDPMSGSIZE;
+ 		info->recv_sz = UDPMSGSIZE;
+ 	}
+@@ -903,11 +885,9 @@ exports rpc_get_exports(const char *host, long seconds, long micros, unsigned in
+ 	parms.pm_port = 0;
+ 
+ 	/* Try UDP first */
+-	info.proto = getprotobyname("udp");
+-	if (!info.proto)
+-		goto try_tcp;
++	info.proto = IPPROTO_UDP;
+ 
+-	parms.pm_prot = info.proto->p_proto;
++	parms.pm_prot = info.proto;
+ 
+ 	status = rpc_portmap_getport(&info, &parms, &info.port);
+ 	if (status < 0)
+@@ -920,11 +900,9 @@ exports rpc_get_exports(const char *host, long seconds, long micros, unsigned in
+ 		return exportlist;
+ 
+ try_tcp:
+-	info.proto = getprotobyname("tcp");
+-	if (!info.proto)
+-		return NULL;
++	info.proto = IPPROTO_TCP;
+ 
+-	parms.pm_prot = info.proto->p_proto;
++	parms.pm_prot = info.proto;
+ 
+ 	status = rpc_portmap_getport(&info, &parms, &info.port);
+ 	if (status < 0)
+diff --git a/modules/replicated.c b/modules/replicated.c
+index 6b96320..dbd5513 100644
+--- a/modules/replicated.c
++++ b/modules/replicated.c
+@@ -419,7 +419,7 @@ void free_host_list(struct host **list)
+ 
+ static unsigned int get_nfs_info(unsigned logopt, struct host *host,
+ 			 struct conn_info *pm_info, struct conn_info *rpc_info,
+-			 const char *proto, unsigned int version, int port)
++			 int proto, unsigned int version, int port)
+ {
+ 	unsigned int random_selection = host->options & MOUNT_FLAG_RANDOM_SELECT;
+ 	unsigned int use_weight_only = host->options & MOUNT_FLAG_USE_WEIGHT_ONLY;
+@@ -433,22 +433,18 @@ static unsigned int get_nfs_info(unsigned logopt, struct host *host,
+ 	int status, count = 0;
+ 
+ 	if (host->addr)
+-		debug(logopt, "called with host %s(%s) proto %s version 0x%x",
++		debug(logopt, "called with host %s(%s) proto %d version 0x%x",
+ 		      host->name, get_addr_string(host->addr, buf, len),
+ 		      proto, version);
+ 	else
+ 		debug(logopt,
+-		      "called for host %s proto %s version 0x%x",
++		      "called for host %s proto %d version 0x%x",
+ 		      host->name, proto, version);
+ 
+-	rpc_info->proto = getprotobyname(proto);
+-	if (!rpc_info->proto)
+-		return 0;
+-
++	rpc_info->proto = proto;
+ 	memset(&parms, 0, sizeof(struct pmap));
+-
+ 	parms.pm_prog = NFS_PROGRAM;
+-	parms.pm_prot = rpc_info->proto->p_proto;
++	parms.pm_prot = proto;
+ 
+ 	if (!(version & NFS4_REQUESTED))
+ 		goto v3_ver;
+@@ -479,7 +475,7 @@ static unsigned int get_nfs_info(unsigned logopt, struct host *host,
+ 		}
+ 	}
+ 
+-	if (rpc_info->proto->p_proto == IPPROTO_UDP)
++	if (rpc_info->proto == IPPROTO_UDP)
+ 		status = rpc_udp_getclient(rpc_info, NFS_PROGRAM, NFS4_VERSION);
+ 	else
+ 		status = rpc_tcp_getclient(rpc_info, NFS_PROGRAM, NFS4_VERSION);
+@@ -540,7 +536,7 @@ v3_ver:
+ 			goto v2_ver;
+ 	}
+ 
+-	if (rpc_info->proto->p_proto == IPPROTO_UDP)
++	if (rpc_info->proto == IPPROTO_UDP)
+ 		status = rpc_udp_getclient(rpc_info, NFS_PROGRAM, NFS3_VERSION);
+ 	else
+ 		status = rpc_tcp_getclient(rpc_info, NFS_PROGRAM, NFS3_VERSION);
+@@ -587,7 +583,7 @@ v2_ver:
+ 			goto done_ver;
+ 	}
+ 
+-	if (rpc_info->proto->p_proto == IPPROTO_UDP)
++	if (rpc_info->proto == IPPROTO_UDP)
+ 		status = rpc_udp_getclient(rpc_info, NFS_PROGRAM, NFS2_VERSION);
+ 	else
+ 		status = rpc_tcp_getclient(rpc_info, NFS_PROGRAM, NFS2_VERSION);
+@@ -618,7 +614,7 @@ v2_ver:
+ 	}
+ 
+ done_ver:
+-	if (rpc_info->proto->p_proto == IPPROTO_UDP) {
++	if (rpc_info->proto == IPPROTO_UDP) {
+ 		rpc_destroy_udp_client(rpc_info);
+ 		rpc_destroy_udp_client(pm_info);
+ 	} else {
+@@ -675,7 +671,7 @@ static int get_vers_and_cost(unsigned logopt, struct host *host,
+ 
+ 	if (version & TCP_REQUESTED) {
+ 		supported = get_nfs_info(logopt, host,
+-				   &pm_info, &rpc_info, "tcp", vers, port);
++				   &pm_info, &rpc_info, IPPROTO_TCP, vers, port);
+ 		if (IS_ERR(supported)) {
+ 			if (ERR(supported) == EHOSTUNREACH ||
+ 			    ERR(supported) == ETIMEDOUT)
+@@ -688,7 +684,7 @@ static int get_vers_and_cost(unsigned logopt, struct host *host,
+ 
+ 	if (version & UDP_REQUESTED) {
+ 		supported = get_nfs_info(logopt, host,
+-				   &pm_info, &rpc_info, "udp", vers, port);
++				   &pm_info, &rpc_info, IPPROTO_UDP, vers, port);
+ 		if (IS_ERR(supported)) {
+ 			if (!ret && ERR(supported) == ETIMEDOUT)
+ 				return ret;
+@@ -709,7 +705,7 @@ static int get_supported_ver_and_cost(unsigned logopt, struct host *host,
+ 	socklen_t len = INET6_ADDRSTRLEN;
+ 	char buf[len + 1];
+ 	struct conn_info pm_info, rpc_info;
+-	const char *proto;
++	int proto;
+ 	unsigned int vers;
+ 	struct timeval start, end;
+ 	struct timezone tz;
+@@ -748,10 +744,10 @@ static int get_supported_ver_and_cost(unsigned logopt, struct host *host,
+ 	 *  So, we do the conversion here.
+ 	 */
+ 	if (version & UDP_SELECTED_MASK) {
+-		proto = "udp";
++		proto = IPPROTO_UDP;
+ 		version >>= 8;
+ 	} else
+-		proto = "tcp";
++		proto = IPPROTO_TCP;
+ 
+ 	switch (version) {
+ 	case NFS2_SUPPORTED:
+@@ -768,9 +764,7 @@ static int get_supported_ver_and_cost(unsigned logopt, struct host *host,
+ 		return 0;
+ 	}
+ 
+-	rpc_info.proto = getprotobyname(proto);
+-	if (!rpc_info.proto)
+-		return 0;
++	rpc_info.proto = proto;
+ 
+ 	if (port > 0)
+ 		rpc_info.port = port;
+@@ -786,14 +780,14 @@ static int get_supported_ver_and_cost(unsigned logopt, struct host *host,
+ 
+ 		memset(&parms, 0, sizeof(struct pmap));
+ 		parms.pm_prog = NFS_PROGRAM;
+-		parms.pm_prot = rpc_info.proto->p_proto;
++		parms.pm_prot = rpc_info.proto;
+ 		parms.pm_vers = vers;
+ 		ret = rpc_portmap_getport(&pm_info, &parms, &rpc_info.port);
+ 		if (ret < 0)
+ 			goto done;
+ 	}
+ 
+-	if (rpc_info.proto->p_proto == IPPROTO_UDP)
++	if (rpc_info.proto == IPPROTO_UDP)
+ 		status = rpc_udp_getclient(&rpc_info, NFS_PROGRAM, vers);
+ 	else
+ 		status = rpc_tcp_getclient(&rpc_info, NFS_PROGRAM, vers);
+@@ -815,7 +809,7 @@ static int get_supported_ver_and_cost(unsigned logopt, struct host *host,
+ 		}
+ 	}
+ done:
+-	if (rpc_info.proto->p_proto == IPPROTO_UDP) {
++	if (rpc_info.proto == IPPROTO_UDP) {
+ 		rpc_destroy_udp_client(&rpc_info);
+ 		rpc_destroy_udp_client(&pm_info);
+ 	} else {
diff --git a/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-workaround-missing-GNU-versionsort-extension.patch b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-workaround-missing-GNU-versionsort-extension.patch
new file mode 100644
index 0000000..6a1a49e
--- /dev/null
+++ b/meta-networking/recipes-daemons/autofs/autofs-5.0.7/autofs-5.0.7-workaround-missing-GNU-versionsort-extension.patch
@@ -0,0 +1,149 @@ 
+autofs-5.0.7 - workaround missing GNU versionsort extension
+
+From: Chris Packham <chris.packham@alliedtelesis.co.nz>
+
+alphasort() and scandir() are specified in POSIX.1-2008, versionsort()
+is a GNU extension. When versionsort isn't available fallback to using
+alphasort.
+---
+
+ CHANGELOG            |    1 +
+ configure            |   62 ++++++++++++++++++++++++++++++++++++++++++++++++++
+ configure.in         |    6 +++++
+ include/config.h.in  |    3 ++
+ modules/lookup_dir.c |    5 ++++
+ 5 files changed, 77 insertions(+), 0 deletions(-)
+
+
+diff --git a/CHANGELOG b/CHANGELOG
+index 4eaa9f9..39388a5 100644
+--- a/CHANGELOG
++++ b/CHANGELOG
+@@ -27,6 +27,7 @@
+ - lib/defaults.c: use WITH_LDAP conditional around LDAP types.
+ - make yellow pages support optional.
+ - modules/replicated.c: use sin6_addr.s6_addr32.
++- workaround missing GNU versionsort extension.
+ 
+ 25/07/2012 autofs-5.0.7
+ =======================
+diff --git a/configure b/configure
+index cf6428c..c1423d8 100755
+--- a/configure
++++ b/configure
+@@ -4010,6 +4010,68 @@ $as_echo "yes" >&6; }
+   KRB5_FLAGS=`$KRB5_CONFIG --cflags`
+ fi
+ 
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing versionsort" >&5
++$as_echo_n "checking for library containing versionsort... " >&6; }
++if ${ac_cv_search_versionsort+:} false; then :
++  $as_echo_n "(cached) " >&6
++else
++  ac_func_search_save_LIBS=$LIBS
++cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h.  */
++
++/* Override any GCC internal prototype to avoid an error.
++   Use char because int might match the return type of a GCC
++   builtin and then its argument prototype would still apply.  */
++#ifdef __cplusplus
++extern "C"
++#endif
++char versionsort ();
++int
++main ()
++{
++return versionsort ();
++  ;
++  return 0;
++}
++_ACEOF
++for ac_lib in '' ; do
++  if test -z "$ac_lib"; then
++    ac_res="none required"
++  else
++    ac_res=-l$ac_lib
++    LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
++  fi
++  if ac_fn_c_try_link "$LINENO"; then :
++  ac_cv_search_versionsort=$ac_res
++fi
++rm -f core conftest.err conftest.$ac_objext \
++    conftest$ac_exeext
++  if ${ac_cv_search_versionsort+:} false; then :
++  break
++fi
++done
++if ${ac_cv_search_versionsort+:} false; then :
++
++else
++  ac_cv_search_versionsort=no
++fi
++rm conftest.$ac_ext
++LIBS=$ac_func_search_save_LIBS
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_versionsort" >&5
++$as_echo "$ac_cv_search_versionsort" >&6; }
++ac_res=$ac_cv_search_versionsort
++if test "$ac_res" != no; then :
++  test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
++
++fi
++
++if test "$ac_cv_search_versionsort" = "no"; then
++
++$as_echo "#define WITHOUT_VERSIONSORT 1" >>confdefs.h
++
++fi
++
+ #
+ # glibc/libc 6 new libraries
+ #
+diff --git a/configure.in b/configure.in
+index 363c376..4029375 100644
+--- a/configure.in
++++ b/configure.in
+@@ -163,6 +163,12 @@ AF_SLOPPY_MOUNT()
+ AF_CHECK_LIBXML()
+ AF_CHECK_KRB5()
+ 
++AC_SEARCH_LIBS([versionsort],[])
++if test "$ac_cv_search_versionsort" = "no"; then
++	AC_DEFINE(WITHOUT_VERSIONSORT, 1,
++		[Define if your C library does not provide versionsort])
++fi
++
+ #
+ # glibc/libc 6 new libraries
+ #
+diff --git a/include/config.h.in b/include/config.h.in
+index 7f1c5b5..a2a05a8 100644
+--- a/include/config.h.in
++++ b/include/config.h.in
+@@ -135,6 +135,9 @@
+ /* Define to 1 to use the libtirpc tsd usage workaround */
+ #undef TIRPC_WORKAROUND
+ 
++/* Define if your C library does not provide versionsort */
++#undef WITHOUT_VERSIONSORT
++
+ /* Define if using the dmalloc debugging malloc package */
+ #undef WITH_DMALLOC
+ 
+diff --git a/modules/lookup_dir.c b/modules/lookup_dir.c
+index 33901c0..07471b7 100644
+--- a/modules/lookup_dir.c
++++ b/modules/lookup_dir.c
+@@ -39,6 +39,11 @@
+ #define AUTOFS_DIR_EXT ".autofs"
+ #define AUTOFS_DIR_EXTSIZ (sizeof(AUTOFS_DIR_EXT) - 1)
+ 
++/* Work around non-GNU systems that don't provide versionsort */
++#ifdef WITHOUT_VERSIONSORT
++#define versionsort alphasort
++#endif
++
+ struct lookup_context {
+   const char *mapname;
+ };
diff --git a/meta-networking/recipes-daemons/autofs/autofs_5.0.7.bb b/meta-networking/recipes-daemons/autofs/autofs_5.0.7.bb
index 7d8cf17..6751402 100644
--- a/meta-networking/recipes-daemons/autofs/autofs_5.0.7.bb
+++ b/meta-networking/recipes-daemons/autofs/autofs_5.0.7.bb
@@ -3,7 +3,7 @@  SECTION = "base"
 LICENSE = "GPL-2.0"
 LIC_FILES_CHKSUM = "file://COPYING;md5=0636e73ff0215e8d672dc4c32c317bb3"
 
-PR = "r2"
+PR = "r3"
 
 DEPENDS += "libtirpc flex-native bison-native"
 
@@ -27,7 +27,30 @@  SRC_URI = "${KERNELORG_MIRROR}/linux/daemons/autofs/v5/autofs-${PV}.tar.bz2 \
            file://autofs-5.0.6-fix-recursive-mount-deadlock.patch \
            file://autofs-5.0.6-increase-file-map-read-buffer-size.patch \
            file://autofs-5.0.7-handle-new-location-of-systemd.patch \
+           file://autofs-5.0.7-fix-map-entry-duplicate-offset-detection.patch \
+           file://autofs-5.0.7-allow-nsswitch_conf-to-not-contain-automount-lines.patch \
+           file://autofs-5.0.7-fix-nobind-man-page-description.patch \
+           file://autofs-5.0.7-fix-submount-offset-delete.patch \
+           file://autofs-5.0.7-fix-init-script-status-return.patch \
+           file://autofs-5.0.7-fix-use-get_proximity-without-libtirpc.patch \
+           file://autofs-5.0.7-dont-use-dirent-d_type-to-filter-out-files-in-scandir.patch \
+           file://autofs-5.0.7-dont-schedule-new-alarms-after-readmap.patch \
+           file://autofs-5.0.7-use-numeric-protocol-ids-instead-of-protoent-structs.patch \
+           file://autofs-5.0.7-lib-defaults-use-WITH_LDAP-conditional-around-LDAP-types.patch \
            file://autofs-5.0.7-make-yellow-pages-support-optional.patch \
+           file://autofs-5.0.7-modules-replicated-use-sin6.addr-s6_addr32.patch \
+           file://autofs-5.0.7-workaround-missing-GNU-versionsort-extension.patch \
+           file://autofs-5.0.7-dont-fail-on-master-map-self-include.patch \
+           file://autofs-5.0.7-fix-wildcard-multi-map-regression.patch \
+           file://autofs-5.0.7-fix-file-descriptor-leak-when-reloading-the-daemon.patch \
+           file://autofs-5.0.7-depricate-nosymlink-pseudo-option.patch \
+           file://autofs-5.0.7-add-symlink-pseudo-option.patch \
+           file://autofs-5.0.7-update-kernel-include-files.patch \
+           file://autofs-5.0.7-fix-requires-in-spec-file.patch \
+           file://autofs-5.0.7-fix-libtirpc-build-option.patch \
+           file://autofs-5.0.7-fix-systemd-unidir-in-spec-file.patch \
+           file://autofs-5.0.7-document-browse-option-in-man-page.patch \
+           file://autofs-5.0.7-fix-automounter-support-on-parisc.patch \
            file://autofs-5.0.7-include-linux-nfs.h-directly-in-rpc_sub.patch \
            file://Makefile.rules-cross.patch \
            file://no-bash.patch \