summaryrefslogtreecommitdiff
path: root/jackd
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2013-10-03 13:33:54 -0400
committerPaul Davis <paul@linuxaudiosystems.com>2013-10-03 13:33:54 -0400
commit753cfe02072b645a85ddd69719246bca94861f77 (patch)
treefb5433d671893db6fee7200e47270c9b6b6753a8 /jackd
parenta6f8f337b41fef0d5a0275687b8dc07ecf75acef (diff)
downloadjack1-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.c13
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) {