diff --git a/src/group.cr b/src/group.cr index 5ff3ee7..9be4ee9 100644 --- a/src/group.cr +++ b/src/group.cr @@ -1,10 +1,10 @@ require "csv" class Passwd::Group - getter name : String - getter password_hash : String - getter gid : Int32 - getter users = Array(String).new + property name : String + property password_hash : String + property gid : Int32 + property users = Array(String).new def initialize(@name, @password_hash, @gid, @users = [] of String) end diff --git a/src/passwd.cr b/src/passwd.cr index ebc5f0f..4edff69 100644 --- a/src/passwd.cr +++ b/src/passwd.cr @@ -87,6 +87,12 @@ class Passwd end end + def each_group(&block) + group_as_array.each do |line| + yield Passwd::Group.new line + end + end + def get_all_users users = Array(Passwd::User).new @@ -97,6 +103,22 @@ class Passwd users end + def get_group(&block) : Passwd::Group? + each_group do |group| + if yield group + return group + end + end + end + + def get_group(gid : Int32) + get_group &.gid.==(gid) + end + + def get_group(name : String) + get_group &.name.==(name) + end + def get_all_groups groups = Array(Passwd::Group).new @@ -211,6 +233,20 @@ class Passwd File.write @passwd, new_passwd.join("\n") + "\n" end + def mod_group(group : ::Passwd::Group) + new_group = group_as_array.map do |line| + _group = Passwd::Group.new line + + if _group.gid == group.gid + group.to_csv + else + line.join(':') + end + end + + File.write @group, new_group.join('\n') + '\n' + end + private def safe_rewrite(path : String, body : String) tempfile = File.tempfile(File.basename path) tempfile << body diff --git a/src/user.cr b/src/user.cr index 00c4039..1e9c8de 100644 --- a/src/user.cr +++ b/src/user.cr @@ -1,18 +1,18 @@ require "csv" class Passwd::User - getter uid : Int32 - getter gid : Int32 - getter login : String - getter password_hash : String - getter home : String = "/" - getter shell : String = "/bin/nologin" - getter groups = Array(String).new - getter full_name : String? = nil - getter location : String? = nil - getter office_phone_number : String? = nil - getter home_phone_number : String? = nil - getter other_contact : String? = nil + property uid : Int32 + property gid : Int32 + property login : String + property password_hash : String + property home : String = "/" + property shell : String = "/bin/nologin" + property groups = Array(String).new + property full_name : String? = nil + property location : String? = nil + property office_phone_number : String? = nil + property home_phone_number : String? = nil + property other_contact : String? = nil def initialize( @login,