summaryrefslogtreecommitdiffstats
path: root/utils/mountd/cache.c
diff options
context:
space:
mode:
authorNeilBrown <neilb@suse.de>2014-03-11 14:16:50 -0400
committerSteve Dickson <steved@redhat.com>2014-03-11 14:17:24 -0400
commite7afd5f3a2a945b3162f0a300c7ed37a861a9dbd (patch)
tree92e38aaf689c1093cf693163f3db1d71268ec1af /utils/mountd/cache.c
parente6a7a7cc1a932a301c6ce7a1a619884b1f8f5271 (diff)
downloadnfs-utils-e7afd5f3a2a945b3162f0a300c7ed37a861a9dbd.tar.gz
nfs-utils-e7afd5f3a2a945b3162f0a300c7ed37a861a9dbd.tar.xz
nfs-utils-e7afd5f3a2a945b3162f0a300c7ed37a861a9dbd.zip
mountd: use SONAME fir libnfsjunct when loading with dlopen
The standard for loading shared libraries is to identify them by their "soname" (Which "objdump -x $BINARY | grep SONAME" will report). However mountd currently loads using the "linker name" which should only be used when building new code. Future releases of fedfs-utils will define the soname in the include file, so if that is defined, use it. If not, use the soname of the first version: "libnfsjunct.so.0". This is a slight behavioural change. However all distros known to package fedfs-utils will install "libnfsjunct.so.0" whenever they install the old name of "libnfsjunct.so", and "make install" will install both. So it should not be a noticeable change. Also only test the JP_API_VERSION if it is defined. As the version is embedded in the soname, a secondary test is not needed. Cc: Chuck Lever <chuck.lever@oracle.com> Signed-off-by: NeilBrown <neilb@suse.de> Signed-off-by: Steve Dickson <steved@redhat.com>
Diffstat (limited to 'utils/mountd/cache.c')
-rw-r--r--utils/mountd/cache.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/utils/mountd/cache.c b/utils/mountd/cache.c
index ca35de2..9a1bb27 100644
--- a/utils/mountd/cache.c
+++ b/utils/mountd/cache.c
@@ -1087,12 +1087,13 @@ static struct exportent *invoke_junction_ops(void *handle, char *dom,
__func__, error);
return NULL;
}
+#ifdef JP_API_VERSION
if (ops->jp_api_version != JP_API_VERSION) {
xlog(D_GENERAL, "%s: unrecognized junction API version: %u",
__func__, ops->jp_api_version);
return NULL;
}
-
+#endif
status = ops->jp_init(false);
if (status != JP_OK) {
xlog(D_GENERAL, "%s: failed to resolve %s: %s",
@@ -1139,7 +1140,11 @@ static struct exportent *lookup_junction(char *dom, const char *pathname,
struct link_map *map;
void *handle;
- handle = dlopen("libnfsjunct.so", RTLD_NOW);
+#ifdef JP_NFSPLUGIN_SONAME
+ handle = dlopen(JP_NFSPLUGIN_SONAME, RTLD_NOW);
+#else
+ handle = dlopen("libnfsjunct.so.0", RTLD_NOW);
+#endif
if (handle == NULL) {
xlog(D_GENERAL, "%s: dlopen: %s", __func__, dlerror());
return NULL;