diff options
Diffstat (limited to 'lib/puppet/util/posix.rb')
-rwxr-xr-x | lib/puppet/util/posix.rb | 230 |
1 files changed, 115 insertions, 115 deletions
diff --git a/lib/puppet/util/posix.rb b/lib/puppet/util/posix.rb index 6bb94b01f..4cabe24af 100755 --- a/lib/puppet/util/posix.rb +++ b/lib/puppet/util/posix.rb @@ -1,137 +1,137 @@ # Utility methods for interacting with POSIX objects; mostly user and group module Puppet::Util::POSIX - # Retrieve a field from a POSIX Etc object. The id can be either an integer - # or a name. This only works for users and groups. It's also broken on - # some platforms, unfortunately, which is why we fall back to the other - # method search_posix_field in the gid and uid methods if a sanity check - # fails - def get_posix_field(space, field, id) - raise Puppet::DevError, "Did not get id from caller" unless id + # Retrieve a field from a POSIX Etc object. The id can be either an integer + # or a name. This only works for users and groups. It's also broken on + # some platforms, unfortunately, which is why we fall back to the other + # method search_posix_field in the gid and uid methods if a sanity check + # fails + def get_posix_field(space, field, id) + raise Puppet::DevError, "Did not get id from caller" unless id - if id.is_a?(Integer) - if id > Puppet[:maximum_uid].to_i - Puppet.err "Tried to get #{field} field for silly id #{id}" - return nil - end - method = methodbyid(space) - else - method = methodbyname(space) - end + if id.is_a?(Integer) + if id > Puppet[:maximum_uid].to_i + Puppet.err "Tried to get #{field} field for silly id #{id}" + return nil + end + method = methodbyid(space) + else + method = methodbyname(space) + end - begin - return Etc.send(method, id).send(field) - rescue ArgumentError => detail - # ignore it; we couldn't find the object - return nil - end + begin + return Etc.send(method, id).send(field) + rescue ArgumentError => detail + # ignore it; we couldn't find the object + return nil end + end - # A degenerate method of retrieving name/id mappings. The job of this method is - # to retrieve all objects of a certain type, search for a specific entry - # and then return a given field from that entry. - def search_posix_field(type, field, id) - idmethod = idfield(type) - integer = false - if id.is_a?(Integer) - integer = true - if id > Puppet[:maximum_uid].to_i - Puppet.err "Tried to get #{field} field for silly id #{id}" - return nil - end - end + # A degenerate method of retrieving name/id mappings. The job of this method is + # to retrieve all objects of a certain type, search for a specific entry + # and then return a given field from that entry. + def search_posix_field(type, field, id) + idmethod = idfield(type) + integer = false + if id.is_a?(Integer) + integer = true + if id > Puppet[:maximum_uid].to_i + Puppet.err "Tried to get #{field} field for silly id #{id}" + return nil + end + end - Etc.send(type) do |object| - if integer and object.send(idmethod) == id - return object.send(field) - elsif object.name == id - return object.send(field) - end - end + Etc.send(type) do |object| + if integer and object.send(idmethod) == id + return object.send(field) + elsif object.name == id + return object.send(field) + end + end - # Apparently the group/passwd methods need to get reset; if we skip - # this call, then new users aren't found. - case type - when :passwd; Etc.send(:endpwent) - when :group; Etc.send(:endgrent) - end - nil + # Apparently the group/passwd methods need to get reset; if we skip + # this call, then new users aren't found. + case type + when :passwd; Etc.send(:endpwent) + when :group; Etc.send(:endgrent) end + nil + end - # Determine what the field name is for users and groups. - def idfield(space) - case Puppet::Util.symbolize(space) - when :gr, :group; return :gid - when :pw, :user, :passwd; return :uid - else - raise ArgumentError.new("Can only handle users and groups") - end + # Determine what the field name is for users and groups. + def idfield(space) + case Puppet::Util.symbolize(space) + when :gr, :group; return :gid + when :pw, :user, :passwd; return :uid + else + raise ArgumentError.new("Can only handle users and groups") end + end - # Determine what the method is to get users and groups by id - def methodbyid(space) - case Puppet::Util.symbolize(space) - when :gr, :group; return :getgrgid - when :pw, :user, :passwd; return :getpwuid - else - raise ArgumentError.new("Can only handle users and groups") - end + # Determine what the method is to get users and groups by id + def methodbyid(space) + case Puppet::Util.symbolize(space) + when :gr, :group; return :getgrgid + when :pw, :user, :passwd; return :getpwuid + else + raise ArgumentError.new("Can only handle users and groups") end + end - # Determine what the method is to get users and groups by name - def methodbyname(space) - case Puppet::Util.symbolize(space) - when :gr, :group; return :getgrnam - when :pw, :user, :passwd; return :getpwnam - else - raise ArgumentError.new("Can only handle users and groups") - end + # Determine what the method is to get users and groups by name + def methodbyname(space) + case Puppet::Util.symbolize(space) + when :gr, :group; return :getgrnam + when :pw, :user, :passwd; return :getpwnam + else + raise ArgumentError.new("Can only handle users and groups") end + end - # Get the GID of a given group, provided either a GID or a name - def gid(group) - begin - group = Integer(group) - rescue ArgumentError - # pass - end - if group.is_a?(Integer) - return nil unless name = get_posix_field(:group, :name, group) - gid = get_posix_field(:group, :gid, name) - check_value = gid - else - return nil unless gid = get_posix_field(:group, :gid, group) - name = get_posix_field(:group, :name, gid) - check_value = name - end - if check_value != group - return search_posix_field(:group, :gid, group) - else - return gid - end + # Get the GID of a given group, provided either a GID or a name + def gid(group) + begin + group = Integer(group) + rescue ArgumentError + # pass + end + if group.is_a?(Integer) + return nil unless name = get_posix_field(:group, :name, group) + gid = get_posix_field(:group, :gid, name) + check_value = gid + else + return nil unless gid = get_posix_field(:group, :gid, group) + name = get_posix_field(:group, :name, gid) + check_value = name end + if check_value != group + return search_posix_field(:group, :gid, group) + else + return gid + end + end - # Get the UID of a given user, whether a UID or name is provided - def uid(user) - begin - user = Integer(user) - rescue ArgumentError - # pass - end - if user.is_a?(Integer) - return nil unless name = get_posix_field(:passwd, :name, user) - uid = get_posix_field(:passwd, :uid, name) - check_value = uid - else - return nil unless uid = get_posix_field(:passwd, :uid, user) - name = get_posix_field(:passwd, :name, uid) - check_value = name - end - if check_value != user - return search_posix_field(:passwd, :uid, user) - else - return uid - end + # Get the UID of a given user, whether a UID or name is provided + def uid(user) + begin + user = Integer(user) + rescue ArgumentError + # pass + end + if user.is_a?(Integer) + return nil unless name = get_posix_field(:passwd, :name, user) + uid = get_posix_field(:passwd, :uid, name) + check_value = uid + else + return nil unless uid = get_posix_field(:passwd, :uid, user) + name = get_posix_field(:passwd, :name, uid) + check_value = name + end + if check_value != user + return search_posix_field(:passwd, :uid, user) + else + return uid end + end end |