session: unload rpcd configuration before checking login
authorJo-Philipp Wich <jo@mein.io>
Tue, 13 Jul 2021 18:31:16 +0000 (20:31 +0200)
committerJo-Philipp Wich <jo@mein.io>
Tue, 13 Jul 2021 18:41:02 +0000 (20:41 +0200)
Currently, rpcd cached /etc/config/rpcd once on the first login and then
keeps checking login attempts and ACL settings against the in-memory
copy until the process is restarted.

This is not desirable as we would like added, modified or removed accounts
to be effective immediately. In order to achive this behaviour, ensure to
unload the currently loaded rpcd configuration before looking up the login
account section.

Ref: https://github.com/openwrt/luci/issues/5179
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
session.c

index 908e2984e7c16247bb03510a20986a56980ed57c..347cf4e86d288443d60198d032d671d5bb5990a3 100644 (file)
--- a/session.c
+++ b/session.c
@@ -834,6 +834,12 @@ rpc_login_test_login(struct uci_context *uci,
        struct uci_element *e;
        struct uci_ptr ptr = { .package = "rpcd" };
 
+       if (!uci_lookup_ptr(uci, &ptr, NULL, false) && ptr.p) {
+               uci_unload(uci, ptr.p);
+               ptr.flags = 0;
+               ptr.p = NULL;
+       }
+
        uci_load(uci, ptr.package, &p);
 
        if (!p)