autofs-5.1.8 - fix incorrect matching of cached wildcard key From: Ian Kent During the implementation of amd format map entry support the code to match a cached key was modified. Unfortunately there's a case were the key lookup behaves incorrectly. That case is when there are included maps in the map itself and one of the maps (usually the last) has a wildcard key entry. In this case the wildcard key may be found during lookup but the map it blongs to isn't checked so it can be incorrectly returned instead of a matching entry in a subsequent included map. Another problem case is when there's a wildcard match and a cache prune occurs while the mount is being done. In this case the matched cache entry that has been added is seen as stale and removed along with the mount point directory during the prune leading to a mount fail. Signed-off-by: Ian Kent --- CHANGELOG | 1 + lib/parse_subs.c | 9 +++++++-- 2 files changed, 8 insertions(+), 2 deletions(-) --- autofs-5.1.4.orig/CHANGELOG +++ autofs-5.1.4/CHANGELOG @@ -148,6 +148,7 @@ - add ioctlfd open helper. - make open files limit configurable. - fix some sss error return cases. +- fix incorrect matching of cached wildcard key. xx/xx/2018 autofs-5.1.5 - fix flag file permission. --- autofs-5.1.4.orig/lib/parse_subs.c +++ autofs-5.1.4/lib/parse_subs.c @@ -532,8 +532,11 @@ struct mapent *match_cached_key(struct a while ((me = cache_lookup_key_next(me))) if (me->source == source) break; - if (!me) + if (!me) { me = cache_lookup_distinct(mc, "*"); + if (me && (me->source != source)) + me = NULL; + } } if (!me) @@ -545,7 +548,9 @@ struct mapent *match_cached_key(struct a */ if (!(ap->flags & MOUNT_FLAG_REMOUNT) && ap->type == LKP_INDIRECT && *me->key == '*') { - ret = cache_update(mc, source, key, me->mapent, me->age); + time_t now = monotonic_time(NULL); + + ret = cache_update(mc, source, key, me->mapent, now); if (!(ret & (CHE_OK | CHE_UPDATED))) me = NULL; }