autofs/autofs-5.0.5-mapent-becomes-negative-during-lookup.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

74 lines
2.5 KiB
Diff

autofs-5.0.5 - mapent becomes negative during lookup
From: Ian Kent <raven@themaw.net>
During a mount request it is possible for a mapent to become negative
between the time it is checked on entry and when we fetch the mount
location information. This is because we drop the cache lock after
the initial check and take it back again before getting the location
information.
---
CHANGELOG | 1 +
modules/lookup_file.c | 2 +-
modules/lookup_ldap.c | 2 +-
modules/lookup_nisplus.c | 2 +-
modules/lookup_yp.c | 2 +-
5 files changed, 5 insertions(+), 4 deletions(-)
--- autofs-5.0.5.orig/CHANGELOG
+++ autofs-5.0.5/CHANGELOG
@@ -39,6 +39,7 @@
- dont check null cache on expire.
- fix null cache race.
- fix cache_init() on source re-read.
+- fix mapent becomes negative during lookup.
03/09/2009 autofs-5.0.5
-----------------------
--- autofs-5.0.5.orig/modules/lookup_file.c
+++ autofs-5.0.5/modules/lookup_file.c
@@ -1047,7 +1047,7 @@ do_cache_lookup:
if (!me)
me = cache_lookup_distinct(mc, "*");
}
- if (me && (me->source == source || *me->key == '/')) {
+ if (me && me->mapent && (me->source == source || *me->key == '/')) {
pthread_cleanup_push(cache_lock_cleanup, mc);
strcpy(mapent_buf, me->mapent);
mapent = mapent_buf;
--- autofs-5.0.5.orig/modules/lookup_ldap.c
+++ autofs-5.0.5/modules/lookup_ldap.c
@@ -2872,7 +2872,7 @@ int lookup_mount(struct autofs_point *ap
if (!me)
me = cache_lookup_distinct(mc, "*");
}
- if (me && (me->source == source || *me->key == '/')) {
+ if (me && me->mapent && (me->source == source || *me->key == '/')) {
strcpy(mapent_buf, me->mapent);
mapent = mapent_buf;
}
--- autofs-5.0.5.orig/modules/lookup_nisplus.c
+++ autofs-5.0.5/modules/lookup_nisplus.c
@@ -569,7 +569,7 @@ int lookup_mount(struct autofs_point *ap
if (!me)
me = cache_lookup_distinct(mc, "*");
}
- if (me && (me->source == source || *me->key == '/')) {
+ if (me && me->mapent && (me->source == source || *me->key == '/')) {
mapent_len = strlen(me->mapent);
mapent = malloc(mapent_len + 1);
strcpy(mapent, me->mapent);
--- autofs-5.0.5.orig/modules/lookup_yp.c
+++ autofs-5.0.5/modules/lookup_yp.c
@@ -670,7 +670,7 @@ int lookup_mount(struct autofs_point *ap
if (!me)
me = cache_lookup_distinct(mc, "*");
}
- if (me && (me->source == source || *me->key == '/')) {
+ if (me && me->mapent && (me->source == source || *me->key == '/')) {
mapent_len = strlen(me->mapent);
mapent = alloca(mapent_len + 1);
strcpy(mapent, me->mapent);