luci-app-openvpn: fix stray uci permission warning
authorJo-Philipp Wich <jo@mein.io>
Tue, 25 Jan 2022 21:39:48 +0000 (22:39 +0100)
committerJo-Philipp Wich <jo@mein.io>
Tue, 25 Jan 2022 21:43:17 +0000 (22:43 +0100)
The OpenVPN file view uses a dummy Map() instance to render the breadcrumb
template which triggers a uci permission error since the view is being
rendered by a form() action which does not set up the expected permission
flags. CBI Map() instances should only be used for cbi() dispatch targets.

Solve the issue by appending the breadcrumb template directly to the
SimpleForm() instance and by removing the redundant dummy Map() instance.

Fixes: #4370
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
applications/luci-app-openvpn/luasrc/model/cbi/openvpn-file.lua

index 9d50601b1f9df53f1beb3d81acde7158bc088999..fa823964acf65a70369f8a8a6467573bdc41975f 100644 (file)
@@ -7,32 +7,36 @@ local uci       = require("luci.model.uci").cursor()
 local cfg_file  = uci:get("openvpn", arg[1], "config")
 local auth_file = cfg_file:match("(.+)%..+").. ".auth"
 
-local m = Map("openvpn")
+local function makeForm(id, title, desc)
+       local t = Template("openvpn/pageswitch")
+       t.mode = "file"
+       t.instance = arg[1]
 
-local p = m:section( SimpleSection )
-p.template = "openvpn/pageswitch"
-p.mode     = "file"
-p.instance = arg[1]
+       local f = SimpleForm(id, title, desc)
+       f:append(t)
+
+       return f
+end
 
 if not cfg_file or not fs.access(cfg_file) then
-       local f = SimpleForm("error", nil, translatef("The OVPN config file (%s) could not be found, please check your configuration.", cfg_file or "n/a"))
+       local f = makeForm("error", nil, translatef("The OVPN config file (%s) could not be found, please check your configuration.", cfg_file or "n/a"))
        f:append(Template("openvpn/ovpn_css"))
        f.reset = false
        f.submit = false
-       return m, f
+       return f
 end
 
 if fs.stat(cfg_file).size >= 102400 then
-       f = SimpleForm("error", nil,
+       local f = makeForm("error", nil,
                translatef("The size of the OVPN config file (%s) is too large for online editing in LuCI (&ge; 100 KB). ", cfg_file)
                .. translate("Please edit this file directly in a terminal session."))
        f:append(Template("openvpn/ovpn_css"))
        f.reset = false
        f.submit = false
-       return m, f
+       return f
 end
 
-f = SimpleForm("cfg", nil)
+f = makeForm("cfg", nil)
 f:append(Template("openvpn/ovpn_css"))
 f.submit = translate("Save")
 f.reset = false
@@ -79,4 +83,4 @@ function s.handle(self, state, data2)
        return true
 end
 
-return m, f
+return f