autofs/autofs-5.0.5-fix-master-map-source-server-unavialable-handling.patch
Ian Kent cc40620019 - fix master map source server unavailable handling.
- add autofs_ldap_auth.conf man page.
- fix random selection for host on different network.
- make redhat init script more lsb compliant.
- don't hold lock for simple mounts.
- fix remount locking.
- fix wildcard map entry match.
- fix parse_sun() module init.
- dont check null cache on expire.
- fix null cache race.
- fix cache_init() on source re-read.
- fix mapent becomes negative during lookup.
- check each dc server individually.
- fix negative cache included map lookup.
- remove state machine timed wait.
2010-05-24 03:01:04 +00:00

130 lines
3.5 KiB
Diff

autofs-5.0.5 - fix master map source server unavailable handling
From: Ian Kent <raven@themaw.net>
If we get an NSS_STATUS_UNAVAIL from any server when trying to read
the master map we have no choice but to not update mounted automounts
because we can't know what entries may have come from the server that
isn't avialable. So we leave everything the way it is and wait until
the next re-read to update our mounts.
---
CHANGELOG | 1 +
daemon/automount.c | 5 +++--
daemon/lookup.c | 9 +++++++++
include/master.h | 1 +
lib/master.c | 9 ++++++++-
modules/lookup_file.c | 2 --
6 files changed, 22 insertions(+), 5 deletions(-)
--- autofs-5.0.5.orig/CHANGELOG
+++ autofs-5.0.5/CHANGELOG
@@ -28,6 +28,7 @@
- add locality as valid ldap master map attribute.
- add locality as valid ldap master map attribute fix.
- add simple bind authentication.
+- fix master map source server unavailable handling.
03/09/2009 autofs-5.0.5
-----------------------
--- autofs-5.0.5.orig/daemon/automount.c
+++ autofs-5.0.5/daemon/automount.c
@@ -1478,7 +1478,6 @@ static void handle_mounts_cleanup(void *
master_free_mapent_sources(ap->entry, 1);
master_free_mapent(ap->entry);
}
- master_mutex_unlock();
if (clean) {
if (rmdir(path) == -1) {
@@ -1497,7 +1496,9 @@ static void handle_mounts_cleanup(void *
*/
if (!submount)
pthread_kill(state_mach_thid, SIGTERM);
-
+
+ master_mutex_unlock();
+
return;
}
--- autofs-5.0.5.orig/daemon/lookup.c
+++ autofs-5.0.5/daemon/lookup.c
@@ -157,6 +157,9 @@ int lookup_nss_read_master(struct master
result = do_read_master(master, "file", age);
}
+ if (result == NSS_STATUS_UNAVAIL)
+ master->read_fail = 1;
+
return !result;
} else {
char *name = master->name;
@@ -194,6 +197,9 @@ int lookup_nss_read_master(struct master
result = do_read_master(master, source, age);
master->name = name;
+ if (result == NSS_STATUS_UNAVAIL)
+ master->read_fail = 1;
+
return !result;
}
}
@@ -248,6 +254,9 @@ int lookup_nss_read_master(struct master
continue;
}
+ if (result == NSS_STATUS_UNAVAIL)
+ master->read_fail = 1;
+
status = check_nss_result(this, result);
if (status >= 0) {
free_sources(&nsslist);
--- autofs-5.0.5.orig/include/master.h
+++ autofs-5.0.5/include/master.h
@@ -56,6 +56,7 @@ struct master {
unsigned int recurse;
unsigned int depth;
unsigned int reading;
+ unsigned int read_fail;
unsigned int default_ghost;
unsigned int default_logging;
unsigned int default_timeout;
--- autofs-5.0.5.orig/lib/master.c
+++ autofs-5.0.5/lib/master.c
@@ -794,6 +794,7 @@ struct master *master_new(const char *na
master->recurse = 0;
master->depth = 0;
master->reading = 0;
+ master->read_fail = 0;
master->default_ghost = ghost;
master->default_timeout = timeout;
master->default_logging = defaults_get_logging();
@@ -821,7 +822,13 @@ int master_read_master(struct master *ma
master_init_scan();
lookup_nss_read_master(master, age);
- master_mount_mounts(master, age, readall);
+ if (!master->read_fail)
+ master_mount_mounts(master, age, readall);
+ else {
+ master->read_fail = 0;
+ if (!readall)
+ master_mount_mounts(master, age, readall);
+ }
master_mutex_lock();
--- autofs-5.0.5.orig/modules/lookup_file.c
+++ autofs-5.0.5/modules/lookup_file.c
@@ -656,8 +656,6 @@ int lookup_read_map(struct autofs_point
if (!status) {
warn(ap->logopt,
"failed to read included map %s", key);
- fclose(f);
- return NSS_STATUS_UNAVAIL;
}
} else {
char *s_key;