diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2013-10-03 13:33:54 -0400 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2013-10-03 13:33:54 -0400 |
commit | 753cfe02072b645a85ddd69719246bca94861f77 (patch) | |
tree | fb5433d671893db6fee7200e47270c9b6b6753a8 /jackd | |
parent | a6f8f337b41fef0d5a0275687b8dc07ecf75acef (diff) | |
download | jack1-753cfe02072b645a85ddd69719246bca94861f77.tar.gz |
if an absolute path is given for an internal client load name, use it by just appending ".so"
we used to still look in ADDON_DIR, which might be "secure" but is a bit pointless and inconvenient
Diffstat (limited to 'jackd')
-rw-r--r-- | jackd/clientengine.c | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/jackd/clientengine.c b/jackd/clientengine.c index 1bad277..ed9456a 100644 --- a/jackd/clientengine.c +++ b/jackd/clientengine.c @@ -52,7 +52,6 @@ jack_client_disconnect_ports (jack_engine_t *engine, { JSList *node; jack_port_internal_t *port; - char buf[JACK_UUID_STRING_SIZE]; /* call tree **** MUST HOLD *** engine->client_lock */ @@ -102,7 +101,17 @@ jack_load_client (jack_engine_t *engine, jack_client_internal_t *client, const char *errstr; char path_to_so[PATH_MAX+1]; - snprintf (path_to_so, sizeof (path_to_so), ADDON_DIR "/%s.so", so_name); + if (!so_name) { + return -1; + } + + if (so_name[0] == '/') { + /* Absolute, use as-is, user beware ... */ + snprintf (path_to_so, sizeof (path_to_so), "%s.so", so_name); + } else { + snprintf (path_to_so, sizeof (path_to_so), ADDON_DIR "/%s.so", so_name); + } + client->handle = dlopen (path_to_so, RTLD_NOW|RTLD_GLOBAL); if (client->handle == 0) { |