Improved user and group removal, simpler APIs.
This commit is contained in:
parent
02c12703dd
commit
313c9edfd0
@ -56,9 +56,9 @@ class Passwd
|
||||
false
|
||||
end
|
||||
|
||||
def get_user(uid : Int32) : Passwd::User?
|
||||
def get_user(&block) : Passwd::User?
|
||||
each_user do |user|
|
||||
if user.uid == uid
|
||||
if yield user
|
||||
set_user_groups user
|
||||
|
||||
return user
|
||||
@ -66,21 +66,24 @@ class Passwd
|
||||
end
|
||||
end
|
||||
|
||||
def get_user(uid : Int32)
|
||||
get_user &.uid.==(uid)
|
||||
end
|
||||
|
||||
def get_user(login : String)
|
||||
get_user &.login.==(login)
|
||||
end
|
||||
|
||||
##
|
||||
# Will fail if the user is found but the password is invalid.
|
||||
def get_user(login : String, password : String) : Passwd::User?
|
||||
# Use this method if you somehow need to check the password…
|
||||
# Be careful though, your system probably does not use SHA256 hashes as
|
||||
# passwords. You should use this only on your own passwd and group files.
|
||||
def get_user(login : String, password : String)
|
||||
hash = Passwd.hash_password password
|
||||
|
||||
each_user do |user|
|
||||
if user.login == login
|
||||
if user.password_hash == hash
|
||||
set_user_groups user
|
||||
|
||||
return user
|
||||
end
|
||||
|
||||
next
|
||||
end
|
||||
get_user do |user|
|
||||
user.login == login && user.password_hash == hash
|
||||
end
|
||||
end
|
||||
|
||||
@ -201,27 +204,26 @@ class Passwd
|
||||
FileUtils.cp tempfile.path, path
|
||||
end
|
||||
|
||||
def remove_user(uid)
|
||||
user = get_user(uid)
|
||||
|
||||
return nil unless user
|
||||
|
||||
user_login = user.login
|
||||
|
||||
def remove_user_from_groups(user)
|
||||
new_group = group_as_array.map do |line|
|
||||
group = Group.new line
|
||||
|
||||
group.users.select! &.!=(user_login)
|
||||
group.users.select! &.!=(user.login)
|
||||
group.users.select! &.!=(user.uid.to_s)
|
||||
|
||||
group.to_csv
|
||||
end
|
||||
|
||||
safe_rewrite @group, new_group.join('\n') + '\n'
|
||||
end
|
||||
|
||||
def remove_user(&block)
|
||||
new_passwd = passwd_as_array.compact_map do |line|
|
||||
user = User.new line
|
||||
|
||||
if uid == user.uid
|
||||
if yield user
|
||||
remove_user_from_groups user
|
||||
|
||||
nil
|
||||
else
|
||||
line.join ':'
|
||||
@ -231,11 +233,19 @@ class Passwd
|
||||
safe_rewrite @passwd, new_passwd.join("\n") + "\n"
|
||||
end
|
||||
|
||||
def remove_group(gid)
|
||||
def remove_user(uid : Int32)
|
||||
remove_user &.uid.==(uid)
|
||||
end
|
||||
|
||||
def remove_user(login : String)
|
||||
remove_user &.login.==(login)
|
||||
end
|
||||
|
||||
def remove_group(&block)
|
||||
new_group = group_as_array.compact_map do |line|
|
||||
group = Group.new line
|
||||
|
||||
if gid == group.gid
|
||||
if yield group
|
||||
nil
|
||||
else
|
||||
line.join ':'
|
||||
@ -244,5 +254,13 @@ class Passwd
|
||||
|
||||
safe_rewrite @group, new_group.join('\n') + '\n'
|
||||
end
|
||||
|
||||
def remove_group(gid : Int32)
|
||||
remove_group &.gid.==(gid)
|
||||
end
|
||||
|
||||
def remove_group(name : String)
|
||||
remove_group &.name.==(name)
|
||||
end
|
||||
end
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user