Blame SOURCES/autofs-5.1.1-fix-return-handling-in-sss-lookup-module.patch

4d476f
autofs-5.1.1 - fix return handling in sss lookup module
4d476f
4d476f
From: Ian Kent <raven@themaw.net>
4d476f
4d476f
In the sss lookup module some of the calls don't distinguish between
4d476f
no entry found and service unavailable.
4d476f
4d476f
If service unavailable gets returned from a master map read it results
4d476f
in autofs not updating the mounts. A notfound return doesn't because it
4d476f
indicates the map doesn't exist so updating the mounts isn't a problem
4d476f
as it can be when the source is unavailable.
4d476f
4d476f
Signed-off-by: Ian Kent <raven@themaw.net>
4d476f
---
4d476f
 CHANGELOG            |    1 +
4d476f
 modules/lookup_sss.c |   24 +++++++++++++++++-------
4d476f
 2 files changed, 18 insertions(+), 7 deletions(-)
4d476f
4d476f
--- autofs-5.0.7.orig/CHANGELOG
4d476f
+++ autofs-5.0.7/CHANGELOG
4d476f
@@ -171,6 +171,7 @@
4d476f
 - fix mount as you go offset selection.
4d476f
 - init qdn before use in get_query_dn().
4d476f
 - fix left mount count return from umount_multi_triggers().
4d476f
+- fix return handling in sss lookup module.
4d476f
 
4d476f
 25/07/2012 autofs-5.0.7
4d476f
 =======================
4d476f
--- autofs-5.0.7.orig/modules/lookup_sss.c
4d476f
+++ autofs-5.0.7/modules/lookup_sss.c
4d476f
@@ -148,9 +148,8 @@ static int setautomntent(unsigned int lo
4d476f
 		error(logopt, MODPREFIX "setautomntent: %s", estr);
4d476f
 		if (*sss_ctxt)
4d476f
 			free(*sss_ctxt);
4d476f
-		return 0;
4d476f
 	}
4d476f
-	return 1;
4d476f
+	return ret;
4d476f
 }
4d476f
 
4d476f
 static int endautomntent(unsigned int logopt,
4d476f
@@ -161,9 +160,8 @@ static int endautomntent(unsigned int lo
4d476f
 		char buf[MAX_ERR_BUF];
4d476f
 		char *estr = strerror_r(ret, buf, MAX_ERR_BUF);
4d476f
 		error(logopt, MODPREFIX "endautomntent: %s", estr);
4d476f
-		return 0;
4d476f
 	}
4d476f
-	return 1;
4d476f
+	return ret;
4d476f
 }
4d476f
 
4d476f
 int lookup_read_master(struct master *master, time_t age, void *context)
4d476f
@@ -180,8 +178,12 @@ int lookup_read_master(struct master *ma
4d476f
 	char *value = NULL;
4d476f
 	int count, ret;
4d476f
 
4d476f
-	if (!setautomntent(logopt, ctxt, ctxt->mapname, &sss_ctxt))
4d476f
+	ret = setautomntent(logopt, ctxt, ctxt->mapname, &sss_ctxt);
4d476f
+	if (ret) {
4d476f
+		if (ret == ENOENT)
4d476f
+			return NSS_STATUS_NOTFOUND;
4d476f
 		return NSS_STATUS_UNAVAIL;
4d476f
+	}
4d476f
 
4d476f
 	count = 0;
4d476f
 	while (1) {
4d476f
@@ -280,8 +282,12 @@ int lookup_read_map(struct autofs_point
4d476f
 		return NSS_STATUS_SUCCESS;
4d476f
 	}
4d476f
 
4d476f
-	if (!setautomntent(ap->logopt, ctxt, ctxt->mapname, &sss_ctxt))
4d476f
+	ret = setautomntent(ap->logopt, ctxt, ctxt->mapname, &sss_ctxt);
4d476f
+	if (ret) {
4d476f
+		if (ret == ENOENT)
4d476f
+			return NSS_STATUS_NOTFOUND;
4d476f
 		return NSS_STATUS_UNAVAIL;
4d476f
+	}
4d476f
 
4d476f
 	count = 0;
4d476f
 	while (1) {
4d476f
@@ -386,8 +392,12 @@ static int lookup_one(struct autofs_poin
4d476f
 
4d476f
 	mc = source->mc;
4d476f
 
4d476f
-	if (!setautomntent(ap->logopt, ctxt, ctxt->mapname, &sss_ctxt))
4d476f
+	ret = setautomntent(ap->logopt, ctxt, ctxt->mapname, &sss_ctxt);
4d476f
+	if (ret) {
4d476f
+		if (ret == ENOENT)
4d476f
+			return NSS_STATUS_NOTFOUND;
4d476f
 		return NSS_STATUS_UNAVAIL;
4d476f
+	}
4d476f
 
4d476f
 	ret = ctxt->getautomntbyname_r(qKey, &value, sss_ctxt);
4d476f
 	if (ret && ret != ENOENT) {