aboutsummaryrefslogtreecommitdiff
path: root/plugin.c
diff options
context:
space:
mode:
authorjames <james@e7ae566f-a301-0410-adde-c780ea21d3b5>2008-01-21 19:00:43 +0000
committerjames <james@e7ae566f-a301-0410-adde-c780ea21d3b5>2008-01-21 19:00:43 +0000
commite342be3fcd0bb1208cb2e7dc003042cc14bcdb36 (patch)
treeacfd7530098bf1a4aac27697877614154f37011c /plugin.c
parentDefine ALLOW_NON_CBC_CIPHERS for people who don't (diff)
downloadopenvpn-e342be3fcd0bb1208cb2e7dc003042cc14bcdb36.tar.xz
Added PLUGIN_LIBDIR preprocessor string to prepend a default plugin
directory to the dlopen search list when the user specifies the basename of the plugin only (Marius Tomaschewski). git-svn-id: http://svn.openvpn.net/projects/openvpn/branches/BETA21/openvpn@2637 e7ae566f-a301-0410-adde-c780ea21d3b5
Diffstat (limited to 'plugin.c')
-rw-r--r--plugin.c21
1 files changed, 20 insertions, 1 deletions
diff --git a/plugin.c b/plugin.c
index e841dc7..7bf6912 100644
--- a/plugin.c
+++ b/plugin.c
@@ -191,7 +191,26 @@ plugin_init_item (struct plugin *p, const struct plugin_option *o)
#if defined(USE_LIBDL)
- p->handle = dlopen (p->so_pathname, RTLD_NOW);
+ p->handle = NULL;
+#if defined(PLUGIN_LIBDIR)
+ if (!strrchr(p->so_pathname, '/'))
+ {
+ char full[PATH_MAX];
+
+ openvpn_snprintf (full, sizeof(full), "%s/%s", PLUGIN_LIBDIR, p->so_pathname);
+ p->handle = dlopen (full, RTLD_NOW);
+#if defined(ENABLE_PLUGIN_SEARCH)
+ if (!p->handle)
+ {
+ p->handle = dlopen (p->so_pathname, RTLD_NOW);
+ }
+#endif
+ }
+ else
+#endif
+ {
+ p->handle = dlopen (p->so_pathname, RTLD_NOW);
+ }
if (!p->handle)
msg (M_ERR, "PLUGIN_INIT: could not load plugin shared object %s: %s", p->so_pathname, dlerror());