diff options
authorChuck Lever <>2012-12-12 10:31:06 -0500
committerSteve Dickson <>2012-12-12 10:32:29 -0500
commit11d4f1d2feae160caa35c4eb8565c969dc16a24d (patch)
parent3d0b8f58fbfa6e17c9b7ec7f73b5a3bb1fa81bcc (diff)
mountd: Report the absolute path used to load the junction plug-in
As a debugging feature, report the absolute pathname of the plug-in library that mountd loads to resolve junctions. Since mountd passes a relative path to dlopen(3), dlopen(3) must search for the right library. Displaying the absolute pathname of the object that it found verifies that mountd loaded the correct plug-in. Note: dlinfo(3) is provided by libdl, but there doesn't seem to be a man page on Fedora 16 for dlinfo(3). Instead, see: Signed-off-by: Chuck Lever <> Signed-off-by: Steve Dickson <>
1 files changed, 7 insertions, 0 deletions
diff --git a/utils/mountd/cache.c b/utils/mountd/cache.c
index c264e14..3853bb6 100644
--- a/utils/mountd/cache.c
+++ b/utils/mountd/cache.c
@@ -826,6 +826,7 @@ lookup_export(char *dom, char *path, struct addrinfo *ai)
#include <dlfcn.h>
+#include <link.h>
#include <nfs-plugin.h>
@@ -1090,6 +1091,7 @@ static struct exportent *lookup_junction(char *dom, const char *pathname,
struct addrinfo *ai)
struct exportent *exp;
+ struct link_map *map;
void *handle;
handle = dlopen("", RTLD_NOW);
@@ -1097,6 +1099,11 @@ static struct exportent *lookup_junction(char *dom, const char *pathname,
xlog(D_GENERAL, "%s: dlopen: %s", __func__, dlerror());
return NULL;
+ if (dlinfo(handle, RTLD_DI_LINKMAP, &map) == 0)
+ xlog(D_GENERAL, "%s: loaded plug-in %s",
+ __func__, map->l_name);
(void)dlerror(); /* Clear any error */
exp = invoke_junction_ops(handle, dom, pathname, ai);