Rearrange output of luci.sys.wifi.*, luci.sys.net.conntrack
[project/luci.git] / libs / sys / luasrc / sys.lua
index e752e4f..e8b5e2c 100644 (file)
@@ -35,7 +35,7 @@ luci.util   = require "luci.util"
 luci.fs     = require "luci.fs"
 luci.ip     = require "luci.ip"
 
-local tonumber, ipairs, pairs = tonumber, ipairs, pairs
+local tonumber, ipairs, pairs, pcall = tonumber, ipairs, pairs, pcall
 
 
 --- LuCI Linux and POSIX system utilities.
@@ -265,9 +265,9 @@ function net.conntrack()
        local connt = {}
        if luci.fs.access("/proc/net/nf_conntrack") then
                for line in io.lines("/proc/net/nf_conntrack") do
-                       local entry = _parse_mixed_record(line, " +")
-                       entry.layer3 = entry[1]
-                       entry.layer4 = entry[2]
+                       local entry, flags = _parse_mixed_record(line, " +")
+                       entry.layer3 = flags[1]
+                       entry.layer4 = flags[2]
                        for i=1, #entry do
                                entry[i] = nil
                        end
@@ -275,10 +275,10 @@ function net.conntrack()
                        connt[#connt+1] = entry
                end
        elseif luci.fs.access("/proc/net/ip_conntrack") then
-               for line in io.lines("/proc/net/nf_conntrack") do
-                       local entry = _parse_mixed_record(line, " +")
+               for line in io.lines("/proc/net/ip_conntrack") do
+                       local entry, flags = _parse_mixed_record(line, " +")
                        entry.layer3 = "ipv4"
-                       entry.layer4 = entry[1]
+                       entry.layer4 = flags[1]
                        for i=1, #entry do
                                entry[i] = nil
                        end
@@ -491,8 +491,12 @@ function user.checkpasswd(username, password)
                        end
                end
 
-               return (pwd == posix.crypt(password, pwd))
+               if pwd and #pwd > 0 and password and #password > 0 then
+                       return (pwd == posix.crypt(password, pwd))
+               end
        end
+
+       return false
 end
 
 --- Change the password of given user.
@@ -529,7 +533,11 @@ function wifi.getiwconfig()
                local k = l:match("^(.-) ")
                l = l:gsub("^(.-) +", "", 1)
                if k then
-                       iwc[k] = _parse_mixed_record(l)
+                       local entry, flags = _parse_mixed_record(l)
+                       if entry then
+                               entry.flags = flags
+                       end
+                       iwc[k] = entry
                end
        end
 
@@ -553,7 +561,11 @@ function wifi.iwscan(iface)
                                c = c:gsub("^(.-)- ", "", 1)
                                c = luci.util.split(c, "\n", 7)
                                c = table.concat(c, "\n", 1)
-                               table.insert(iws[k], _parse_mixed_record(c))
+                               local entry, flags = _parse_mixed_record(c)
+                               if entry then
+                                       entry.flags = flags
+                               end
+                               table.insert(iws[k], entry)
                        end
                end
        end
@@ -649,6 +661,7 @@ end
 function _parse_mixed_record(cnt, delimiter)
        delimiter = delimiter or "  "
        local data = {}
+       local flags = {}
 
        for i, l in pairs(luci.util.split(luci.util.trim(cnt), "\n")) do
                for j, f in pairs(luci.util.split(luci.util.trim(l), delimiter, nil, true)) do
@@ -656,7 +669,7 @@ function _parse_mixed_record(cnt, delimiter)
 
             if k then
                                if x == "" then
-                                       table.insert(data, k)
+                                       table.insert(flags, k)
                                else
                        data[k] = v
                                end
@@ -664,5 +677,5 @@ function _parse_mixed_record(cnt, delimiter)
        end
        end
 
-    return data
+    return data, flags
 end