121 lines
3.0 KiB
Diff
121 lines
3.0 KiB
Diff
|
autofs-5.1.7 - fix amd section mounts map reload
|
||
|
|
||
|
From: Ian Kent <raven@themaw.net>
|
||
|
|
||
|
Master map section mounts (amd format mounts) get umounted on reload.
|
||
|
|
||
|
Signed-off-by: Ian Kent <raven@themaw.net>
|
||
|
---
|
||
|
CHANGELOG | 1
|
||
|
daemon/master.c | 81 +++++++++++++++++++++++++++++++++++++++++++++++++++++++-
|
||
|
2 files changed, 81 insertions(+), 1 deletion(-)
|
||
|
|
||
|
--- autofs-5.1.4.orig/CHANGELOG
|
||
|
+++ autofs-5.1.4/CHANGELOG
|
||
|
@@ -66,6 +66,7 @@
|
||
|
- refactor lookup_prune_one_cache() a bit.
|
||
|
- cater for empty mounts list in mnts_get_expire_list().
|
||
|
- add ext_mount_hash_mutex lock helpers.
|
||
|
+- fix amd section mounts map reload.
|
||
|
|
||
|
xx/xx/2018 autofs-5.1.5
|
||
|
- fix flag file permission.
|
||
|
--- autofs-5.1.4.orig/daemon/master.c
|
||
|
+++ autofs-5.1.4/daemon/master.c
|
||
|
@@ -882,6 +882,83 @@ struct master *master_new(const char *na
|
||
|
return master;
|
||
|
}
|
||
|
|
||
|
+static void master_update_amd_mount_section_mount(struct master *master,
|
||
|
+ const char *path, time_t age)
|
||
|
+{
|
||
|
+ unsigned int m_logopt = master->logopt;
|
||
|
+ struct master_mapent *entry;
|
||
|
+ struct map_source *source;
|
||
|
+ unsigned int loglevel;
|
||
|
+ unsigned int logopt;
|
||
|
+ unsigned int flags;
|
||
|
+ time_t timeout;
|
||
|
+ char *map;
|
||
|
+ char *opts;
|
||
|
+
|
||
|
+ entry = master_find_mapent(master, path);
|
||
|
+ if (!entry)
|
||
|
+ return;
|
||
|
+
|
||
|
+ map = conf_amd_get_map_name(path);
|
||
|
+ if (!map)
|
||
|
+ return;
|
||
|
+
|
||
|
+ /* amd top level mounts have only one map */
|
||
|
+ source = entry->maps;
|
||
|
+ if (strcmp(source->name, map) != 0) {
|
||
|
+ struct map_source *new;
|
||
|
+ char *type;
|
||
|
+ char *argv[2];
|
||
|
+
|
||
|
+ type = conf_amd_get_map_type(path);
|
||
|
+ argv[0] = map;
|
||
|
+ argv[1] = NULL;
|
||
|
+
|
||
|
+ new = master_add_map_source(entry, type, "amd",
|
||
|
+ age, 1, (const char **) argv);
|
||
|
+ if (!new) {
|
||
|
+ error(m_logopt,
|
||
|
+ "failed to add source for amd section mount %s",
|
||
|
+ path);
|
||
|
+ if (type)
|
||
|
+ free(type);
|
||
|
+ goto out;
|
||
|
+ }
|
||
|
+ master_free_map_source(source, 0);
|
||
|
+ entry->maps = new;
|
||
|
+ source = new;
|
||
|
+ if (type)
|
||
|
+ free(type);
|
||
|
+ }
|
||
|
+
|
||
|
+ loglevel = conf_amd_get_log_options();
|
||
|
+ logopt = m_logopt;
|
||
|
+ if (loglevel <= LOG_DEBUG && loglevel > LOG_INFO)
|
||
|
+ logopt = LOGOPT_DEBUG;
|
||
|
+ else if (loglevel <= LOG_INFO && loglevel > LOG_ERR)
|
||
|
+ logopt = LOGOPT_VERBOSE;
|
||
|
+
|
||
|
+ flags = conf_amd_get_flags(path);
|
||
|
+ if (flags & CONF_BROWSABLE_DIRS)
|
||
|
+ entry->ap->flags |= MOUNT_FLAG_GHOST;
|
||
|
+
|
||
|
+ opts = conf_amd_get_map_options(path);
|
||
|
+ if (opts) {
|
||
|
+ if (strstr(opts, "cache:=all"))
|
||
|
+ entry->ap->flags |= MOUNT_FLAG_AMD_CACHE_ALL;
|
||
|
+ free(opts);
|
||
|
+ }
|
||
|
+
|
||
|
+ entry->ap->logopt = logopt;
|
||
|
+
|
||
|
+ timeout = conf_amd_get_dismount_interval(path);
|
||
|
+ set_exp_timeout(entry->ap, source, timeout);
|
||
|
+ source->master_line = 0;
|
||
|
+ entry->age = age;
|
||
|
+out:
|
||
|
+ free(map);
|
||
|
+}
|
||
|
+
|
||
|
static void master_add_amd_mount_section_mounts(struct master *master, time_t age)
|
||
|
{
|
||
|
unsigned int m_logopt = master->logopt;
|
||
|
@@ -916,8 +993,10 @@ static void master_add_amd_mount_section
|
||
|
* master map it's not a duplicate, don't issue
|
||
|
* an error message.
|
||
|
*/
|
||
|
- if (ret == 1)
|
||
|
+ if (ret == 1) {
|
||
|
+ master_update_amd_mount_section_mount(master, path, age);
|
||
|
goto next;
|
||
|
+ }
|
||
|
info(m_logopt,
|
||
|
"amd section mount path conflict, %s ignored",
|
||
|
path);
|