X-Git-Url: https://git.archive.openwrt.org/?p=project%2Fluci.git;a=blobdiff_plain;f=libs%2Fsys%2Fluasrc%2Fsys.lua;h=1333cd8593e98e6facae5dbe8acaa50706479fee;hp=6d000ae6e279bfba91846f58c526bb1bed87bdc1;hb=9c03a76fc28dac4efe4714f0e61bb41bf2784ef7;hpb=cca45d0bdbd73919ef5e9637273c54bcbd1b7a82 diff --git a/libs/sys/luasrc/sys.lua b/libs/sys/luasrc/sys.lua index 6d000ae6e..1333cd859 100644 --- a/libs/sys/luasrc/sys.lua +++ b/libs/sys/luasrc/sys.lua @@ -30,15 +30,14 @@ local os = require "os" local table = require "table" local nixio = require "nixio" local fs = require "nixio.fs" -local iwinfo = require "iwinfo" local uci = require "luci.model.uci" local luci = {} luci.util = require "luci.util" luci.ip = require "luci.ip" -local tonumber, ipairs, pairs, pcall, type, next, setmetatable = - tonumber, ipairs, pairs, pcall, type, next, setmetatable +local tonumber, ipairs, pairs, pcall, type, next, setmetatable, require = + tonumber, ipairs, pairs, pcall, type, next, setmetatable, require --- LuCI Linux and POSIX system utilities. @@ -60,20 +59,6 @@ end -- @return String containg the return the output of the command exec = luci.util.exec ---- Invoke the luci-flash executable to write an image to the flash memory. --- @param image Local path or URL to image file --- @param kpattern Pattern of files to keep over flash process --- @return Return value of os.execute() -function flash(image, kpattern) - local cmd = "luci-flash " - if kpattern then - cmd = cmd .. "-k '" .. kpattern:gsub("'", "") .. "' " - end - cmd = cmd .. "'" .. image:gsub("'", "") .. "' >/dev/null 2>&1" - - return os.execute(cmd) -end - --- Retrieve information about currently mounted file systems. -- @return Table containing mount information function mounts() @@ -181,6 +166,7 @@ end -- @return String containing the memory used for caching in kB -- @return String containing the memory used for buffering in kB -- @return String containing the free memory amount in kB +-- @return String containing the cpu bogomips (number) function sysinfo() local cpuinfo = fs.readfile("/proc/cpuinfo") local meminfo = fs.readfile("/proc/meminfo") @@ -191,6 +177,7 @@ function sysinfo() local memcached = tonumber(meminfo:match("\nCached:%s*(%d+)")) local memfree = tonumber(meminfo:match("MemFree:%s*(%d+)")) local membuffers = tonumber(meminfo:match("Buffers:%s*(%d+)")) + local bogomips = tonumber(cpuinfo:match("BogoMIPS.-:%s*([^\n]+)")) if not system then system = nixio.uname().machine @@ -202,7 +189,7 @@ function sysinfo() model = cpuinfo:match("cpu model.-:%s*([^\n]+)") end - return system, model, memtotal, memcached, membuffers, memfree + return system, model, memtotal, memcached, membuffers, memfree, bogomips end --- Retrieves the output of the "logread" command. @@ -604,7 +591,7 @@ end -- @return Boolean indicating wheather the passwords are equal function user.checkpasswd(username, pass) local pwh = user.getpasswd(username) - if not pwh or nixio.crypt(pass, pwh) ~= pwh then + if pwh and nixio.crypt(pass, pwh) ~= pwh then return false else return true @@ -617,16 +604,17 @@ end -- @return Number containing 0 on success and >= 1 on error function user.setpasswd(username, password) if password then - password = password:gsub("'", "") + password = password:gsub("'", [['"'"']]) end if username then - username = username:gsub("'", "") + username = username:gsub("'", [['"'"']]) end - local cmd = "(echo '"..password.."';sleep 1;echo '"..password.."')|" - cmd = cmd .. "passwd '"..username.."' >/dev/null 2>&1" - return os.execute(cmd) + return os.execute( + "(echo '" .. password .. "'; sleep 1; echo '" .. password .. "') | " .. + "passwd '" .. username .. "' >/dev/null 2>&1" + ) end @@ -639,6 +627,8 @@ wifi = {} -- @param ifname String containing the interface name -- @return A wrapped iwinfo object instance function wifi.getiwinfo(ifname) + local stat, iwinfo = pcall(require, "iwinfo") + if ifname then local c = 0 local u = uci.cursor_state() @@ -665,19 +655,17 @@ function wifi.getiwinfo(ifname) end) end - local t = iwinfo.type(ifname) - if t then - local x = iwinfo[t] - return setmetatable({}, { - __index = function(t, k) - if k == "ifname" then - return ifname - elseif x[k] then - return x[k](ifname) - end + local t = stat and iwinfo.type(ifname) + local x = t and iwinfo[t] or { } + return setmetatable({}, { + __index = function(t, k) + if k == "ifname" then + return ifname + elseif x[k] then + return x[k](ifname) end - }) - end + end + }) end end @@ -735,10 +723,14 @@ end -- @param iface Wireless interface (optional) -- @return Table of available channels function wifi.channels(iface) - local t = iwinfo.type(iface or "") + local stat, iwinfo = pcall(require, "iwinfo") local cns - if iface and t and iwinfo[t] then - cns = iwinfo[t].freqlist(iface) + + if stat then + local t = iwinfo.type(iface or "") + if iface and t and iwinfo[t] then + cns = iwinfo[t].freqlist(iface) + end end if not cns or #cns == 0 then