Blob Blame Raw
commit 8d9bf479441d9d7a44a86b69026a7e9d431d3ade
Author: Justin Mitchell <jumitche@redhat.com>
Date:   Tue Nov 7 09:28:25 2017 -0500

    nfs-utils: Restore ABI compat with pre-merge libnfsidmap
    
    Prior to merge libnfsidmap leaked many private symbols that were
    not defined in its API, creating an accidental ABI.
    This patch renames and unhides symbols in order to match that ABI
    until a cleaned up API can be established and released.
    
    Signed-off-by: Steve Dickson <steved@redhat.com>

diff --git a/support/include/conffile.h b/support/include/conffile.h
index d4cb6b4..ad20067 100644
--- a/support/include/conffile.h
+++ b/support/include/conffile.h
@@ -60,7 +60,7 @@ extern _Bool    conf_get_bool(const char *, const char *, _Bool);
 extern char    *conf_get_str(const char *, const char *);
 extern char    *conf_get_str_with_def(const char *, const char *, char *);
 extern char    *conf_get_section(const char *, const char *, const char *);
-extern void     conf_init(const char *);
+extern void     conf_init_file(const char *);
 extern void     conf_cleanup(void);
 extern int      conf_match_num(const char *, const char *, int);
 extern int      conf_remove(int, const char *, const char *);
diff --git a/support/nfs/Makefile.am b/support/nfs/Makefile.am
index c037c46..e573b69 100644
--- a/support/nfs/Makefile.am
+++ b/support/nfs/Makefile.am
@@ -7,10 +7,10 @@ libnfs_la_SOURCES = exports.c rmtab.c xio.c rpcmisc.c rpcdispatch.c \
 		   xcommon.c wildmat.c mydaemon.c \
 		   rpc_socket.c getport.c \
 		   svc_socket.c cacheio.c closeall.c nfs_mntent.c \
-		   svc_create.c atomicio.c strlcpy.c strlcat.c
+		   svc_create.c atomicio.c strlcat.c
 libnfs_la_LIBADD = libnfsconf.la
 
-libnfsconf_la_SOURCES = conffile.c xlog.c
+libnfsconf_la_SOURCES = conffile.c xlog.c strlcpy.c
 
 MAINTAINERCLEANFILES = Makefile.in
 
diff --git a/support/nfs/conffile.c b/support/nfs/conffile.c
index 9c5ed8e..dce8148 100644
--- a/support/nfs/conffile.c
+++ b/support/nfs/conffile.c
@@ -53,11 +53,9 @@
 #include "conffile.h"
 #include "xlog.h"
 
-#pragma GCC visibility push(hidden)
-
 static void conf_load_defaults(void);
