summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFelix Fietkau2025-05-05 09:38:59 +0000
committerFelix Fietkau2025-05-05 11:57:08 +0000
commit6fcaf3d589f9cd5c9e5cdf89cc0e651a97175174 (patch)
tree654dd65019251aa1827324a39d14b83f7107a6e5
parent55cff42121c8a899a1493fadd7bac667a42f4a90 (diff)
downloadopenwrt-6fcaf3d589f9cd5c9e5cdf89cc0e651a97175174.tar.gz
unetmsg: fix issuing requests without previously subscribing
Perform ACL check if not subscribed. Helps with one-shot requests. Signed-off-by: Felix Fietkau <nbd@nbd.name>
-rw-r--r--package/network/services/unetmsg/files/usr/share/ucode/unetmsg/unetmsgd-client.uc7
-rw-r--r--package/network/services/unetmsg/files/usr/share/ucode/unetmsg/unetmsgd.uc1
2 files changed, 6 insertions, 2 deletions
diff --git a/package/network/services/unetmsg/files/usr/share/ucode/unetmsg/unetmsgd-client.uc b/package/network/services/unetmsg/files/usr/share/ucode/unetmsg/unetmsgd-client.uc
index cc971b562b..8b42882152 100644
--- a/package/network/services/unetmsg/files/usr/share/ucode/unetmsg/unetmsgd-client.uc
+++ b/package/network/services/unetmsg/files/usr/share/ucode/unetmsg/unetmsgd-client.uc
@@ -72,8 +72,11 @@ function client_request(cl, req)
return core.handle_message(handle, data, true);
case "request":
handle = cl.subscribe[name];
- if (!handle)
- return libubus.STATUS_INVALID_ARGUMENT;
+ if (!handle &&
+ !core.acl_check("subscribe", cl.acl, [ name ]))
+ return libubus.STATUS_PERMISSION_DENIED;
+
+ handle ??= { client: cl.id };
return core.handle_request(handle, req, data, true);
}
}
diff --git a/package/network/services/unetmsg/files/usr/share/ucode/unetmsg/unetmsgd.uc b/package/network/services/unetmsg/files/usr/share/ucode/unetmsg/unetmsgd.uc
index 68b0600fe9..393a6ea47a 100644
--- a/package/network/services/unetmsg/files/usr/share/ucode/unetmsg/unetmsgd.uc
+++ b/package/network/services/unetmsg/files/usr/share/ucode/unetmsg/unetmsgd.uc
@@ -111,6 +111,7 @@ function handle_request(handle, req, data, remote)
for (let cur in handles) {
if (!cur || !cur.get_channel) {
+ cb();
continue;
}
let chan = cur.get_channel();