Class: Puppet::Util::ADSI::User
- Extended by:
- Enumerable
- Defined in:
- lib/puppet/util/adsi.rb
Instance Attribute Summary collapse
- #name ⇒ Object readonly
- #native_user ⇒ Object
- #sid ⇒ Object readonly
Class Method Summary collapse
- .create(name) ⇒ Object
- .delete(name) ⇒ Object
- .each(&block) ⇒ Object
- .exists?(name) ⇒ Boolean
- .logon(name, password) ⇒ Object
- .parse_name(name) ⇒ Object
- .uri(name, host = '.') ⇒ Object
Instance Method Summary collapse
- #[](attribute) ⇒ Object
- #[]=(attribute, value) ⇒ Object
- #add_flag(flag_name, value) ⇒ Object
- #add_to_groups(*group_names) ⇒ Object (also: #add_to_group)
- #commit ⇒ Object
- #groups ⇒ Object
-
#initialize(name, native_user = nil) ⇒ User
constructor
A new instance of User.
- #password=(password) ⇒ Object
- #password_is?(password) ⇒ Boolean
- #remove_from_groups(*group_names) ⇒ Object (also: #remove_from_group)
- #set_groups(desired_groups, minimum = true) ⇒ Object
- #uri ⇒ Object
Constructor Details
#initialize(name, native_user = nil) ⇒ User
Returns a new instance of User.
85 86 87 88 |
# File 'lib/puppet/util/adsi.rb', line 85 def initialize(name, native_user = nil) @name = name @native_user = native_user end |
Instance Attribute Details
#native_user ⇒ Object
83 84 85 |
# File 'lib/puppet/util/adsi.rb', line 83 def native_user @native_user end |
Class Method Details
.create(name) ⇒ Object
200 201 202 203 204 |
# File 'lib/puppet/util/adsi.rb', line 200 def self.create(name) # Windows error 1379: The specified local group already exists. raise Puppet::Error.new( "Cannot create user if group '#{name}' exists." ) if Puppet::Util::ADSI::Group.exists? name new(name, Puppet::Util::ADSI.create(name, 'user')) end |
.delete(name) ⇒ Object
210 211 212 |
# File 'lib/puppet/util/adsi.rb', line 210 def self.delete(name) Puppet::Util::ADSI.delete(name, 'user') end |
.each(&block) ⇒ Object
214 215 216 217 218 219 220 221 222 223 |
# File 'lib/puppet/util/adsi.rb', line 214 def self.each(&block) wql = Puppet::Util::ADSI.execquery('select name from win32_useraccount where localaccount = "TRUE"') users = [] wql.each do |u| users << new(u.name) end users.each(&block) end |
.exists?(name) ⇒ Boolean
206 207 208 |
# File 'lib/puppet/util/adsi.rb', line 206 def self.exists?(name) Puppet::Util::ADSI::connectable?(User.uri(*User.parse_name(name))) end |
.logon(name, password) ⇒ Object
122 123 124 |
# File 'lib/puppet/util/adsi.rb', line 122 def self.logon(name, password) Puppet::Util::Windows::User.password_is?(name, password) end |
.parse_name(name) ⇒ Object
90 91 92 93 94 95 96 97 98 99 100 |
# File 'lib/puppet/util/adsi.rb', line 90 def self.parse_name(name) if name =~ /\// raise Puppet::Error.new( "Value must be in DOMAIN\\user style syntax" ) end matches = name.scan(/((.*)\\)?(.*)/) domain = matches[0][1] || '.' account = matches[0][2] return account, domain end |
.uri(name, host = '.') ⇒ Object
110 111 112 113 114 115 116 |
# File 'lib/puppet/util/adsi.rb', line 110 def self.uri(name, host = '.') if sid_uri = Puppet::Util::ADSI.sid_uri_safe(name) then return sid_uri end host = '.' if ['NT AUTHORITY', 'BUILTIN', Socket.gethostname].include?(host) Puppet::Util::ADSI.uri(name, 'user', host) end |
Instance Method Details
#[](attribute) ⇒ Object
126 127 128 |
# File 'lib/puppet/util/adsi.rb', line 126 def [](attribute) native_user.Get(attribute) end |
#[]=(attribute, value) ⇒ Object
130 131 132 |
# File 'lib/puppet/util/adsi.rb', line 130 def []=(attribute, value) native_user.Put(attribute, value) end |
#add_flag(flag_name, value) ⇒ Object
147 148 149 150 151 152 153 |
# File 'lib/puppet/util/adsi.rb', line 147 def add_flag(flag_name, value) flag = native_user.Get(flag_name) rescue 0 native_user.Put(flag_name, flag | value) commit end |
#add_to_groups(*group_names) ⇒ Object Also known as: add_to_group
169 170 171 172 173 |
# File 'lib/puppet/util/adsi.rb', line 169 def add_to_groups(*group_names) group_names.each do |group_name| Puppet::Util::ADSI::Group.new(group_name).add_member_sids(sid) end end |
#commit ⇒ Object
134 135 136 137 138 139 140 141 |
# File 'lib/puppet/util/adsi.rb', line 134 def commit begin native_user.SetInfo unless native_user.nil? rescue Exception => e raise Puppet::Error.new( "User update failed: #{e}", e ) end self end |
#groups ⇒ Object
162 163 164 165 166 167 |
# File 'lib/puppet/util/adsi.rb', line 162 def groups # WIN32OLE objects aren't enumerable, so no map groups = [] native_user.Groups.each {|g| groups << g.Name} rescue nil groups end |
#password=(password) ⇒ Object
155 156 157 158 159 160 |
# File 'lib/puppet/util/adsi.rb', line 155 def password=(password) native_user.SetPassword(password) commit fADS_UF_DONT_EXPIRE_PASSWD = 0x10000 add_flag("UserFlags", fADS_UF_DONT_EXPIRE_PASSWD) end |
#password_is?(password) ⇒ Boolean
143 144 145 |
# File 'lib/puppet/util/adsi.rb', line 143 def password_is?(password) self.class.logon(name, password) end |
#remove_from_groups(*group_names) ⇒ Object Also known as: remove_from_group
176 177 178 179 180 |
# File 'lib/puppet/util/adsi.rb', line 176 def remove_from_groups(*group_names) group_names.each do |group_name| Puppet::Util::ADSI::Group.new(group_name).remove_member_sids(sid) end end |
#set_groups(desired_groups, minimum = true) ⇒ Object
183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 |
# File 'lib/puppet/util/adsi.rb', line 183 def set_groups(desired_groups, minimum = true) return if desired_groups.nil? or desired_groups.empty? desired_groups = desired_groups.split(',').map(&:strip) current_groups = self.groups # First we add the user to all the groups it should be in but isn't groups_to_add = desired_groups - current_groups add_to_groups(*groups_to_add) # Then we remove the user from all groups it is in but shouldn't be, if # that's been requested groups_to_remove = current_groups - desired_groups remove_from_groups(*groups_to_remove) unless minimum end |
#uri ⇒ Object
118 119 120 |
# File 'lib/puppet/util/adsi.rb', line 118 def uri self.class.uri(sid.account, sid.domain) end |