diff --git a/make/target-tools.mk b/make/target-tools.mk index 01699114..d230e36d 100644 --- a/make/target-tools.mk +++ b/make/target-tools.mk @@ -891,7 +891,7 @@ ntfs-3g: $(ARCHIVE)/$(NTFS-3G_SOURCE) | $(TARGET_DIR) # ----------------------------------------------------------------------------- -AUTOFS_VER = 5.1.5 +AUTOFS_VER = 5.1.6 AUTOFS_TMP = autofs-$(AUTOFS_VER) AUTOFS_SOURCE = autofs-$(AUTOFS_VER).tar.xz AUTOFS_URL = https://www.kernel.org/pub/linux/daemons/autofs/v5 @@ -903,8 +903,8 @@ $(ARCHIVE)/$(AUTOFS_SOURCE): # wget -N https://mirrors.edge.kernel.org/pub/linux/daemons/autofs/v5/patches-5.1.6/patch_order_5.1.5 # for p in $(cat patch_order_5.1.5); do test -f $p || wget https://mirrors.edge.kernel.org/pub/linux/daemons/autofs/v5/patches-5.1.6/$p; done -AUTOFS_PATCH = $(shell cat $(PATCHES)/autofs/patch_order_$(AUTOFS_VER)) -AUTOFS_PATCH += force-STRIP-to-emtpy.patch +AUTOFS_PATCH = force-STRIP-to-emtpy.patch +#AUTOFS_PATCH += $(shell cat $(PATCHES)/autofs/patch_order_$(AUTOFS_VER)) AUTOFS_DEPS = libtirpc @@ -926,7 +926,6 @@ autofs: $(AUTOFS_DEPS) $(ARCHIVE)/$(AUTOFS_SOURCE) | $(TARGET_DIR) --disable-mount-locking \ --without-openldap \ --without-sasl \ - --enable-ignore-busy \ --with-path=$(PATH) \ --with-libtirpc \ --with-hesiod=no \ diff --git a/patches/autofs/autofs-5.1.5-Fix-NFS-mount-from-IPv6-addresses.patch b/patches/autofs/autofs-5.1.5-Fix-NFS-mount-from-IPv6-addresses.patch deleted file mode 100644 index c774b972..00000000 --- a/patches/autofs/autofs-5.1.5-Fix-NFS-mount-from-IPv6-addresses.patch +++ /dev/null @@ -1,47 +0,0 @@ -autofs-5.1.5 - Fix NFS mount from IPv6 addresses - -From: Goldwyn Rodrigues - -When an NFS server is specified by an IPv6 address and no mount -options, the mount fails because check_address_proto() -receives vers with TCP_REQUESTED set but the host.addr_len is -INET6_ADDRSTRLEN. Removing the check for INET_ADDRSTRLEN -fixes this issue. - -However, this will allow mount from "proto=tcp" for an IPv6 -addressed server. - -Fixes: 9053214 ("autofs-5.1.3 - fix ipv6 proto option handling") -Signed-off-by: Goldwyn Rodrigues -Acked-by: Ian Kent ---- - CHANGELOG | 1 + - modules/replicated.c | 3 --- - 2 files changed, 1 insertion(+), 3 deletions(-) - -diff --git a/CHANGELOG b/CHANGELOG -index 5650e73b..c8a3dec2 100644 ---- a/CHANGELOG -+++ b/CHANGELOG -@@ -6,6 +6,7 @@ xx/xx/2019 autofs-5.1.6 - - add mount_verbose configuration option. - - optionally log mount requestor process info. - - log mount call arguments if mount_verbose is set. -+- Fix NFS mount from IPv6 addresses. - - 30/10/2018 autofs-5.1.5 - - fix flag file permission. -diff --git a/modules/replicated.c b/modules/replicated.c -index 740270ec..e99e32a9 100644 ---- a/modules/replicated.c -+++ b/modules/replicated.c -@@ -497,9 +497,6 @@ static int check_address_proto(unsigned logopt, - if (ipv6_requested) { - if (host->addr_len == INET_ADDRSTRLEN) - ret = 0; -- } else { -- if (host->addr_len == INET6_ADDRSTRLEN) -- ret = 0; - } - - if (!ret) diff --git a/patches/autofs/autofs-5.1.5-add-NULL-check-for-get_addr_string-return.patch b/patches/autofs/autofs-5.1.5-add-NULL-check-for-get_addr_string-return.patch deleted file mode 100644 index 54200ef8..00000000 --- a/patches/autofs/autofs-5.1.5-add-NULL-check-for-get_addr_string-return.patch +++ /dev/null @@ -1,43 +0,0 @@ -autofs-5.1.5 - add NULL check for get_addr_string() return - -From: Ian Kent - -When constructing the mount location string in mount_nfs.c:mount_mount() -the return from get_addr_string() is not checked for NULL. - -Signed-off-by: Ian Kent ---- - CHANGELOG | 1 + - modules/mount_nfs.c | 6 ++++++ - 2 files changed, 7 insertions(+) - -diff --git a/CHANGELOG b/CHANGELOG -index 76da2ee4..e71e913a 100644 ---- a/CHANGELOG -+++ b/CHANGELOG -@@ -1,6 +1,7 @@ - xx/xx/2019 autofs-5.1.6 - - support strictexpire mount option. - - fix hesiod string check in master_parse(). -+- add NULL check for get_addr_string() return. - - 30/10/2018 autofs-5.1.5 - - fix flag file permission. -diff --git a/modules/mount_nfs.c b/modules/mount_nfs.c -index 426c27bd..295c4a5d 100644 ---- a/modules/mount_nfs.c -+++ b/modules/mount_nfs.c -@@ -333,7 +333,13 @@ dont_probe: - socklen_t len = INET6_ADDRSTRLEN; - char n_buf[len + 1]; - const char *n_addr; -+ - n_addr = get_addr_string(this->addr, n_buf, len); -+ if (!n_addr) { -+ char *estr = strerror_r(errno, buf, MAX_ERR_BUF); -+ error(ap->logopt, "get_addr_string: %s", estr); -+ goto forced_fail; -+ } - loc = malloc(strlen(n_addr) + strlen(this->path) + 4); - if (!loc) { - char *estr = strerror_r(errno, buf, MAX_ERR_BUF); diff --git a/patches/autofs/autofs-5.1.5-add-ignore-mount-option.patch b/patches/autofs/autofs-5.1.5-add-ignore-mount-option.patch deleted file mode 100644 index 7aa00d12..00000000 --- a/patches/autofs/autofs-5.1.5-add-ignore-mount-option.patch +++ /dev/null @@ -1,87 +0,0 @@ -autofs-5.1.5 - add ignore mount option - -From: Ian Kent - -Add mount option "ignore", if the kernel supports it, as an -indicator to applications to ignore the mount entry. - -Signed-off-by: Ian Kent ---- - daemon/direct.c | 10 ++++++++++ - daemon/indirect.c | 10 ++++++++++ - include/automount.h | 3 +++ - lib/master.c | 4 ++-- - 4 files changed, 25 insertions(+), 2 deletions(-) - -diff --git a/daemon/direct.c b/daemon/direct.c -index 4f468563..42992220 100644 ---- a/daemon/direct.c -+++ b/daemon/direct.c -@@ -431,6 +431,16 @@ int do_mount_autofs_direct(struct autofs_point *ap, - mp->options = tmp; - } - } -+ -+ if ((ap->flags & MOUNT_FLAG_IGNORE) && -+ ((get_kver_major() == 5 && get_kver_minor() > 4) || -+ (get_kver_major() > 5))) { -+ char *tmp = realloc(mp->options, strlen(mp->options) + 7); -+ if (tmp) { -+ strcat(tmp, ",ignore"); -+ mp->options = tmp; -+ } -+ } - } - - /* In case the directory doesn't exist, try to mkdir it */ -diff --git a/daemon/indirect.c b/daemon/indirect.c -index 9ccbc038..8719960e 100644 ---- a/daemon/indirect.c -+++ b/daemon/indirect.c -@@ -142,6 +142,16 @@ static int do_mount_autofs_indirect(struct autofs_point *ap, const char *root) - } - } - -+ if ((ap->flags & MOUNT_FLAG_IGNORE) && -+ ((get_kver_major() == 5 && get_kver_minor() > 4) || -+ (get_kver_major() > 5))) { -+ char *tmp = realloc(options, strlen(options) + 7); -+ if (tmp) { -+ strcat(tmp, ",ignore"); -+ options = tmp; -+ } -+ } -+ - /* In case the directory doesn't exist, try to mkdir it */ - if (mkdir_path(root, mp_mode) < 0) { - if (errno != EEXIST && errno != EROFS) { -diff --git a/include/automount.h b/include/automount.h -index 1bb32015..d02410f3 100644 ---- a/include/automount.h -+++ b/include/automount.h -@@ -557,6 +557,9 @@ struct kernel_mod_version { - /* Use strict expire semantics if requested and kernel supports it */ - #define MOUNT_FLAG_STRICTEXPIRE 0x0400 - -+/* Indicator for applications to ignore the mount entry */ -+#define MOUNT_FLAG_IGNORE 0x0800 -+ - struct autofs_point { - pthread_t thid; - char *path; /* Mount point name */ -diff --git a/lib/master.c b/lib/master.c -index 5f3a3d99..e0bd34ab 100644 ---- a/lib/master.c -+++ b/lib/master.c -@@ -101,9 +101,9 @@ int master_add_autofs_point(struct master_mapent *entry, unsigned logopt, - ap->negative_timeout = global_negative_timeout; - ap->exp_timeout = defaults_get_timeout(); - ap->exp_runfreq = 0; -- ap->flags = 0; -+ ap->flags = MOUNT_FLAG_IGNORE; - if (ghost) -- ap->flags = MOUNT_FLAG_GHOST; -+ ap->flags |= MOUNT_FLAG_GHOST; - - if (nobind) - ap->flags |= MOUNT_FLAG_NOBIND; diff --git a/patches/autofs/autofs-5.1.5-add-mount_verbose-configuration-option.patch b/patches/autofs/autofs-5.1.5-add-mount_verbose-configuration-option.patch deleted file mode 100644 index e49eddb4..00000000 --- a/patches/autofs/autofs-5.1.5-add-mount_verbose-configuration-option.patch +++ /dev/null @@ -1,188 +0,0 @@ -autofs-5.1.5 - add mount_verbose configuration option - -From: Lars R. Damerow - -This option makes automount pass the -v flag to mount(8). - -Signed-off-by: Lars R. Damerow -Signed-off-by: Ian Kent ---- - CHANGELOG | 1 + - daemon/spawn.c | 20 ++++++++++++-------- - include/defaults.h | 2 ++ - lib/defaults.c | 17 +++++++++++++++++ - man/autofs.conf.5.in | 4 ++++ - redhat/autofs.conf.default.in | 4 ++++ - samples/autofs.conf.default.in | 4 ++++ - 7 files changed, 44 insertions(+), 8 deletions(-) - -diff --git a/CHANGELOG b/CHANGELOG -index b3c3b3b9..c2a0c7f1 100644 ---- a/CHANGELOG -+++ b/CHANGELOG -@@ -3,6 +3,7 @@ xx/xx/2019 autofs-5.1.6 - - fix hesiod string check in master_parse(). - - add NULL check for get_addr_string() return. - - use malloc(3) in spawn.c. -+- add mount_verbose configuration option. - - 30/10/2018 autofs-5.1.5 - - fix flag file permission. -diff --git a/daemon/spawn.c b/daemon/spawn.c -index 2ab5c46f..4eb268ab 100644 ---- a/daemon/spawn.c -+++ b/daemon/spawn.c -@@ -558,12 +558,14 @@ int spawn_mount(unsigned logopt, ...) - char prog[] = PATH_MOUNT; - char arg0[] = PATH_MOUNT; - char argn[] = "-n"; -+ char argvr[] = "-v"; - /* In case we need to use the fake option to mount */ - char arg_fake[] = "-f"; - unsigned int options; - unsigned int retries = MTAB_LOCK_RETRIES; - int update_mtab = 1, ret, printed = 0; - unsigned int wait = defaults_get_mount_wait(); -+ int verbose = defaults_get_mount_verbose(); - char buf[PATH_MAX + 1]; - unsigned int argv_len; - -@@ -590,8 +592,10 @@ int spawn_mount(unsigned logopt, ...) - } - } - -- /* Alloc 1 extra slot in case we need to use the "-f" option */ -- argv_len = sizeof(char *) * (argc + 2); -+ /* Alloc 2 extra slots in case we need to use the "-f" or "-v" options -+ * plus the NULL slot for end of args. -+ */ -+ argv_len = sizeof(char *) * (argc + 3); - argv = malloc(argv_len); - if (!argv) { - char buf[MAX_ERR_BUF]; -@@ -604,12 +608,12 @@ int spawn_mount(unsigned logopt, ...) - argv[0] = arg0; - - va_start(arg, logopt); -- if (update_mtab) -- p = argv + 1; -- else { -- argv[1] = argn; -- p = argv + 2; -- } -+ p = argv + 1; -+ if (!update_mtab) -+ *(p++) = argn; -+ if (verbose) -+ *(p++) = argvr; -+ - while ((*p = va_arg(arg, char *))) { - if (options == SPAWN_OPT_OPEN && !strcmp(*p, "-t")) { - *(++p) = va_arg(arg, char *); -diff --git a/include/defaults.h b/include/defaults.h -index b28fde34..baa4b4c9 100644 ---- a/include/defaults.h -+++ b/include/defaults.h -@@ -27,6 +27,7 @@ - #define DEFAULT_TIMEOUT "600" - #define DEFAULT_MASTER_WAIT "10" - #define DEFAULT_NEGATIVE_TIMEOUT "60" -+#define DEFAULT_MOUNT_VERBOSE "0" - #define DEFAULT_MOUNT_WAIT "-1" - #define DEFAULT_UMOUNT_WAIT "12" - #define DEFAULT_BROWSE_MODE "1" -@@ -166,6 +167,7 @@ unsigned int defaults_get_ldap_timeout(void); - unsigned int defaults_get_ldap_network_timeout(void); - unsigned int defaults_get_mount_nfs_default_proto(void); - unsigned int defaults_get_append_options(void); -+unsigned int defaults_get_mount_verbose(void); - unsigned int defaults_get_mount_wait(void); - unsigned int defaults_get_umount_wait(void); - const char *defaults_get_auth_conf_file(void); -diff --git a/lib/defaults.c b/lib/defaults.c -index ae4d27c1..4ac5a180 100644 ---- a/lib/defaults.c -+++ b/lib/defaults.c -@@ -68,6 +68,7 @@ - - #define NAME_MOUNT_NFS_DEFAULT_PROTOCOL "mount_nfs_default_protocol" - #define NAME_APPEND_OPTIONS "append_options" -+#define NAME_MOUNT_VERBOSE "mount_verbose" - #define NAME_MOUNT_WAIT "mount_wait" - #define NAME_UMOUNT_WAIT "umount_wait" - #define NAME_AUTH_CONF_FILE "auth_conf_file" -@@ -328,6 +329,11 @@ static int conf_load_autofs_defaults(void) - if (ret == CFG_FAIL) - goto error; - -+ ret = conf_update(sec, NAME_MOUNT_VERBOSE, -+ DEFAULT_MOUNT_VERBOSE, CONF_ENV); -+ if (ret == CFG_FAIL) -+ goto error; -+ - ret = conf_update(sec, NAME_MOUNT_WAIT, - DEFAULT_MOUNT_WAIT, CONF_ENV); - if (ret == CFG_FAIL) -@@ -1781,6 +1787,17 @@ unsigned int defaults_get_append_options(void) - return res; - } - -+unsigned int defaults_get_mount_verbose(void) -+{ -+ long res; -+ -+ res = conf_get_yesno(autofs_gbl_sec, NAME_MOUNT_VERBOSE); -+ if (res < 0) -+ res = atoi(DEFAULT_MOUNT_VERBOSE); -+ -+ return res; -+} -+ - unsigned int defaults_get_mount_wait(void) - { - long wait; -diff --git a/man/autofs.conf.5.in b/man/autofs.conf.5.in -index cd7fc2f2..31136e2e 100644 ---- a/man/autofs.conf.5.in -+++ b/man/autofs.conf.5.in -@@ -41,6 +41,10 @@ Set the default timeout for caching failed key lookups (program default - 60). If the equivalent command line option is given it will override this - setting. - .TP -+.B mount_verbose -+.br -+Use the verbose flag when spawning mount(8) (program default "no"). -+.TP - .B mount_wait - .br - Set the default time to wait for a response from a spawned mount(8) -diff --git a/redhat/autofs.conf.default.in b/redhat/autofs.conf.default.in -index a72a79f6..7949f51a 100644 ---- a/redhat/autofs.conf.default.in -+++ b/redhat/autofs.conf.default.in -@@ -26,6 +26,10 @@ timeout = 300 - # - #negative_timeout = 60 - # -+# mount_verbose - use the -v flag when calling mount(8). -+# -+#mount_verbose = no -+# - # mount_wait - time to wait for a response from mount(8). - # Setting this timeout can cause problems when - # mount would otherwise wait for a server that -diff --git a/samples/autofs.conf.default.in b/samples/autofs.conf.default.in -index 2693a975..d33625f1 100644 ---- a/samples/autofs.conf.default.in -+++ b/samples/autofs.conf.default.in -@@ -26,6 +26,10 @@ timeout = 300 - # - #negative_timeout = 60 - # -+# mount_verbose - use the -v flag when calling mount(8). -+# -+#mount_verbose = no -+# - # mount_wait - time to wait for a response from mount(8). - # Setting this timeout can cause problems when - # mount would otherwise wait for a server that diff --git a/patches/autofs/autofs-5.1.5-add-strictexpire-mount-option.patch b/patches/autofs/autofs-5.1.5-add-strictexpire-mount-option.patch deleted file mode 100644 index 46451ac3..00000000 --- a/patches/autofs/autofs-5.1.5-add-strictexpire-mount-option.patch +++ /dev/null @@ -1,215 +0,0 @@ -autofs-5.1.5 - support strictexpire mount option - -From: Ian Kent - -Kernel commit 092a53452b (("autofs: take more care to not update -last_used on path walk") helped to (partially) resolve a problem -where automounts were not expiring due to aggressive accesses from -user space. - -This patch was later reverted because, for very large environments, -it meant more mount requests from clients and when there are a lot -of clients this caused a fairly significant increase in server load. - -But there is a need for both types of expire check, depending on use -case, so a mount option to allow for strict update of last use of -autofs dentrys has been added ito the autofs file system (which just -means not updating the last use on path walk accesses). - -So add support for this master map mount entry option in the user -space code. - -Signed-off-by: Ian Kent ---- - CHANGELOG | 3 +++ - daemon/direct.c | 10 ++++++++++ - daemon/indirect.c | 10 ++++++++++ - 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 +++++ - 8 files changed, 47 insertions(+), 1 deletion(-) - -diff --git a/CHANGELOG b/CHANGELOG -index ca036f19..f671dc52 100644 ---- a/CHANGELOG -+++ b/CHANGELOG -@@ -1,3 +1,6 @@ -+xx/xx/2019 autofs-5.1.6 -+- support strictexpire mount option. -+ - 30/10/2018 autofs-5.1.5 - - fix flag file permission. - - fix directory create permission. -diff --git a/daemon/direct.c b/daemon/direct.c -index b885d12f..9c61c4b4 100644 ---- a/daemon/direct.c -+++ b/daemon/direct.c -@@ -421,6 +421,16 @@ int do_mount_autofs_direct(struct autofs_point *ap, - mp->options = make_options_string(ap->path, ap->kpipefd, str_direct); - if (!mp->options) - return 0; -+ -+ if ((ap->flags & MOUNT_FLAG_STRICTEXPIRE) && -+ ((get_kver_major() == 5 && get_kver_minor() > 3) || -+ (get_kver_major() > 5))) { -+ char *tmp = realloc(mp->options, strlen(mp->options) + 12); -+ if (tmp) { -+ strcat(tmp, ",strictexpire"); -+ mp->options = tmp; -+ } -+ } - } - - /* In case the directory doesn't exist, try to mkdir it */ -diff --git a/daemon/indirect.c b/daemon/indirect.c -index 438a0a21..d0724293 100644 ---- a/daemon/indirect.c -+++ b/daemon/indirect.c -@@ -132,6 +132,16 @@ static int do_mount_autofs_indirect(struct autofs_point *ap, const char *root) - goto out_err; - } - -+ if ((ap->flags & MOUNT_FLAG_STRICTEXPIRE) && -+ ((get_kver_major() == 5 && get_kver_minor() > 3) || -+ (get_kver_major() > 5))) { -+ char *tmp = realloc(options, strlen(options) + 12); -+ if (tmp) { -+ strcat(tmp, ",strictexpire"); -+ options = tmp; -+ } -+ } -+ - /* In case the directory doesn't exist, try to mkdir it */ - if (mkdir_path(root, mp_mode) < 0) { - if (errno != EEXIST && errno != EROFS) { -diff --git a/include/automount.h b/include/automount.h -index 947daa10..1bb32015 100644 ---- a/include/automount.h -+++ b/include/automount.h -@@ -554,6 +554,9 @@ struct kernel_mod_version { - #define MOUNT_FLAG_SLAVE 0x0100 - #define MOUNT_FLAG_PRIVATE 0x0200 - -+/* Use strict expire semantics if requested and kernel supports it */ -+#define MOUNT_FLAG_STRICTEXPIRE 0x0400 -+ - struct autofs_point { - pthread_t thid; - char *path; /* Mount point name */ -diff --git a/lib/master_parse.y b/lib/master_parse.y -index 9aa57327..8fe8b128 100644 ---- a/lib/master_parse.y -+++ b/lib/master_parse.y -@@ -58,6 +58,7 @@ static char *format; - static long timeout; - static long negative_timeout; - static unsigned symlnk; -+static unsigned strictexpire; - static unsigned slave; - static unsigned private; - static unsigned nobind; -@@ -105,7 +106,7 @@ static int master_fprintf(FILE *, char *, ...); - %token MAP - %token OPT_TIMEOUT OPT_NTIMEOUT OPT_NOBIND OPT_NOGHOST OPT_GHOST OPT_VERBOSE - %token OPT_DEBUG OPT_RANDOM OPT_USE_WEIGHT OPT_SYMLINK OPT_MODE --%token OPT_SLAVE OPT_PRIVATE -+%token OPT_STRICTEXPIRE OPT_SLAVE OPT_PRIVATE - %token COLON COMMA NL DDASH - %type map - %type options -@@ -206,6 +207,7 @@ line: - | PATH OPT_DEBUG { master_notify($1); YYABORT; } - | PATH OPT_TIMEOUT { master_notify($1); YYABORT; } - | PATH OPT_SYMLINK { master_notify($1); YYABORT; } -+ | PATH OPT_STRICTEXPIRE { master_notify($1); YYABORT; } - | PATH OPT_SLAVE { master_notify($1); YYABORT; } - | PATH OPT_PRIVATE { master_notify($1); YYABORT; } - | PATH OPT_NOBIND { master_notify($1); YYABORT; } -@@ -619,6 +621,7 @@ option: daemon_option - daemon_option: OPT_TIMEOUT NUMBER { timeout = $2; } - | OPT_NTIMEOUT NUMBER { negative_timeout = $2; } - | OPT_SYMLINK { symlnk = 1; } -+ | OPT_STRICTEXPIRE { strictexpire = 1; } - | OPT_SLAVE { slave = 1; } - | OPT_PRIVATE { private = 1; } - | OPT_NOBIND { nobind = 1; } -@@ -693,6 +696,7 @@ static void local_init_vars(void) - timeout = -1; - negative_timeout = 0; - symlnk = 0; -+ strictexpire = 0; - slave = 0; - private = 0; - nobind = 0; -@@ -901,6 +905,8 @@ int master_parse_entry(const char *buffer, unsigned int default_timeout, unsigne - entry->ap->flags |= MOUNT_FLAG_USE_WEIGHT_ONLY; - if (symlnk) - entry->ap->flags |= MOUNT_FLAG_SYMLINK; -+ if (strictexpire) -+ entry->ap->flags |= MOUNT_FLAG_STRICTEXPIRE; - if (slave) - entry->ap->flags |= MOUNT_FLAG_SLAVE; - if (private) -diff --git a/lib/master_tok.l b/lib/master_tok.l -index f4e940ce..7486710b 100644 ---- a/lib/master_tok.l -+++ b/lib/master_tok.l -@@ -391,6 +391,7 @@ MODE (--mode{OPTWS}|--mode{OPTWS}={OPTWS}) - -?nobrowse { return(OPT_NOGHOST); } - -?slave { return(OPT_SLAVE); } - -?private { return(OPT_PRIVATE); } -+ -?strictexpire { return(OPT_STRICTEXPIRE); } - -g|--ghost|-?browse { return(OPT_GHOST); } - -v|--verbose { return(OPT_VERBOSE); } - -d|--debug { return(OPT_DEBUG); } -diff --git a/man/auto.master.5.in b/man/auto.master.5.in -index 68242d45..dace4a1c 100644 ---- a/man/auto.master.5.in -+++ b/man/auto.master.5.in -@@ -199,6 +199,14 @@ 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 "strictexpire" -+Use a strict expire policy for this automount. Using this option means -+that last use of autofs directory entries will not be updated during -+path walks so that mounts in an automount won't be kept mounted by -+applications scanning the mount tree. Note that this doesn't completely -+resolve the problem of expired automounts being immediately re-mounted -+due to application accesses triggered by the expire itself. -+.TP - .I slave \fPor\fI private - This option allows mount propagation of bind mounts to be set to - either \fIslave\fP or \fIprivate\fP. This option may be needed when using -diff --git a/modules/mount_autofs.c b/modules/mount_autofs.c -index cd0631b8..72e1aba4 100644 ---- a/modules/mount_autofs.c -+++ b/modules/mount_autofs.c -@@ -57,6 +57,7 @@ int mount_mount(struct autofs_point *ap, const char *root, const char *name, - int nobind = ap->flags & MOUNT_FLAG_NOBIND; - int ghost = ap->flags & MOUNT_FLAG_GHOST; - int symlnk = ap->flags & MOUNT_FLAG_SYMLINK; -+ int strictexpire = ap->flags & MOUNT_FLAG_STRICTEXPIRE; - time_t timeout = get_exp_timeout(ap, ap->entry->maps); - unsigned logopt = ap->logopt; - struct map_type_info *info; -@@ -131,6 +132,8 @@ int mount_mount(struct autofs_point *ap, const char *root, const char *name, - ghost = 1; - else if (_strncmp("symlink", cp, 7) == 0) - symlnk = 1; -+ else if (_strncmp("strictexpire", cp, 12) == 0) -+ strictexpire = 1; - else if (_strncmp("hosts", cp, 5) == 0) - hosts = 1; - else if (_strncmp("timeout=", cp, 8) == 0) { -@@ -173,6 +176,8 @@ int mount_mount(struct autofs_point *ap, const char *root, const char *name, - nap->parent = ap; - if (symlnk) - nap->flags |= MOUNT_FLAG_SYMLINK; -+ if (strictexpire) -+ nap->flags |= MOUNT_FLAG_STRICTEXPIRE; - - if (hosts) - argc = 0; diff --git a/patches/autofs/autofs-5.1.5-fix-hesiod-string-check-in-master_parse.patch b/patches/autofs/autofs-5.1.5-fix-hesiod-string-check-in-master_parse.patch deleted file mode 100644 index 4c155fa0..00000000 --- a/patches/autofs/autofs-5.1.5-fix-hesiod-string-check-in-master_parse.patch +++ /dev/null @@ -1,52 +0,0 @@ -autofs-5.1.5 - fix hesiod string check in master_parse() - -From: Ian Kent - -When map source is specified in a master map entry, checking if -map type is hesiod in master_parse() will generate a SEGV if a -parser type is not also present becuase tmp will be NULL in this -case. - -Signed-off-by: Ian Kent ---- - CHANGELOG | 1 + - lib/master_parse.y | 8 ++++---- - 2 files changed, 5 insertions(+), 4 deletions(-) - -diff --git a/CHANGELOG b/CHANGELOG -index f671dc52..76da2ee4 100644 ---- a/CHANGELOG -+++ b/CHANGELOG -@@ -1,5 +1,6 @@ - xx/xx/2019 autofs-5.1.6 - - support strictexpire mount option. -+- fix hesiod string check in master_parse(). - - 30/10/2018 autofs-5.1.5 - - fix flag file permission. -diff --git a/lib/master_parse.y b/lib/master_parse.y -index 8fe8b128..f817f739 100644 ---- a/lib/master_parse.y -+++ b/lib/master_parse.y -@@ -173,8 +173,8 @@ line: - if ((tmp = strchr($2, ','))) - *tmp++ = '\0'; - #ifndef WITH_HESIOD -- /* Map type or or map type parser is hesiod */ -- if (!strcmp($2, "hesiod") || !strcmp(tmp, "hesiod")) { -+ /* Map type or map type parser is hesiod */ -+ if (!strcmp($2, "hesiod") || (tmp && !strcmp(tmp, "hesiod"))) { - master_error("hesiod support not built in"); - local_free_vars(); - YYABORT; -@@ -362,8 +362,8 @@ map: PATH - if ((tmp = strchr($1, ','))) - *tmp++ = '\0'; - #ifndef WITH_HESIOD -- /* Map type or or map type parser is hesiod */ -- if (!strcmp($1, "hesiod") || !strcmp(tmp, "hesiod")) { -+ /* Map type or map type parser is hesiod */ -+ if (!strcmp($1, "hesiod") || (tmp && !strcmp(tmp, "hesiod"))) { - master_error("hesiod support not built in"); - local_free_vars(); - YYABORT; diff --git a/patches/autofs/autofs-5.1.5-log-mount-call-arguments-if-mount_verbose-is-set.patch b/patches/autofs/autofs-5.1.5-log-mount-call-arguments-if-mount_verbose-is-set.patch deleted file mode 100644 index 56f75195..00000000 --- a/patches/autofs/autofs-5.1.5-log-mount-call-arguments-if-mount_verbose-is-set.patch +++ /dev/null @@ -1,234 +0,0 @@ -autofs-5.1.5 - log mount call arguments if mount_verbose is set - -From: Lars R. Damerow - -Override the debug log only setting if mount_verbose is set so that -mount parameter information is logged on mount. - -Signed-off-by: Lars R. Damerow -Signed-off-by: Ian Kent ---- - CHANGELOG | 1 + - modules/mount_afs.c | 6 +++++- - modules/mount_bind.c | 10 +++++++--- - modules/mount_ext2.c | 16 ++++++++++------ - modules/mount_generic.c | 14 +++++++++----- - modules/mount_nfs.c | 29 +++++++++++++++++------------ - 6 files changed, 49 insertions(+), 27 deletions(-) - -diff --git a/CHANGELOG b/CHANGELOG -index ee7deda4..5650e73b 100644 ---- a/CHANGELOG -+++ b/CHANGELOG -@@ -5,6 +5,7 @@ xx/xx/2019 autofs-5.1.6 - - use malloc(3) in spawn.c. - - add mount_verbose configuration option. - - optionally log mount requestor process info. -+- log mount call arguments if mount_verbose is set. - - 30/10/2018 autofs-5.1.5 - - fix flag file permission. -diff --git a/modules/mount_afs.c b/modules/mount_afs.c -index 2a776bd2..ef4e04da 100644 ---- a/modules/mount_afs.c -+++ b/modules/mount_afs.c -@@ -37,10 +37,14 @@ int mount_mount(struct autofs_point *ap, const char *root, const char *name, int - char dest[PATH_MAX + 1]; - size_t r_len = strlen(root); - size_t d_len = r_len + name_len + 2; -+ void (*mountlog)(unsigned int, const char*, ...) = &log_debug; - - if (ap->flags & MOUNT_FLAG_REMOUNT) - return 0; - -+ if (defaults_get_mount_verbose()) -+ mountlog = &log_info; -+ - if (d_len > PATH_MAX) - return 1; - -@@ -53,7 +57,7 @@ int mount_mount(struct autofs_point *ap, const char *root, const char *name, int - if (dest[strlen(dest)-1] == '/') - dest[strlen(dest)-1] = '\0'; - -- debug(ap->logopt, MODPREFIX "mounting AFS %s -> %s", dest, what); -+ mountlog(ap->logopt, MODPREFIX "mounting AFS %s -> %s", dest, what); - - return symlink(what, dest); /* Try it. If it fails, return the error. */ - } -diff --git a/modules/mount_bind.c b/modules/mount_bind.c -index b64cdccc..9cba0d7a 100644 ---- a/modules/mount_bind.c -+++ b/modules/mount_bind.c -@@ -81,10 +81,14 @@ int mount_mount(struct autofs_point *ap, const char *root, const char *name, int - int err; - int i, len; - int symlnk = (*name != '/' && (ap->flags & MOUNT_FLAG_SYMLINK)); -+ void (*mountlog)(unsigned int, const char*, ...) = &log_debug; - - if (ap->flags & MOUNT_FLAG_REMOUNT) - return 0; - -+ if (defaults_get_mount_verbose()) -+ mountlog = &log_info; -+ - /* Extract "symlink" pseudo-option which forces local filesystems - * to be symlinked instead of bound. - */ -@@ -164,9 +168,9 @@ int mount_mount(struct autofs_point *ap, const char *root, const char *name, int - if (!status) - existed = 0; - -- debug(ap->logopt, MODPREFIX -- "calling mount --bind -o %s %s %s", -- options, what, fullpath); -+ mountlog(ap->logopt, MODPREFIX -+ "calling mount --bind -o %s %s %s", -+ options, what, fullpath); - - err = spawn_bind_mount(ap->logopt, "-o", - options, what, fullpath, NULL); -diff --git a/modules/mount_ext2.c b/modules/mount_ext2.c -index 3bbea95a..eb28b06c 100644 ---- a/modules/mount_ext2.c -+++ b/modules/mount_ext2.c -@@ -47,10 +47,14 @@ int mount_mount(struct autofs_point *ap, const char *root, const char *name, int - int err, ro = 0; - const char *fsck_prog; - int len, status, existed = 1; -+ void (*mountlog)(unsigned int, const char*, ...) = &log_debug; - - if (ap->flags & MOUNT_FLAG_REMOUNT) - return 0; - -+ if (defaults_get_mount_verbose()) -+ mountlog = &log_info; -+ - /* Root offset of multi-mount */ - len = strlen(root); - if (root[len - 1] == '/') { -@@ -121,15 +125,15 @@ int mount_mount(struct autofs_point *ap, const char *root, const char *name, int - } - - if (options) { -- debug(ap->logopt, MODPREFIX -- "calling mount -t %s -o %s %s %s", -- fstype, options, what, fullpath); -+ mountlog(ap->logopt, MODPREFIX -+ "calling mount -t %s -o %s %s %s", -+ fstype, options, what, fullpath); - err = spawn_mount(ap->logopt, "-t", fstype, - "-o", options, what, fullpath, NULL); - } else { -- debug(ap->logopt, -- MODPREFIX "calling mount -t %s %s %s", -- fstype, what, fullpath); -+ mountlog(ap->logopt, -+ MODPREFIX "calling mount -t %s %s %s", -+ fstype, what, fullpath); - err = spawn_mount(ap->logopt, "-t", fstype, what, fullpath, NULL); - } - -diff --git a/modules/mount_generic.c b/modules/mount_generic.c -index b1a3adbf..cf531145 100644 ---- a/modules/mount_generic.c -+++ b/modules/mount_generic.c -@@ -46,10 +46,14 @@ int mount_mount(struct autofs_point *ap, const char *root, const char *name, int - char buf[MAX_ERR_BUF]; - int err; - int len, status, existed = 1; -+ void (*mountlog)(unsigned int, const char*, ...) = &log_debug; - - if (ap->flags & MOUNT_FLAG_REMOUNT) - return 0; - -+ if (defaults_get_mount_verbose()) -+ mountlog = &log_info; -+ - /* Root offset of multi-mount */ - len = strlen(root); - if (root[len - 1] == '/') { -@@ -80,15 +84,15 @@ int mount_mount(struct autofs_point *ap, const char *root, const char *name, int - existed = 0; - - if (options && options[0]) { -- debug(ap->logopt, -- MODPREFIX "calling mount -t %s -o %s %s %s", -- fstype, options, what, fullpath); -+ mountlog(ap->logopt, -+ MODPREFIX "calling mount -t %s -o %s %s %s", -+ fstype, options, what, fullpath); - - err = spawn_mount(ap->logopt, "-t", fstype, - "-o", options, what, fullpath, NULL); - } else { -- debug(ap->logopt, MODPREFIX "calling mount -t %s %s %s", -- fstype, what, fullpath); -+ mountlog(ap->logopt, MODPREFIX "calling mount -t %s %s %s", -+ fstype, what, fullpath); - err = spawn_mount(ap->logopt, "-t", fstype, what, fullpath, NULL); - } - -diff --git a/modules/mount_nfs.c b/modules/mount_nfs.c -index 295c4a5d..4e3e703f 100644 ---- a/modules/mount_nfs.c -+++ b/modules/mount_nfs.c -@@ -77,13 +77,17 @@ int mount_mount(struct autofs_point *ap, const char *root, const char *name, int - int port = -1; - int ro = 0; /* Set if mount bind should be read-only */ - int rdma = 0; -+ void (*mountlog)(unsigned int, const char*, ...) = &log_debug; - - if (ap->flags & MOUNT_FLAG_REMOUNT) - return 0; - -- debug(ap->logopt, -- MODPREFIX "root=%s name=%s what=%s, fstype=%s, options=%s", -- root, name, what, fstype, options); -+ if (defaults_get_mount_verbose()) -+ mountlog = &log_info; -+ -+ mountlog(ap->logopt, -+ MODPREFIX "root=%s name=%s what=%s, fstype=%s, options=%s", -+ root, name, what, fstype, options); - - mount_default_proto = defaults_get_mount_nfs_default_proto(); - vers = NFS_VERS_DEFAULT | NFS_PROTO_DEFAULT; -@@ -203,9 +207,9 @@ int mount_mount(struct autofs_point *ap, const char *root, const char *name, int - if ((vers & NFS_PROTO_MASK) == 0) - vers |= NFS_PROTO_MASK; - -- debug(ap->logopt, MODPREFIX -- "nfs options=\"%s\", nobind=%d, nosymlink=%d, ro=%d", -- nfsoptions, nobind, nosymlink, ro); -+ mountlog(ap->logopt, MODPREFIX -+ "nfs options=\"%s\", nobind=%d, nosymlink=%d, ro=%d", -+ nfsoptions, nobind, nosymlink, ro); - } - - if (!parse_location(ap->logopt, &hosts, what, flags)) { -@@ -379,17 +383,18 @@ dont_probe: - } - - if (nfsoptions && *nfsoptions) { -- debug(ap->logopt, -- MODPREFIX "calling mount -t %s " SLOPPY -- "-o %s %s %s", fstype, nfsoptions, loc, fullpath); -+ mountlog(ap->logopt, -+ MODPREFIX "calling mount -t %s " SLOPPY -+ "-o %s %s %s", fstype, nfsoptions, loc, -+ fullpath); - - err = spawn_mount(ap->logopt, - "-t", fstype, SLOPPYOPT "-o", - nfsoptions, loc, fullpath, NULL); - } else { -- debug(ap->logopt, -- MODPREFIX "calling mount -t %s %s %s", -- fstype, loc, fullpath); -+ mountlog(ap->logopt, -+ MODPREFIX "calling mount -t %s %s %s", -+ fstype, loc, fullpath); - err = spawn_mount(ap->logopt, - "-t", fstype, loc, fullpath, NULL); - } diff --git a/patches/autofs/autofs-5.1.5-optionally-log-mount-requestor-process-info.patch b/patches/autofs/autofs-5.1.5-optionally-log-mount-requestor-process-info.patch deleted file mode 100644 index 51d6f389..00000000 --- a/patches/autofs/autofs-5.1.5-optionally-log-mount-requestor-process-info.patch +++ /dev/null @@ -1,171 +0,0 @@ -autofs-5.1.5 - optionally log mount requestor process info - -From: Lars R. Damerow - -This information can be helpful to determine who or what is making -particular mount requests, especially when used in conjunction with -the use_mount_request_log_id option. - -Signed-off-by: Lars R. Damerow -Signed-off-by: Ian Kent ---- - CHANGELOG | 1 + - daemon/direct.c | 6 ++++++ - daemon/indirect.c | 6 ++++++ - include/log.h | 2 ++ - lib/log.c | 39 +++++++++++++++++++++++++++++++++++++++ - man/autofs.conf.5.in | 3 ++- - redhat/autofs.conf.default.in | 4 +++- - samples/autofs.conf.default.in | 4 +++- - 8 files changed, 62 insertions(+), 3 deletions(-) - -diff --git a/CHANGELOG b/CHANGELOG -index c2a0c7f1..ee7deda4 100644 ---- a/CHANGELOG -+++ b/CHANGELOG -@@ -4,6 +4,7 @@ xx/xx/2019 autofs-5.1.6 - - add NULL check for get_addr_string() return. - - use malloc(3) in spawn.c. - - add mount_verbose configuration option. -+- optionally log mount requestor process info. - - 30/10/2018 autofs-5.1.5 - - fix flag file permission. -diff --git a/daemon/direct.c b/daemon/direct.c -index 9c61c4b4..4f468563 100644 ---- a/daemon/direct.c -+++ b/daemon/direct.c -@@ -1242,6 +1242,12 @@ static void *do_mount_direct(void *arg) - - pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, &state); - -+ if (defaults_get_mount_verbose()) { -+ pid_t ppid = log_pidinfo(ap, mt.pid, "requestor"); -+ if (ppid > 0) -+ log_pidinfo(ap, ppid, "parent"); -+ } -+ - status = fstat(mt.ioctlfd, &st); - if (status == -1) { - error(ap->logopt, -diff --git a/daemon/indirect.c b/daemon/indirect.c -index d0724293..9ccbc038 100644 ---- a/daemon/indirect.c -+++ b/daemon/indirect.c -@@ -758,6 +758,12 @@ static void *do_mount_indirect(void *arg) - - pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, &state); - -+ if (defaults_get_mount_verbose()) { -+ pid_t ppid = log_pidinfo(ap, mt.pid, "requestor"); -+ if (ppid > 0) -+ log_pidinfo(ap, ppid, "parent"); -+ } -+ - len = ncat_path(buf, sizeof(buf), ap->path, mt.name, mt.len); - if (!len) { - crit(ap->logopt, "path to be mounted is to long"); -diff --git a/include/log.h b/include/log.h -index c9b17b3c..69eed96b 100644 ---- a/include/log.h -+++ b/include/log.h -@@ -46,6 +46,8 @@ extern void log_crit(unsigned, const char* msg, ...); - extern void log_debug(unsigned int, const char* msg, ...); - extern void logmsg(const char* msg, ...); - -+extern pid_t log_pidinfo(struct autofs_point *ap, pid_t pid, char *label); -+ - #define debug(opt, msg, args...) \ - do { log_debug(opt, "%s: " msg, __FUNCTION__, ##args); } while (0) - -diff --git a/lib/log.c b/lib/log.c -index ca771d72..0cb47d7e 100644 ---- a/lib/log.c -+++ b/lib/log.c -@@ -325,3 +325,42 @@ void log_to_stderr(void) - - return; - } -+ -+pid_t log_pidinfo(struct autofs_point *ap, pid_t pid, char *label) { -+ char buf[PATH_MAX + 1] = ""; -+ FILE *statfile; -+ -+ pid_t tgid, ppid; -+ int uid, euid, gid, egid; -+ char comm[64] = ""; -+ -+ sprintf(buf, "/proc/%d/status", pid); -+ statfile = fopen(buf, "r"); -+ if (statfile == NULL) { -+ info(ap->logopt, "pidinfo %s: failed to open %s", label, buf); -+ return -1; -+ } -+ -+ while (fgets(buf, sizeof(buf), statfile) != NULL) { -+ if (strncmp(buf, "Name:", 5) == 0) { -+ sscanf(buf, "Name:\t%s", (char *) &comm); -+ } else if (strncmp(buf, "Tgid:", 5) == 0) { -+ sscanf(buf, "Tgid:\t%d", (int *) &tgid); -+ } else if (strncmp(buf, "PPid:", 5) == 0) { -+ sscanf(buf, "PPid:\t%d", (int *) &ppid); -+ } else if (strncmp(buf, "Uid:", 4) == 0) { -+ sscanf(buf, -+ "Uid:\t%d\t%d", (int *) &uid, (int *) &euid); -+ } else if (strncmp(buf, "Gid:", 4) == 0) { -+ sscanf(buf, -+ "Gid:\t%d\t%d", (int *) &gid, (int *) &egid); -+ } -+ } -+ fclose(statfile); -+ -+ info(ap->logopt, -+ "pidinfo %s: pid:%d comm:%s tgid:%d uid:%d euid:%d gid:%d egid:%d", -+ label, pid, comm, tgid, uid, euid, gid, egid); -+ -+ return ppid; -+} -diff --git a/man/autofs.conf.5.in b/man/autofs.conf.5.in -index 31136e2e..95ff7dd0 100644 ---- a/man/autofs.conf.5.in -+++ b/man/autofs.conf.5.in -@@ -43,7 +43,8 @@ setting. - .TP - .B mount_verbose - .br --Use the verbose flag when spawning mount(8) (program default "no"). -+Use the verbose flag when spawning mount(8), and log some process info -+about the requestor and its parent (program default "no"). - .TP - .B mount_wait - .br -diff --git a/redhat/autofs.conf.default.in b/redhat/autofs.conf.default.in -index 7949f51a..4b89a5f7 100644 ---- a/redhat/autofs.conf.default.in -+++ b/redhat/autofs.conf.default.in -@@ -26,7 +26,9 @@ timeout = 300 - # - #negative_timeout = 60 - # --# mount_verbose - use the -v flag when calling mount(8). -+# mount_verbose - use the -v flag when calling mount(8) and log some -+# process information about the requestor and its -+# parent. - # - #mount_verbose = no - # -diff --git a/samples/autofs.conf.default.in b/samples/autofs.conf.default.in -index d33625f1..2f155111 100644 ---- a/samples/autofs.conf.default.in -+++ b/samples/autofs.conf.default.in -@@ -26,7 +26,9 @@ timeout = 300 - # - #negative_timeout = 60 - # --# mount_verbose - use the -v flag when calling mount(8). -+# mount_verbose - use the -v flag when calling mount(8) and log some -+# process information about the requestor and its -+# parent. - # - #mount_verbose = no - # diff --git a/patches/autofs/autofs-5.1.5-use-malloc-in-spawn_c.patch b/patches/autofs/autofs-5.1.5-use-malloc-in-spawn_c.patch deleted file mode 100644 index 653d87dd..00000000 --- a/patches/autofs/autofs-5.1.5-use-malloc-in-spawn_c.patch +++ /dev/null @@ -1,165 +0,0 @@ -autofs-5.1.5 - use malloc(3) in spawn.c - -From: Ian Kent - -Use malloc(3) in spawn.c functions instead of alloca(3) as a failure -return for this function is undefined. - -Signed-off-by: Ian Kent ---- - CHANGELOG | 1 + - daemon/spawn.c | 50 ++++++++++++++++++++++++++++++++++++++++++++------ - 2 files changed, 45 insertions(+), 6 deletions(-) - -diff --git a/CHANGELOG b/CHANGELOG -index e71e913a..b3c3b3b9 100644 ---- a/CHANGELOG -+++ b/CHANGELOG -@@ -2,6 +2,7 @@ xx/xx/2019 autofs-5.1.6 - - support strictexpire mount option. - - fix hesiod string check in master_parse(). - - add NULL check for get_addr_string() return. -+- use malloc(3) in spawn.c. - - 30/10/2018 autofs-5.1.5 - - fix flag file permission. -diff --git a/daemon/spawn.c b/daemon/spawn.c -index dbbca7fa..2ab5c46f 100644 ---- a/daemon/spawn.c -+++ b/daemon/spawn.c -@@ -521,22 +521,33 @@ int spawnv(unsigned logopt, const char *prog, const char *const *argv) - int spawnl(unsigned logopt, const char *prog, ...) - { - va_list arg; -- int argc; -+ int argc, ret; - char **argv, **p; -+ unsigned int argv_len; - - va_start(arg, prog); - for (argc = 1; va_arg(arg, char *); argc++); - va_end(arg); - -- if (!(argv = alloca(sizeof(char *) * argc))) -+ argv_len = sizeof(char *) * (argc + 1); -+ argv = malloc(argv_len); -+ if (!argv) { -+ char buf[MAX_ERR_BUF]; -+ char *estr = strerror_r(errno, buf, sizeof(buf)); -+ crit(logopt, "malloc: %s", estr); - return -1; -+ } -+ memset(argv, 0, argv_len); - - va_start(arg, prog); - p = argv; - while ((*p++ = va_arg(arg, char *))); - va_end(arg); - -- return do_spawn(logopt, -1, SPAWN_OPT_NONE, prog, (const char **) argv); -+ ret = do_spawn(logopt, -1, SPAWN_OPT_NONE, prog, (const char **) argv); -+ free(argv); -+ -+ return ret; - } - - int spawn_mount(unsigned logopt, ...) -@@ -554,6 +565,7 @@ int spawn_mount(unsigned logopt, ...) - int update_mtab = 1, ret, printed = 0; - unsigned int wait = defaults_get_mount_wait(); - char buf[PATH_MAX + 1]; -+ unsigned int argv_len; - - /* If we use mount locking we can't validate the location */ - #ifdef ENABLE_MOUNT_LOCKING -@@ -579,8 +591,15 @@ int spawn_mount(unsigned logopt, ...) - } - - /* Alloc 1 extra slot in case we need to use the "-f" option */ -- if (!(argv = alloca(sizeof(char *) * (argc + 2)))) -+ argv_len = sizeof(char *) * (argc + 2); -+ argv = malloc(argv_len); -+ if (!argv) { -+ char buf[MAX_ERR_BUF]; -+ char *estr = strerror_r(errno, buf, sizeof(buf)); -+ crit(logopt, "malloc: %s", estr); - return -1; -+ } -+ memset(argv, 0, argv_len); - - argv[0] = arg0; - -@@ -655,6 +674,7 @@ int spawn_mount(unsigned logopt, ...) - umount(argv[argc]); - ret = MNT_FORCE_FAIL; - } -+ free(argv); - - return ret; - } -@@ -683,6 +703,7 @@ int spawn_bind_mount(unsigned logopt, ...) - int update_mtab = 1, ret, printed = 0; - unsigned int wait = defaults_get_mount_wait(); - char buf[PATH_MAX + 1]; -+ unsigned int argv_len; - - /* If we use mount locking we can't validate the location */ - #ifdef ENABLE_MOUNT_LOCKING -@@ -711,8 +732,15 @@ int spawn_bind_mount(unsigned logopt, ...) - } - } - -- if (!(argv = alloca(sizeof(char *) * (argc + 2)))) -+ argv_len = sizeof(char *) * (argc + 2); -+ argv = malloc(argv_len); -+ if (!argv) { -+ char buf[MAX_ERR_BUF]; -+ char *estr = strerror_r(errno, buf, sizeof(buf)); -+ crit(logopt, "malloc: %s", estr); - return -1; -+ } -+ memset(argv, 0, argv_len); - - argv[0] = arg0; - argv[1] = bind; -@@ -774,6 +802,7 @@ int spawn_bind_mount(unsigned logopt, ...) - umount(argv[argc]); - ret = MNT_FORCE_FAIL; - } -+ free(argv); - - return ret; - } -@@ -796,6 +825,7 @@ int spawn_umount(unsigned logopt, ...) - int update_mtab = 1, ret, printed = 0; - unsigned int wait = defaults_get_umount_wait(); - char buf[PATH_MAX + 1]; -+ unsigned int argv_len; - - #ifdef ENABLE_MOUNT_LOCKING - options = SPAWN_OPT_LOCK; -@@ -821,8 +851,15 @@ int spawn_umount(unsigned logopt, ...) - if (arg_c) - argc++;; - -- if (!(argv = alloca(sizeof(char *) * (argc + 1)))) -+ argv_len = sizeof(char *) * (argc + 1); -+ argv = malloc(argv_len); -+ if (!argv) { -+ char buf[MAX_ERR_BUF]; -+ char *estr = strerror_r(errno, buf, sizeof(buf)); -+ crit(logopt, "malloc: %s", estr); - return -1; -+ } -+ memset(argv, 0, argv_len); - - p = argv; - *p++ = arg0; -@@ -870,6 +907,7 @@ int spawn_umount(unsigned logopt, ...) - "and /etc/mtab will differ"); - ret = 0; - } -+ free(argv); - - return ret; - } diff --git a/patches/autofs/patch_order_5.1.5 b/patches/autofs/patch_order_5.1.5 deleted file mode 100644 index 17679442..00000000 --- a/patches/autofs/patch_order_5.1.5 +++ /dev/null @@ -1,9 +0,0 @@ -autofs-5.1.5-add-strictexpire-mount-option.patch -autofs-5.1.5-fix-hesiod-string-check-in-master_parse.patch -autofs-5.1.5-add-NULL-check-for-get_addr_string-return.patch -autofs-5.1.5-use-malloc-in-spawn_c.patch -autofs-5.1.5-add-mount_verbose-configuration-option.patch -autofs-5.1.5-optionally-log-mount-requestor-process-info.patch -autofs-5.1.5-log-mount-call-arguments-if-mount_verbose-is-set.patch -autofs-5.1.5-add-ignore-mount-option.patch -autofs-5.1.5-Fix-NFS-mount-from-IPv6-addresses.patch