made login() use userlib and automatically load users and stuff. shiny.
This commit is contained in:
parent
48f3576581
commit
1406044789
@ -16,6 +16,7 @@ modules/util/motd.lua
|
||||
modules/lib/readline.lua
|
||||
modules/lib/shutil.lua
|
||||
modules/lib/sha256.lua
|
||||
modules/lib/userlib.lua
|
||||
modules/net/net-ext.lua
|
||||
modules/applications/login.lua
|
||||
modules/applications/luash.lua
|
||||
|
@ -1,14 +1,15 @@
|
||||
function login()
|
||||
if _G.PASS_HASH and _G.PASS_SALT then
|
||||
io.write("\f")
|
||||
io.write(_G.MOTD.."\nPassword: ")
|
||||
local pt = io.read()
|
||||
if pt then
|
||||
if sha.sha256(pt.._G.PASS_SALT) == _G.PASS_HASH then
|
||||
return true
|
||||
end
|
||||
end
|
||||
return false
|
||||
if not userlib then return true end
|
||||
local un,pw,cc = "","",false
|
||||
if #userlib.users() > 0 then
|
||||
repeat
|
||||
io.write("\f"..MOTD.."\n"..net.id.." login: ")
|
||||
un = io.read()
|
||||
io.write("Password: ")
|
||||
pw = io.read("*")
|
||||
cc = userlib.verify(un,pw)
|
||||
until cc
|
||||
os.setuser(un)
|
||||
return true
|
||||
end
|
||||
return true
|
||||
end
|
||||
|
@ -1,9 +1,7 @@
|
||||
function luash(si)
|
||||
spawn("lua shell",function()
|
||||
if login then
|
||||
repeat
|
||||
until login()
|
||||
end
|
||||
coroutine.yield()
|
||||
log(login())
|
||||
print("\f"..MOTD)
|
||||
print(_VERSION)
|
||||
while true do
|
||||
|
58
modules/lib/userlib.lua
Normal file
58
modules/lib/userlib.lua
Normal file
@ -0,0 +1,58 @@
|
||||
do
|
||||
_G.userlib = {}
|
||||
local ut = {}
|
||||
function userlib.users()
|
||||
local t = {}
|
||||
for k,v in pairs(ut) do
|
||||
t[#t+1] = k
|
||||
end
|
||||
return t
|
||||
end
|
||||
function userlib.verify(username,pass)
|
||||
if ut[username] then
|
||||
if sha.sha256(pass..ut[username][2]) == ut[username][1] then
|
||||
return true
|
||||
end
|
||||
end
|
||||
return false
|
||||
end
|
||||
function userlib.gensalt(len)
|
||||
local S = ""
|
||||
for i = 1, len do
|
||||
S=S..string.char(math.random(32,126))
|
||||
end
|
||||
return S
|
||||
end
|
||||
function userlib.setuser(username,hpass,salt,...)
|
||||
ut[username] = {hpass, salt,...}
|
||||
end
|
||||
function userlib.deluser(username)
|
||||
ut[username] = nil
|
||||
end
|
||||
function userlib.readpwd(path)
|
||||
local f=io.open(path,"rb")
|
||||
if not f then return false end
|
||||
local C=f:read("*a")
|
||||
for line in C:gmatch("[^\n]+") do
|
||||
local username,hpass,salt = line:match("(.+)\t(.+)\t(.+)")
|
||||
log(username,hpass,salt)
|
||||
if username and hpass and salt then
|
||||
ut[username] = {hpass,salt}
|
||||
end
|
||||
end
|
||||
end
|
||||
function userlib.writepwd()
|
||||
local S=""
|
||||
for k,v in pairs(ut) do
|
||||
S=S..k.."\t"..v[1].."\t"..v[2].."\n"
|
||||
end
|
||||
return S
|
||||
end
|
||||
function userlib.write(path)
|
||||
local f=io.open(path,"wb")
|
||||
if not f then return false end
|
||||
f:write(userlib.writepwd())
|
||||
f:close()
|
||||
end
|
||||
spawn("load users",function() userlib.readpwd("/boot/sys/users.dat") end)
|
||||
end
|
Loading…
Reference in New Issue
Block a user