50 lines
1.7 KiB
Plaintext
50 lines
1.7 KiB
Plaintext
--:Minify:--
|
|
local args = {...}
|
|
local i = 1
|
|
local opt = {}
|
|
|
|
while i <= #args do
|
|
local a = args[i]
|
|
if a == "-l" then i=i+1; opt.newname = args[i]
|
|
elseif a == "-p" then i=i+1; opt.password = args[i]
|
|
elseif a == "-g" then i=i+1; opt.gid = tonumber(args[i])
|
|
elseif a == "-d" then i=i+1; opt.homedir = args[i]
|
|
elseif a == "-s" then i=i+1; opt.shell = args[i]
|
|
elseif a == "-L" then opt.lock = true
|
|
elseif a == "-U" then opt.unlock = true
|
|
elseif a:sub(1,1) ~= "-" then opt.username = a
|
|
else print("usermod: unknown option: " .. a); syscall.exit(1); return end
|
|
i = i + 1
|
|
end
|
|
|
|
if not opt.username then
|
|
print("Usage: usermod [-l newname] [-p password] [-g gid] [-d homedir] [-s shell] [-L] [-U] <username>")
|
|
syscall.exit(1); return
|
|
end
|
|
|
|
if opt.lock and opt.unlock then
|
|
print("usermod: -L and -U are mutually exclusive")
|
|
syscall.exit(1); return
|
|
end
|
|
|
|
local uid = syscall.getuid(opt.username)
|
|
if not uid then
|
|
print("usermod: user '" .. opt.username .. "' does not exist")
|
|
syscall.exit(1); return
|
|
end
|
|
|
|
local function apply(fn, ...)
|
|
local ok, err = fn(...)
|
|
if not ok then print("usermod: " .. tostring(err)); syscall.exit(1) end
|
|
end
|
|
|
|
if opt.newname then apply(syscall.setusername, uid, opt.newname) end
|
|
if opt.password then apply(syscall.setpassword, uid, opt.password) end
|
|
if opt.gid then apply(syscall.setgid, uid, opt.gid) end
|
|
if opt.homedir then apply(syscall.sethomedir, uid, opt.homedir) end
|
|
if opt.shell then apply(syscall.setshell, uid, opt.shell) end
|
|
if opt.lock then apply(syscall.lockuser, uid) end
|
|
if opt.unlock then apply(syscall.unlockuser, uid) end
|
|
|
|
print("usermod: updated user '" .. opt.username .. "'")
|