Module: Puppet::Util::POSIX
- Included in:
- Puppet::Util
- Defined in:
- lib/puppet/util/posix.rb
Overview
Utility methods for interacting with POSIX objects; mostly user and group
Constant Summary collapse
- LOCALE_ENV_VARS =
This is a list of environment variables that we will set when we want to override the POSIX locale
['LANG', 'LC_ALL', 'LC_MESSAGES', 'LANGUAGE', 'LC_COLLATE', 'LC_CTYPE', 'LC_MONETARY', 'LC_NUMERIC', 'LC_TIME']
- USER_ENV_VARS =
This is a list of user-related environment variables that we will unset when we want to provide a pristine environment for “exec” runs
['HOME', 'USER', 'LOGNAME']
Class Method Summary collapse
-
.groups_of(user) ⇒ Object
Returns an array of all the groups that the user’s a member of.
Instance Method Summary collapse
-
#get_posix_field(space, field, id) ⇒ Object
Retrieve a field from a POSIX Etc object.
-
#gid(group) ⇒ Object
Get the GID.
-
#idfield(space) ⇒ Object
Determine what the field name is for users and groups.
-
#methodbyid(space) ⇒ Object
Determine what the method is to get users and groups by id.
-
#methodbyname(space) ⇒ Object
Determine what the method is to get users and groups by name.
-
#search_posix_field(type, field, id) ⇒ Object
A degenerate method of retrieving name/id mappings.
-
#uid(user) ⇒ Object
Get the UID.
Class Method Details
.groups_of(user) ⇒ Object
Returns an array of all the groups that the user’s a member of.
14 15 16 17 18 19 20 21 22 23 24 25 26 |
# File 'lib/puppet/util/posix.rb', line 14 def groups_of(user) groups = [] Puppet::Etc.group do |group| groups << group.name if group.mem.include?(user) end uniq_groups = groups.uniq if uniq_groups != groups Puppet.debug(_('Removing any duplicate group entries')) end uniq_groups end |
Instance Method Details
#get_posix_field(space, field, id) ⇒ Object
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
34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
# File 'lib/puppet/util/posix.rb', line 34 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}") % { field: field, id: id } return nil end method = methodbyid(space) else method = methodbyname(space) end begin return Etc.send(method, id).send(field) rescue NoMethodError, ArgumentError # ignore it; we couldn't find the object return nil end end |
#gid(group) ⇒ Object
Get the GID
117 118 119 |
# File 'lib/puppet/util/posix.rb', line 117 def gid(group) get_posix_value(:group, :gid, group) end |
#idfield(space) ⇒ Object
Determine what the field name is for users and groups.
87 88 89 90 91 92 93 94 |
# File 'lib/puppet/util/posix.rb', line 87 def idfield(space) case space.intern when :gr, :group; return :gid when :pw, :user, :passwd; return :uid else raise ArgumentError.new(_("Can only handle users and groups")) end end |
#methodbyid(space) ⇒ Object
Determine what the method is to get users and groups by id
97 98 99 100 101 102 103 104 |
# File 'lib/puppet/util/posix.rb', line 97 def methodbyid(space) case space.intern when :gr, :group; return :getgrgid when :pw, :user, :passwd; return :getpwuid else raise ArgumentError.new(_("Can only handle users and groups")) end end |
#methodbyname(space) ⇒ Object
Determine what the method is to get users and groups by name
107 108 109 110 111 112 113 114 |
# File 'lib/puppet/util/posix.rb', line 107 def methodbyname(space) case space.intern when :gr, :group; return :getgrnam when :pw, :user, :passwd; return :getpwnam else raise ArgumentError.new(_("Can only handle users and groups")) end end |
#search_posix_field(type, field, id) ⇒ Object
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.
58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 |
# File 'lib/puppet/util/posix.rb', line 58 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}") % { field: field, 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 # 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 |
#uid(user) ⇒ Object
Get the UID
122 123 124 |
# File 'lib/puppet/util/posix.rb', line 122 def uid(user) get_posix_value(:passwd, :uid, user) end |