treewide: filter shell arguments through shellquote() where applicable
[project/luci.git] / modules / luci-mod-admin-full / luasrc / controller / admin / status.lua
index 01d195b..3a1c169 100644 (file)
@@ -1,5 +1,5 @@
 -- Copyright 2008 Steven Barth <steven@midlink.org>
--- Copyright 2011 Jo-Philipp Wich <xm@subsignal.org>
+-- Copyright 2011 Jo-Philipp Wich <jow@openwrt.org>
 -- Licensed to the public under the Apache License 2.0.
 
 module("luci.controller.admin.status", package.seeall)
@@ -7,7 +7,10 @@ module("luci.controller.admin.status", package.seeall)
 function index()
        entry({"admin", "status"}, alias("admin", "status", "overview"), _("Status"), 20).index = true
        entry({"admin", "status", "overview"}, template("admin_status/index"), _("Overview"), 1)
-       entry({"admin", "status", "iptables"}, call("action_iptables"), _("Firewall"), 2).leaf = true
+
+       entry({"admin", "status", "iptables"}, template("admin_status/iptables"), _("Firewall"), 2).leaf = true
+       entry({"admin", "status", "iptables_action"}, post("action_iptables")).leaf = true
+
        entry({"admin", "status", "routes"}, template("admin_status/routes"), _("Routes"), 3)
        entry({"admin", "status", "syslog"}, call("action_syslog"), _("System Log"), 4)
        entry({"admin", "status", "dmesg"}, call("action_dmesg"), _("Kernel Log"), 5)
@@ -21,8 +24,10 @@ function index()
        entry({"admin", "status", "realtime", "bandwidth"}, template("admin_status/bandwidth"), _("Traffic"), 2).leaf = true
        entry({"admin", "status", "realtime", "bandwidth_status"}, call("action_bandwidth")).leaf = true
 
-       entry({"admin", "status", "realtime", "wireless"}, template("admin_status/wireless"), _("Wireless"), 3).leaf = true
-       entry({"admin", "status", "realtime", "wireless_status"}, call("action_wireless")).leaf = true
+       if nixio.fs.access("/etc/config/wireless") then
+               entry({"admin", "status", "realtime", "wireless"}, template("admin_status/wireless"), _("Wireless"), 3).leaf = true
+               entry({"admin", "status", "realtime", "wireless_status"}, call("action_wireless")).leaf = true
+       end
 
        entry({"admin", "status", "realtime", "connections"}, template("admin_status/connections"), _("Connections"), 4).leaf = true
        entry({"admin", "status", "realtime", "connections_status"}, call("action_connections")).leaf = true
@@ -42,28 +47,24 @@ end
 
 function action_iptables()
        if luci.http.formvalue("zero") then
-               if luci.http.formvalue("zero") == "6" then
-                       luci.util.exec("ip6tables -Z")
+               if luci.http.formvalue("family") == "6" then
+                       luci.util.exec("/usr/sbin/ip6tables -Z")
                else
-                       luci.util.exec("iptables -Z")
+                       luci.util.exec("/usr/sbin/iptables -Z")
                end
-               luci.http.redirect(
-                       luci.dispatcher.build_url("admin", "status", "iptables")
-               )
-       elseif luci.http.formvalue("restart") == "1" then
-               luci.util.exec("/etc/init.d/firewall reload")
-               luci.http.redirect(
-                       luci.dispatcher.build_url("admin", "status", "iptables")
-               )
-       else
-               luci.template.render("admin_status/iptables")
+       elseif luci.http.formvalue("restart") then
+               luci.util.exec("/etc/init.d/firewall restart")
        end
+
+       luci.http.redirect(luci.dispatcher.build_url("admin/status/iptables"))
 end
 
 function action_bandwidth(iface)
        luci.http.prepare_content("application/json")
 
-       local bwc = io.popen("luci-bwc -i %q 2>/dev/null" % iface)
+       local bwc = io.popen("luci-bwc -i %s 2>/dev/null"
+               % luci.util.shellquote(iface))
+
        if bwc then
                luci.http.write("[")
 
@@ -81,7 +82,9 @@ end
 function action_wireless(iface)
        luci.http.prepare_content("application/json")
 
-       local bwc = io.popen("luci-bwc -r %q 2>/dev/null" % iface)
+       local bwc = io.popen("luci-bwc -r %s 2>/dev/null"
+               % luci.util.shellquote(iface))
+
        if bwc then
                luci.http.write("[")
 
@@ -140,14 +143,12 @@ function action_connections()
 end
 
 function action_nameinfo(...)
-       local i
-       local rv = { }
-       for i = 1, select('#', ...) do
-               local addr = select(i, ...)
-               local fqdn = nixio.getnameinfo(addr)
-               rv[addr] = fqdn or (addr:match(":") and "[%s]" % addr or addr)
-       end
+       local util = require "luci.util"
 
        luci.http.prepare_content("application/json")
-       luci.http.write_json(rv)
+       luci.http.write_json(util.ubus("network.rrdns", "lookup", {
+               addrs = { ... },
+               timeout = 5000,
+               limit = 1000
+       }) or { })
 end