diff options
Diffstat (limited to 'libs/core')
-rw-r--r-- | libs/core/luasrc/fs.lua | 3 | ||||
-rw-r--r-- | libs/core/luasrc/sys.lua | 16 |
2 files changed, 15 insertions, 4 deletions
diff --git a/libs/core/luasrc/fs.lua b/libs/core/luasrc/fs.lua index 5c1f2a051b..415e8e567c 100644 --- a/libs/core/luasrc/fs.lua +++ b/libs/core/luasrc/fs.lua @@ -28,6 +28,9 @@ module("luci.fs", package.seeall) require("posix") +-- Access +access = posix.access + -- Glob glob = posix.glob diff --git a/libs/core/luasrc/sys.lua b/libs/core/luasrc/sys.lua index 54c4e06137..540a636fb8 100644 --- a/libs/core/luasrc/sys.lua +++ b/libs/core/luasrc/sys.lua @@ -285,10 +285,18 @@ user = {} user.getuser = posix.getpasswd -- checks whether a string matches the password of a certain system user -function user.checkpasswd(user, password) - local account = user.getuser(user) - if posix.crypt and account then - return (account.passwd == posix.crypt(account.passwd, password)) +function user.checkpasswd(username, password) + local account = user.getuser(username) + + -- FIXME: detect testing environment + if luci.fs.isfile("/etc/shadow") and not luci.fs.access("/etc/shadow", "r") then + return true + elseif account then + if account.passwd == "!" then + return true + else + return (account.passwd == posix.crypt(account.passwd, password)) + end end end |