50 lines
1.3 KiB
Plaintext
50 lines
1.3 KiB
Plaintext
--:Minify:--
|
|
local args = {...}
|
|
local removeHome = false
|
|
local username = nil
|
|
|
|
for _, a in ipairs(args) do
|
|
if a == "-r" then removeHome = true
|
|
elseif a:sub(1,1) ~= "-" then username = a
|
|
else print("userdel: unknown option: " .. a); syscall.exit(1); return end
|
|
end
|
|
|
|
if not username then
|
|
print("Usage: userdel [-r] <username>")
|
|
syscall.exit(1); return
|
|
end
|
|
|
|
local uid = syscall.getuid(username)
|
|
if not uid then
|
|
print("userdel: user '" .. username .. "' does not exist")
|
|
syscall.exit(1); return
|
|
end
|
|
|
|
local pwent = syscall.getpasswd(uid)
|
|
|
|
local ok, err = syscall.deleteuser(uid)
|
|
if not ok then
|
|
print("userdel: " .. tostring(err))
|
|
syscall.exit(1); return
|
|
end
|
|
|
|
if removeHome and pwent and pwent.homedir then
|
|
local fs = require("fs")
|
|
local ok2, err2 = pcall(function()
|
|
local function rmdir(path)
|
|
for _, f in ipairs(fs.list(path) or {}) do
|
|
local full = path .. "/" .. f
|
|
if fs.isDir(full) then rmdir(full)
|
|
else syscall.remove(full) end
|
|
end
|
|
syscall.remove(path)
|
|
end
|
|
if fs.exists(pwent.homedir) then rmdir(pwent.homedir) end
|
|
end)
|
|
if not ok2 then
|
|
print("userdel: warning: could not remove home: " .. tostring(err2))
|
|
end
|
|
end
|
|
|
|
print("userdel: deleted user '" .. username .. "'")
|