file: access exec timeout via daemon ops structure
authorJo-Philipp Wich <jo@mein.io>
Wed, 28 Nov 2018 11:12:04 +0000 (12:12 +0100)
committerJo-Philipp Wich <jo@mein.io>
Wed, 28 Nov 2018 11:12:04 +0000 (12:12 +0100)
Since the plugin is not linked, but dlopen()'d with RTLD_LOCAL, we cannot
access global rpcd variables but need to access them via the common ops
structure symbol.

Signed-off-by: Jo-Philipp Wich <jo@mein.io>
file.c

diff --git a/file.c b/file.c
index e1bc0acc6b2ea8dda7cd96c8b74e180d94bf2027..488259878bc528f7b26bd9804f3f1cdd1db20c5c 100644 (file)
--- a/file.c
+++ b/file.c
@@ -53,6 +53,8 @@
        us.stream.notify_state  = rpc_file_##name##_state_cb; \
        ustream_fd_init(&us, fd);
 
+static const struct rpc_daemon_ops *ops;
+
 struct rpc_file_exec_context {
        struct ubus_context *context;
        struct ubus_request_data request;
@@ -690,7 +692,7 @@ rpc_file_exec_run(const char *cmd,
                uloop_process_add(&c->process);
 
                c->timeout.cb = rpc_file_exec_timeout_cb;
-               uloop_timeout_set(&c->timeout, rpc_exec_timeout);
+               uloop_timeout_set(&c->timeout, *ops->exec_timeout);
 
                close(opipe[1]);
                close(epipe[1]);
@@ -742,6 +744,8 @@ rpc_file_api_init(const struct rpc_daemon_ops *o, struct ubus_context *ctx)
                .n_methods = ARRAY_SIZE(file_methods),
        };
 
+       ops = o;
+
        return ubus_add_object(ctx, &obj);
 }