From 52865b9bf0fa41ffb4e2e22c505ea23d4feb23a8 Mon Sep 17 00:00:00 2001 From: Ted Trask Date: Tue, 11 Dec 2012 02:42:26 +0000 Subject: Interfaces: Replace io.popen with subprocess.call_capture --- interfaces-model.lua | 39 +++++++++++---------------------------- 1 file changed, 11 insertions(+), 28 deletions(-) diff --git a/interfaces-model.lua b/interfaces-model.lua index 40b9542..6b3db5b 100644 --- a/interfaces-model.lua +++ b/interfaces-model.lua @@ -5,6 +5,7 @@ module (..., package.seeall) require("modelfunctions") fs = require("acf.fs") format = require("acf.format") +require("subprocess") local servicename = "networking" local filename = "/etc/network/interfaces" @@ -332,19 +333,12 @@ get_status = function () if not fs.is_file(filename) then status.filename.errtxt = "File not found" end - local cmd = path.."ip route" - local f = io.popen(cmd) - status.iproute.value = f:read("*a") - f:close() - cmd = path.."ip addr" - f = io.popen(cmd) - status.ipaddr.value = f:read("*a") - f:close() - cmd = path.."ip tunnel" - f = io.popen(cmd) - status.iptunnel.value = f:read("*a") - f:close() + local code + code,status.iproute.value = subprocess.call_capture({"ip", "route"}) + code,status.ipaddr.value = subprocess.call_capture({"ip", "addr"}) + code,status.iptunnel.value = subprocess.call_capture({"ip", "tunnel"}) + return cfe({ type="group", value=status, label="Status" }) end @@ -358,10 +352,7 @@ write_file = function (self, newfile) end get_interfaces = function() - local cmd = path.."ip addr" - local f = io.popen(cmd) - local ipaddr = f:read("*a") - f:close() + local code,ipaddr = subprocess.call_capture({"ip", "addr"}) -- now parse the result to find the interfaces local retval = {} for line in string.gmatch(ipaddr, "[^\n]*\n?") do @@ -374,10 +365,7 @@ get_interfaces = function() end get_addresses = function() - local cmd = path.."ip addr" - local f = io.popen(cmd) - local ipaddr = f:read("*a") - f:close() + local code,ipaddr = subprocess.call_capture({"ip", "addr"}) -- now parse the result to find the interfaces and IP addresses local retval = {} local interface @@ -402,10 +390,8 @@ ifup_by_name = function (self, ifuprequest) local success = modelfunctions.validateselect(ifuprequest.value.name) if success then name = ifuprequest.value.name.value or "" - local cmd = path.."ifup "..format.escapespecialcharacters(name).." 2>&1" - local f = io.popen(cmd) - ifuprequest.descr = f:read("*a") - f:close() + local code + code,ifuprequest.descr = subprocess.call_capture({"ifup", name, stderr=subprocess.STDOUT}) if ifuprequest.descr == "" then ifuprequest.descr = "Interface up" @@ -428,10 +414,7 @@ ifdown_by_name = function (self, ifdownrequest) local success = modelfunctions.validateselect(ifdownrequest.value.name) if success then name = ifdownrequest.value.name.value or "" - local cmd = path.."ifdown "..format.escapespecialcharacters(name).." 2>&1" - local f = io.popen(cmd) - ifdownrequest.descr = f:read("*a") - f:close() + code,ifdownrequest.descr = subprocess.call_capture({"ifdown", name, stderr=subprocess.STDOUT}) if ifdownrequest.descr == "" then ifdownrequest.descr = "Interface down" -- cgit v1.2.3