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"
refcount = tonumber(refcnt, 16),
usecount = tonumber(usecnt, 16),
flags = tonumber(flags, 16),
- device = dev
+ device = dev,
+
+ -- lua number is too small for storing the metric
+ -- add a metric_raw field with the original content
+ metric_raw = metric
}
if callback then
-- { "uid", "gid", "name", "passwd", "dir", "shell", "gecos" }
user.getuser = nixio.getpw
+--- Retrieve the current user password hash.
+-- @param username String containing the username to retrieve the password for
+-- @return String containing the hash or nil if no password is set.
+function user.getpasswd(username)
+ local pwe = nixio.getsp and nixio.getsp(username) or nixio.getpw(username)
+ local pwh = pwe and (pwe.pwdp or pwe.passwd)
+ if not pwh or #pwh < 1 or pwh == "!" or pwh == "x" then
+ return nil
+ else
+ return pwh
+ end
+end
+
--- Test whether given string matches the password of a given system user.
-- @param username String containing the Unix user name
-- @param pass String containing the password to compare
-- @return Boolean indicating wheather the passwords are equal
function user.checkpasswd(username, pass)
- local pwe = nixio.getsp and nixio.getsp(username) or nixio.getpw(username)
- local pwh = pwe and (pwe.pwdp or pwe.passwd)
- if not pwh or #pwh < 1 or pwh ~= "!" and nixio.crypt(pass, pwh) ~= pwh then
+ local pwh = user.getpasswd(username)
+ if not pwh or nixio.crypt(pass, pwh) ~= pwh then
return false
else
return true
-- @param ifname String containing the interface name
-- @return A wrapped iwinfo object instance
function wifi.getiwinfo(ifname)
- local t = iwinfo.type(ifname)
- if t then
- local x = iwinfo[t]
- return setmetatable({}, {
- __index = function(t, k)
- if x[k] then return x[k](ifname) end
- end
- })
+ if ifname then
+ local c = 0
+ local u = uci.cursor_state()
+ local d, n = ifname:match("^(%w+)%.network(%d+)")
+ if d and n then
+ n = tonumber(n)
+ u:foreach("wireless", "wifi-iface",
+ function(s)
+ if s.device == d then
+ c = c + 1
+ if c == n then
+ ifname = s.ifname or s.device
+ return false
+ end
+ end
+ end)
+ elseif u:get("wireless", ifname) == "wifi-device" then
+ u:foreach("wireless", "wifi-iface",
+ function(s)
+ if s.device == ifname and s.ifname then
+ ifname = s.ifname
+ return false
+ end
+ 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
+ end
+ })
+ end
end
end
-- @param iface Wireless interface (optional)
-- @return Table of available channels
function wifi.channels(iface)
- local t = iwinfo.type(iface)
+ local t = iwinfo.type(iface or "")
local cns
- if t and iwinfo[t] then
+ if iface and t and iwinfo[t] then
cns = iwinfo[t].freqlist(iface)
end
if not cns or #cns == 0 then
cns = {
- {channel = 1, mhz = 2.412},
- {channel = 2, mhz = 2.417},
- {channel = 3, mhz = 2.422},
- {channel = 4, mhz = 2.427},
- {channel = 5, mhz = 2.432},
- {channel = 6, mhz = 2.437},
- {channel = 7, mhz = 2.442},
- {channel = 8, mhz = 2.447},
- {channel = 9, mhz = 2.452},
- {channel = 10, mhz = 2.457},
- {channel = 11, mhz = 2.462}
+ {channel = 1, mhz = 2412},
+ {channel = 2, mhz = 2417},
+ {channel = 3, mhz = 2422},
+ {channel = 4, mhz = 2427},
+ {channel = 5, mhz = 2432},
+ {channel = 6, mhz = 2437},
+ {channel = 7, mhz = 2442},
+ {channel = 8, mhz = 2447},
+ {channel = 9, mhz = 2452},
+ {channel = 10, mhz = 2457},
+ {channel = 11, mhz = 2462}
}
end
-- @return Numeric index value
function init.index(name)
if fs.access(init.dir..name) then
- return call("source "..init.dir..name.."; exit $START")
+ return call("source "..init.dir..name.." enabled; exit $START")
end
end