luci-mod-status: replace iptables controller actions with cgi-io calls
authorJo-Philipp Wich <jo@mein.io>
Wed, 18 Dec 2019 20:57:01 +0000 (21:57 +0100)
committerJo-Philipp Wich <jo@mein.io>
Sun, 22 Dec 2019 22:20:23 +0000 (23:20 +0100)
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
modules/luci-base/root/usr/share/rpcd/acl.d/luci-base.json
modules/luci-mod-status/htdocs/luci-static/resources/view/status/iptables.js
modules/luci-mod-status/luasrc/controller/admin/status.lua
modules/luci-mod-status/root/usr/share/luci/menu.d/luci-mod-status.json

index 298b5ed336e995bc740a079bef7ce1fc7c224340..a7d3edaf2e2557cf01c6b16b248b03c40d7045c8 100644 (file)
@@ -48,7 +48,9 @@
                                "/usr/bin/traceroute *": [ "exec" ],
                                "/usr/bin/traceroute6 *": [ "exec" ],
                                "/usr/bin/nslookup *": [ "exec" ],
-                               "/usr/libexec/luci-peeraddr": [ "exec" ]
+                               "/usr/libexec/luci-peeraddr": [ "exec" ],
+                               "/usr/sbin/iptables --line-numbers -w -nvxL -t *": [ "exec" ],
+                               "/usr/sbin/ip6tables --line-numbers -w -nvxL -t *": [ "exec" ]
                        },
                        "ubus": {
                                "file": [ "list", "read", "stat" ],
index eaeba578fe1c6a3eff3ccbfe63ccf027ced4db54..966cd560c1a2bbb9b206c0a6ed5b08eb22dc7237 100644 (file)
@@ -246,8 +246,10 @@ function parse_output(table, s)
 }
 
 table_names.forEach(function(table) {
-       L.poll(5, L.url('admin/status/iptables_dump', current_mode, table.toLowerCase()), null,
-               function (xhr) {
-                       parse_output(table, xhr.responseText);
+       L.Poll.add(function() {
+               var cmd = (current_mode == 6) ? '/usr/sbin/ip6tables' : '/usr/sbin/iptables';
+               return L.fs.exec_direct(cmd, [ '--line-numbers', '-w', '-nvxL', '-t', table.toLowerCase() ]).then(function(output) {
+                       parse_output(table, output);
                });
+       }, 5);
 });
index 2684bdf715ac50e2583ae92f7c08db9dba36cf63..e84f88d6421c8671e1d7117d898c0fb21182a1f9 100644 (file)
@@ -14,27 +14,6 @@ function action_dmesg()
        luci.template.render("admin_status/dmesg", {dmesg=dmesg})
 end
 
-function dump_iptables(family, table)
-       local prefix = (family == "6") and "ip6" or "ip"
-       local ok, lines = pcall(io.lines, "/proc/net/%s_tables_names" % prefix)
-       if ok and lines then
-               local s
-               for s in lines do
-                       if s == table then
-                               luci.http.prepare_content("text/plain")
-                               luci.sys.process.exec({
-                                       "/usr/sbin/%stables" % prefix, "-w", "-t", table,
-                                       "--line-numbers", "-nxvL"
-                               }, luci.http.write)
-                               return
-                       end
-               end
-       end
-
-       luci.http.status(404, "No such table")
-       luci.http.prepare_content("text/plain")
-end
-
 function action_iptables()
        if luci.http.formvalue("zero") then
                if luci.http.formvalue("family") == "6" then
index 03f7dce3b98ea327904b9bf467b9c8635fe1d7a8..53d4b1736bd2169a1b5ac405f6a28b8607111b24 100644 (file)
                }
        },
 
-       "admin/status/iptables_dump/*": {
-               "action": {
-                       "type": "call",
-                       "module": "luci.controller.admin.status",
-                       "function": "dump_iptables"
-               }
-       },
-
        "admin/status/iptables_action/*": {
                "action": {
                        "type": "call",