treewide: filter shell arguments through shellquote() where applicable
[project/luci.git] / modules / luci-mod-admin-full / luasrc / controller / admin / status.lua
index 89ebda7..3a1c169 100644 (file)
@@ -1,24 +1,16 @@
---[[
-LuCI - Lua Configuration Interface
-
-Copyright 2008 Steven Barth <steven@midlink.org>
-Copyright 2011 Jo-Philipp Wich <xm@subsignal.org>
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-$Id$
-]]--
+-- Copyright 2008 Steven Barth <steven@midlink.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)
 
 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)
@@ -32,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
@@ -53,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("[")
 
@@ -92,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("[")
 
@@ -151,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