Blame SOURCES/autofs-5.1.1-add-type-to-struct-lookup_mod.patch

4d476f
autofs-5.1.1 - add type to struct lookup_mod
4d476f
4d476f
From: Ian Kent <raven@themaw.net>
4d476f
4d476f
Add opened map type field to struct lookup_mod for module comparison
4d476f
during reinit.
4d476f
4d476f
Signed-off-by: Ian Kent <raven@themaw.net>
4d476f
---
4d476f
 daemon/module.c     |   18 ++++++++++++++++++
4d476f
 include/automount.h |    1 +
4d476f
 2 files changed, 19 insertions(+)
4d476f
4d476f
diff --git a/daemon/module.c b/daemon/module.c
4d476f
index 3bd7a0c..d9921f4 100644
4d476f
--- a/daemon/module.c
4d476f
+++ b/daemon/module.c
4d476f
@@ -61,6 +61,7 @@ int open_lookup(const char *name, const char *err_prefix, const char *mapfmt,
4d476f
 	char buf[MAX_ERR_BUF];
4d476f
 	char fnbuf[PATH_MAX];
4d476f
 	size_t size;
4d476f
+	char *type;
4d476f
 	void *dh;
4d476f
 	int *ver;
4d476f
 
4d476f
@@ -75,10 +76,20 @@ int open_lookup(const char *name, const char *err_prefix, const char *mapfmt,
4d476f
 		return NSS_STATUS_UNAVAIL;
4d476f
 	}
4d476f
 
4d476f
+	type = strdup(name);
4d476f
+	if (!type) {
4d476f
+		free(mod);
4d476f
+		if (err_prefix) {
4d476f
+			char *estr = strerror_r(errno, buf, MAX_ERR_BUF);
4d476f
+			logerr("%s%s", err_prefix, estr);
4d476f
+		}
4d476f
+	}
4d476f
+
4d476f
 	size = snprintf(fnbuf, sizeof(fnbuf),
4d476f
 			"%s/lookup_%s.so", AUTOFS_LIB_DIR, name);
4d476f
 	if (size >= sizeof(fnbuf)) {
4d476f
 		free(mod);
4d476f
+		free(type);
4d476f
 		if (err_prefix) {
4d476f
 			char *estr = strerror_r(errno, buf, MAX_ERR_BUF);
4d476f
 			logerr("%s%s", err_prefix, estr);
4d476f
@@ -91,6 +102,7 @@ int open_lookup(const char *name, const char *err_prefix, const char *mapfmt,
4d476f
 			logerr("%scannot open lookup module %s (%s)",
4d476f
 			       err_prefix, name, dlerror());
4d476f
 		free(mod);
4d476f
+		free(type);
4d476f
 		return NSS_STATUS_UNAVAIL;
4d476f
 	}
4d476f
 
4d476f
@@ -101,6 +113,7 @@ int open_lookup(const char *name, const char *err_prefix, const char *mapfmt,
4d476f
 			     err_prefix, name);
4d476f
 		dlclose(dh);
4d476f
 		free(mod);
4d476f
+		free(type);
4d476f
 		return NSS_STATUS_UNAVAIL;
4d476f
 	}
4d476f
 
4d476f
@@ -114,14 +127,18 @@ int open_lookup(const char *name, const char *err_prefix, const char *mapfmt,
4d476f
 			logerr("%slookup module %s corrupt", err_prefix, name);
4d476f
 		dlclose(dh);
4d476f
 		free(mod);
4d476f
+		free(type);
4d476f
 		return NSS_STATUS_UNAVAIL;
4d476f
 	}
4d476f
 
4d476f
 	if (mod->lookup_init(mapfmt, argc, argv, &mod->context)) {
4d476f
 		dlclose(dh);
4d476f
 		free(mod);
4d476f
+		free(type);
4d476f
 		return NSS_STATUS_NOTFOUND;
4d476f
 	}
4d476f
+
4d476f
+	mod->type = type;
4d476f
 	mod->dlhandle = dh;
4d476f
 	*lookup = mod;
4d476f
 
4d476f
@@ -145,6 +162,7 @@ int close_lookup(struct lookup_mod *mod)
4d476f
 {
4d476f
 	int rv = mod->lookup_done(mod->context);
4d476f
 	dlclose(mod->dlhandle);
4d476f
+	free(mod->type);
4d476f
 	free(mod);
4d476f
 	return rv;
4d476f
 }
4d476f
diff --git a/include/automount.h b/include/automount.h
4d476f
index ab3e360..3ea2381 100644
4d476f
--- a/include/automount.h
4d476f
+++ b/include/automount.h
4d476f
@@ -301,6 +301,7 @@ struct lookup_mod {
4d476f
 	lookup_read_map_t lookup_read_map;
4d476f
 	lookup_mount_t lookup_mount;
4d476f
 	lookup_done_t lookup_done;
4d476f
+	char *type;
4d476f
 	void *dlhandle;
4d476f
 	void *context;
4d476f
 };