summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJo-Philipp Wich <jow@openwrt.org>2008-10-06 20:01:20 +0000
committerJo-Philipp Wich <jow@openwrt.org>2008-10-06 20:01:20 +0000
commit2c8ed3f1ead34cf6c959eeaec1c84aa51116d2e9 (patch)
tree42e7d9a4439d43927bac043cffb7b8ea5162407e
parentcf5fbff0a29aeb8536b9ce01d2ce0dd7f96f321c (diff)
* luci-0.8: backported shadow password support and luci.sys.init api
-rw-r--r--libs/sys/luasrc/sys.lua76
1 files changed, 72 insertions, 4 deletions
diff --git a/libs/sys/luasrc/sys.lua b/libs/sys/luasrc/sys.lua
index b3155c8c85..230201d829 100644
--- a/libs/sys/luasrc/sys.lua
+++ b/libs/sys/luasrc/sys.lua
@@ -437,11 +437,29 @@ function user.checkpasswd(username, password)
local account = user.getuser(username)
if account then
- if account.passwd == "!" then
- return true
- else
- return (account.passwd == posix.crypt(password, account.passwd))
+ local pwd = account.passwd
+ local shadowpw
+ if #pwd == 1 then
+ if luci.fs.stat("/etc/shadow") then
+ if not pcall(function()
+ for l in io.lines("/etc/shadow") do
+ shadowpw = l:match("^%s:([^:]+)" % username)
+ if shadowpw then
+ pwd = shadowpw
+ break
+ end
+ end
+ end) then
+ return nil, "Unable to access shadow-file"
+ end
+ end
+
+ if pwd == "!" then
+ return true
+ end
end
+
+ return (pwd == posix.crypt(password, pwd))
end
end
@@ -512,6 +530,56 @@ function wifi.iwscan(iface)
end
+--- LuCI system utilities / init related functions.
+-- @class module
+-- @name luci.sys.init
+init = {}
+init.dir = "/etc/init.d/"
+
+--- Get the names of all installed init scripts
+-- @return Table containing the names of all inistalled init scripts
+function init.names()
+ local names = { }
+ for _, name in ipairs(luci.fs.glob(init.dir.."*")) do
+ names[#names+1] = luci.fs.basename(name)
+ end
+ return names
+end
+
+--- Test whether the given init script is enabled
+-- @return Boolean indicating whether init is enabled
+function init.enabled(name)
+ if luci.fs.access(init.dir..name) then
+ return ( call(init.dir..name.." enabled") == 0 )
+ end
+ return false
+end
+
+--- Get the index of he given init script
+-- @return Numeric index value
+function init.index(name)
+ if luci.fs.access(init.dir..name) then
+ return call("source "..init.dir..name.." && exit $START")
+ end
+end
+
+--- Enable the given init script
+-- @return Boolean indicating success
+function init.enable(name)
+ if luci.fs.access(init.dir..name) then
+ return ( call(init.dir..name.." enable") == 0 )
+ end
+end
+
+--- Disable the given init script
+-- @return Boolean indicating success
+function init.disable(name)
+ if luci.fs.access(init.dir..name) then
+ return ( call(init.dir..name.." disable") == 0 )
+ end
+end
+
+
-- Internal functions
function _parse_delimited_table(iter, delimiter)