diff mbox

[PATCH:,nfs-utils] mountd: use SONAME fir libnfsjunct when loading with dlopen.

Message ID 20140305150741.19cead16@notabene.brown (mailing list archive)
State New, archived
Headers show

Commit Message

NeilBrown March 5, 2014, 4:07 a.m. UTC
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>

Comments

Steve Dickson March 11, 2014, 6:19 p.m. UTC | #1
On 03/04/2014 11:07 PM, NeilBrown wrote:
> 
> 
> 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>
Committed... 

steved.
> 
> diff --git a/utils/mountd/cache.c b/utils/mountd/cache.c
> index ca35de28847a..9a1bb2767ac2 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;
> 
--
To unsubscribe from this list: send the line "unsubscribe linux-nfs" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/utils/mountd/cache.c b/utils/mountd/cache.c
index ca35de28847a..9a1bb2767ac2 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;