-static char * conf_load(const char *path);
-static int conf_set(int , const char *, const char *, const char *, 
+static char * conf_readfile(const char *path);
+int conf_set(int , const char *, const char *, const char *, 
 	const char *, int , int );
 static void conf_parse(int trans, char *buf, 
 	char **section, char **subsection);
@@ -79,12 +77,10 @@ TAILQ_HEAD (conf_trans_head, conf_trans) conf_trans_queue;
 /*
  * Radix-64 Encoding.
  */
-#if 0
-static const uint8_t bin2asc[]
+const uint8_t bin2asc[]
   = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
-#endif
 
-static const uint8_t asc2bin[] =
+const uint8_t asc2bin[] =
 {
   255, 255, 255, 255, 255, 255, 255, 255,
   255, 255, 255, 255, 255, 255, 255, 255,
@@ -370,7 +366,7 @@ conf_parse_line(int trans, char *line, int lineno, char **section, char **subsec
 
 	if (strcasecmp(line, "include")==0) {
 		/* load and parse subordinate config files */
-		char * subconf = conf_load(val);
+		char * subconf = conf_readfile(val);
 		if (subconf == NULL) {
 			xlog_warn("config file error: line %d: "
 			"error loading included config", lineno);
@@ -435,7 +431,7 @@ conf_load_defaults(void)
 }
 
 static char *
-conf_load(const char *path)
+conf_readfile(const char *path)
 {
 	struct stat sb;
 	if ((stat (path, &sb) == 0) || (errno != ENOENT)) {
@@ -444,19 +440,19 @@ conf_load(const char *path)
 		int fd = open (path, O_RDONLY, 0);
 
 		if (fd == -1) {
-			xlog_warn("conf_reinit: open (\"%s\", O_RDONLY) failed", path);
+			xlog_warn("conf_readfile: open (\"%s\", O_RDONLY) failed", path);
 			return NULL;
 		}
 
 		new_conf_addr = malloc(sz+1);
 		if (!new_conf_addr) {
-			xlog_warn("conf_reinit: malloc (%lu) failed", (unsigned long)sz);
+			xlog_warn("conf_readfile: malloc (%lu) failed", (unsigned long)sz);
 			goto fail;
 		}
 
 		/* XXX I assume short reads won't happen here.  */
 		if (read (fd, new_conf_addr, sz) != (int)sz) {
-			xlog_warn("conf_reinit: read (%d, %p, %lu) failed",
+			xlog_warn("conf_readfile: read (%d, %p, %lu) failed",
 				fd, new_conf_addr, (unsigned long)sz);
 			goto fail;
 		}
@@ -493,15 +489,19 @@ static void conf_free_bindings(void)
 	}
 }
 
+#pragma GCC visibility push(hidden)
+/* these are the real fuinctions, hidden from being exported
+ * by libnfsidmap ABI compatability */
+
 /* Open the config file and map it into our address space, then parse it.  */
 static void
-conf_reinit(const char *conf_file)
+conf_load_file(const char *conf_file)
 {
 	int trans;
 	char * conf_data;
 
 	trans = conf_begin();
-	conf_data = conf_load(conf_file);
+	conf_data = conf_readfile(conf_file);
 
 	if (conf_data == NULL)
 		return;
@@ -526,7 +526,7 @@ conf_reinit(const char *conf_file)
 }
 
 void
-conf_init (const char *conf_file)
+conf_init_file(const char *conf_file)
 {
 	unsigned int i;
 
@@ -536,7 +536,7 @@ conf_init (const char *conf_file)
 	TAILQ_INIT (&conf_trans_queue);
 
 	if (conf_file == NULL) conf_file=NFS_CONFFILE;
-	conf_reinit(conf_file);
+	conf_load_file(conf_file);
 }
 
 /* 
@@ -560,6 +560,8 @@ conf_cleanup(void)
 	TAILQ_INIT(&conf_trans_queue);
 }
 
+#pragma GCC visibility pop
+
 /*
  * Return the numeric value denoted by TAG in section SECTION or DEF
  * if that tag does not exist.
@@ -575,6 +577,7 @@ conf_get_num(const char *section, const char *tag, int def)
 	return def;
 }
 
+#pragma GCC visibility push(hidden)
 /*
  * Return the Boolean value denoted by TAG in section SECTION, or DEF
  * if that tags does not exist.
@@ -606,6 +609,7 @@ conf_get_bool(const char *section, const char *tag, _Bool def)
 		return false;
 	return def;
 }
+#pragma GCC visibility pop
 
 /* Validate X according to the range denoted by TAG in section SECTION.  */
 int
@@ -651,6 +655,7 @@ conf_get_str_with_def(const char *section, const char *tag, char *def)
 	return result;
 }
 
+#pragma GCC visibility push(hidden)
 /*
  * Find a section that may or may not have an argument
  */
@@ -682,6 +687,7 @@ retry:
 	}
 	return 0;
 }
+#pragma GCC visibility pop
 
 /*
  * Build a list of string values out of the comma separated value denoted by
@@ -876,7 +882,7 @@ conf_trans_node(int transaction, enum conf_op op)
 }
 
 /* Queue a set operation.  */
-static int
+int
 conf_set(int transaction, const char *section, const char *arg,
 	const char *tag, const char *value, int override, int is_default)
 {
diff --git a/support/nfsidmap/libnfsidmap.c b/support/nfsidmap/libnfsidmap.c
index 931387a..40011ee 100644
--- a/support/nfsidmap/libnfsidmap.c
+++ b/support/nfsidmap/libnfsidmap.c
@@ -89,6 +89,10 @@ gid_t nobody_gid = (gid_t)-1;
 #define NFS4DNSTXTREC "_nfsv4idmapdomain"
 #endif
 
+/* DEPRECATED these are for ABI compatibility only */
+char * conf_path = PATH_IDMAPDCONF;
+void conf_reinit(void);
+void conf_init(void);
 
 /* Default logging fuction */
 static void default_logger(const char *fmt, ...)
@@ -342,7 +346,6 @@ int nfs4_init_name_mapping(char *conffile)
 	char *nobody_user, *nobody_group;
 	char *nostrip;
 	char *reformatgroup;
-	char *conf_path;
 
 	/* XXX: need to be able to reload configurations... */
 	if (nfs4_plugins) /* already succesfully initialized */
@@ -351,7 +354,7 @@ int nfs4_init_name_mapping(char *conffile)
 		conf_path = conffile;
 	else
 		conf_path = PATH_IDMAPDCONF;
-	conf_init(conf_path);
+	conf_init_file(conf_path);
 	default_domain = conf_get_str("General", "Domain");
 	if (default_domain == NULL) {
 		dflt = 1;
@@ -710,3 +713,13 @@ void nfs4_set_debug(int dbg_level, void (*logger)(const char *, ...))
 	idmap_verbosity = dbg_level;
 }
 
+void conf_reinit(void)
+{
+	conf_init_file(conf_path);
+}
+
+void conf_init(void)
+{
+	conf_init_file(conf_path);
+}
+
diff --git a/systemd/rpc-pipefs-generator.c b/systemd/rpc-pipefs-generator.c
index 59eee87..6e1d69c 100644
--- a/systemd/rpc-pipefs-generator.c
+++ b/systemd/rpc-pipefs-generator.c
@@ -121,7 +121,7 @@ int main(int argc, char *argv[])
 		exit(1);
 	}
 
-	conf_init(NFS_CONFFILE);
+	conf_init_file(NFS_CONFFILE);
 	s = conf_get_str("general", "pipefs-directory");
 	if (!s)
 		exit(0);
diff --git a/utils/blkmapd/device-discovery.c b/utils/blkmapd/device-discovery.c
index 29bafb2..cae8c8d 100644
--- a/utils/blkmapd/device-discovery.c
+++ b/utils/blkmapd/device-discovery.c
@@ -456,7 +456,7 @@ int main(int argc, char **argv)
 	char *xrpcpipe_dir = NULL;
 
 	strncpy(rpcpipe_dir, RPCPIPE_DIR, sizeof(rpcpipe_dir));
-	conf_init(NFS_CONFFILE);
+	conf_init_file(NFS_CONFFILE);
 	CONF_SAVE(xrpcpipe_dir, conf_get_str("general", "pipefs-directory"));
 	if (xrpcpipe_dir != NULL)
 		strlcpy(rpcpipe_dir, xrpcpipe_dir, sizeof(rpcpipe_dir));
diff --git a/utils/exportfs/exportfs.c b/utils/exportfs/exportfs.c
index beed1b3..448f195 100644
--- a/utils/exportfs/exportfs.c
+++ b/utils/exportfs/exportfs.c
@@ -107,7 +107,7 @@ main(int argc, char **argv)
 	xlog_stderr(1);
 	xlog_syslog(0);
 
-	conf_init(NFS_CONFFILE);
+	conf_init_file(NFS_CONFFILE);
 	xlog_from_conffile("exportfs");
 
 	/* NOTE: following uses "mountd" section of nfs.conf !!!! */
diff --git a/utils/gssd/gssd.c b/utils/gssd/gssd.c
index 053a223..2c14e5f 100644
--- a/utils/gssd/gssd.c
+++ b/utils/gssd/gssd.c
@@ -842,7 +842,7 @@ read_gss_conf(void)
 {
 	char *s;
 
-	conf_init(NFS_CONFFILE);
+	conf_init_file(NFS_CONFFILE);
 	use_memcache = conf_get_bool("gssd", "use-memcache", use_memcache);
 	root_uses_machine_creds = conf_get_bool("gssd", "use-machine-creds",
 						root_uses_machine_creds);
diff --git a/utils/idmapd/idmapd.c b/utils/idmapd/idmapd.c
index 4cbe148..2b9ecea 100644
--- a/utils/idmapd/idmapd.c
+++ b/utils/idmapd/idmapd.c
@@ -252,7 +252,7 @@ main(int argc, char **argv)
 			warn("Skipping configuration file \"%s\"", conf_path);
 			conf_path = NULL;
 		} else {
-			conf_init(conf_path);
+			conf_init_file(conf_path);
 			verbose = conf_get_num("General", "Verbosity", 0);
 			cache_entry_expiration = conf_get_num("General",
 					"Cache-Expiration", DEFAULT_IDMAP_CACHE_EXPIRY);
@@ -264,13 +264,13 @@ main(int argc, char **argv)
 		}
 	} else {
 		conf_path = NFS_CONFFILE;
-		conf_init(conf_path);
+		conf_init_file(conf_path);
 		CONF_SAVE(xpipefsdir, conf_get_str("General", "Pipefs-Directory"));
 		if (xpipefsdir != NULL)
 			strlcpy(pipefsdir, xpipefsdir, sizeof(pipefsdir));
 
 		conf_path = _PATH_IDMAPDCONF;
-		conf_init(conf_path);
+		conf_init_file(conf_path);
 		verbose = conf_get_num("General", "Verbosity", 0);
 		cache_entry_expiration = conf_get_num("General",
 				"cache-expiration", DEFAULT_IDMAP_CACHE_EXPIRY);
diff --git a/utils/mount/mount_config.h b/utils/mount/mount_config.h
index e4f8511..7cc72fc 100644
--- a/utils/mount/mount_config.h
+++ b/utils/mount/mount_config.h
@@ -32,7 +32,7 @@ static inline void mount_config_init(char *program)
 	/*
 	 * Read the the default mount options
 	 */
-	conf_init(MOUNTOPTS_CONFFILE);
+	conf_init_file(MOUNTOPTS_CONFFILE);
 }
 
 static inline char *mount_config_opts(char *spec,
diff --git a/utils/mountd/mountd.c b/utils/mountd/mountd.c
index 829f803..4c68702 100644
--- a/utils/mountd/mountd.c
+++ b/utils/mountd/mountd.c
@@ -679,7 +679,7 @@ main(int argc, char **argv)
 	else
 		progname = argv[0];
 
-	conf_init(NFS_CONFFILE);
+	conf_init_file(NFS_CONFFILE);
 	xlog_from_conffile("mountd");
 	manage_gids = conf_get_bool("mountd", "manage-gids", manage_gids);
 	descriptors = conf_get_num("mountd", "descriptors", descriptors);
diff --git a/utils/nfsd/nfsd.c b/utils/nfsd/nfsd.c
index f973203..f41a2de 100644
--- a/utils/nfsd/nfsd.c
+++ b/utils/nfsd/nfsd.c
@@ -80,7 +80,7 @@ main(int argc, char **argv)
 	xlog_syslog(0);
 	xlog_stderr(1);
 
-	conf_init(NFS_CONFFILE); 
+	conf_init_file(NFS_CONFFILE); 
 	xlog_from_conffile("nfsd");
 	count = conf_get_num("nfsd", "threads", count);
 	grace = conf_get_num("nfsd", "grace-time", grace);
diff --git a/utils/nfsdcltrack/nfsdcltrack.c b/utils/nfsdcltrack/nfsdcltrack.c
index 7830cf4..76b06d2 100644
--- a/utils/nfsdcltrack/nfsdcltrack.c
+++ b/utils/nfsdcltrack/nfsdcltrack.c
@@ -564,7 +564,7 @@ main(int argc, char **argv)
 	xlog_syslog(1);
 	xlog_stderr(0);
 
-	conf_init(NFS_CONFFILE); 
+	conf_init_file(NFS_CONFFILE); 
 	xlog_from_conffile("nfsdcltrack");
 	val = conf_get_str("nfsdcltrack", "storagedir");
 	if (val)
diff --git a/utils/statd/sm-notify.c b/utils/statd/sm-notify.c
index d961dc0..6d19ec1 100644
--- a/utils/statd/sm-notify.c
+++ b/utils/statd/sm-notify.c
@@ -494,7 +494,7 @@ main(int argc, char **argv)
 	else
 		progname = argv[0];
 
-	conf_init(NFS_CONFFILE);
+	conf_init_file(NFS_CONFFILE);
 	xlog_from_conffile("sm-notify");
 	opt_max_retry = conf_get_num("sm-notify", "retry-time", opt_max_retry / 60) * 60;
 	opt_srcport = conf_get_str("sm-notify", "outgoing-port");
diff --git a/utils/statd/statd.c b/utils/statd/statd.c
index 1443715..197d853 100644
--- a/utils/statd/statd.c
+++ b/utils/statd/statd.c
@@ -273,7 +273,7 @@ int main (int argc, char **argv)
 	/* Set hostname */
 	MY_NAME = NULL;
 
-	conf_init(NFS_CONFFILE);
+	conf_init_file(NFS_CONFFILE);
 	xlog_from_conffile("statd");
 	out_port = conf_get_num("statd", "outgoing-port", out_port);
 	port = conf_get_num("statd", "port", port);