Class: Puppet::Util::Windows::ADSI::Group
- Inherits:
-
Object
- Object
- Puppet::Util::Windows::ADSI::Group
show all
- Extended by:
- Enumerable, Shared
- Defined in:
- lib/puppet/util/windows.rb,
lib/puppet/util/windows/adsi.rb
Instance Attribute Summary collapse
Class Method Summary
collapse
Instance Method Summary
collapse
Methods included from Shared
get_sids, name_sid_hash, parse_name
Constructor Details
#initialize(name, native_group = nil) ⇒ Group
Returns a new instance of Group.
399
400
401
402
|
# File 'lib/puppet/util/windows/adsi.rb', line 399
def initialize(name, native_group = nil)
@name = name
@native_group = native_group
end
|
Instance Attribute Details
398
399
400
|
# File 'lib/puppet/util/windows/adsi.rb', line 398
def name
@name
end
|
#native_group ⇒ Object
397
398
399
|
# File 'lib/puppet/util/windows/adsi.rb', line 397
def native_group
@native_group
end
|
398
399
400
|
# File 'lib/puppet/util/windows/adsi.rb', line 398
def sid
@sid
end
|
Class Method Details
.create(name) ⇒ Object
480
481
482
483
484
|
# File 'lib/puppet/util/windows/adsi.rb', line 480
def self.create(name)
raise Puppet::Error.new( "Cannot create group if user '#{name}' exists." ) if Puppet::Util::Windows::ADSI::User.exists? name
new(name, Puppet::Util::Windows::ADSI.create(name, 'group'))
end
|
.delete(name) ⇒ Object
508
509
510
|
# File 'lib/puppet/util/windows/adsi.rb', line 508
def self.delete(name)
Puppet::Util::Windows::ADSI.delete(name, 'group')
end
|
.each(&block) ⇒ Object
512
513
514
515
516
517
518
519
520
521
|
# File 'lib/puppet/util/windows/adsi.rb', line 512
def self.each(&block)
wql = Puppet::Util::Windows::ADSI.execquery( 'select name from win32_group where localaccount = "TRUE"' )
groups = []
wql.each do |g|
groups << new(g.name)
end
groups.each(&block)
end
|
.exists?(name_or_sid) ⇒ Boolean
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
|
# File 'lib/puppet/util/windows/adsi.rb', line 486
def self.exists?(name_or_sid)
well_known = false
if (sid = Puppet::Util::Windows::SID.name_to_sid_object(name_or_sid))
return true if sid.account_type == :SidTypeGroup
well_known = sid.account_type == :SidTypeWellKnownGroup
return false if sid.account_type != :SidTypeAlias && !well_known
name_or_sid = "#{sid.domain}\\#{sid.account}"
end
user = Puppet::Util::Windows::ADSI.connect(Group.uri(*Group.parse_name(name_or_sid)))
user.Class == 'Group'
rescue
well_known
end
|
Instance Method Details
#add_member_sids(*sids) ⇒ Object
433
434
435
436
437
|
# File 'lib/puppet/util/windows/adsi.rb', line 433
def add_member_sids(*sids)
sids.each do |sid|
native_group.Add(Puppet::Util::Windows::ADSI.sid_uri(sid))
end
end
|
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
|
# File 'lib/puppet/util/windows/adsi.rb', line 416
def commit
begin
native_group.SetInfo unless native_group.nil?
rescue WIN32OLERuntimeError => e
if e.message =~ /8007089A/m
raise Puppet::Error.new(
"Puppet is not able to create/delete domain groups with the group resource.",
e
)
end
raise Puppet::Error.new( "Group update failed: #{e}", e )
end
self
end
|
#member_sids ⇒ Object
452
453
454
|
# File 'lib/puppet/util/windows/adsi.rb', line 452
def member_sids
self.class.get_sids(native_group.Members)
end
|
445
446
447
448
449
450
|
# File 'lib/puppet/util/windows/adsi.rb', line 445
def members
members = []
native_group.Members.each {|m| members << m.Name}
members
end
|
#remove_member_sids(*sids) ⇒ Object
439
440
441
442
443
|
# File 'lib/puppet/util/windows/adsi.rb', line 439
def remove_member_sids(*sids)
sids.each do |sid|
native_group.Remove(Puppet::Util::Windows::ADSI.sid_uri(sid))
end
end
|
#set_members(desired_members, inclusive = true) ⇒ Object
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
|
# File 'lib/puppet/util/windows/adsi.rb', line 456
def set_members(desired_members, inclusive = true)
return if desired_members.nil?
current_hash = Hash[ self.member_sids.map { |sid| [sid.sid, sid] } ]
desired_hash = self.class.name_sid_hash(desired_members)
if !desired_hash.empty?
members_to_add = (desired_hash.keys - current_hash.keys).map { |sid| desired_hash[sid] }
add_member_sids(*members_to_add)
end
if inclusive
if desired_hash.empty?
members_to_remove = current_hash.values
else
members_to_remove = (current_hash.keys - desired_hash.keys).map { |sid| current_hash[sid] }
end
remove_member_sids(*members_to_remove)
end
end
|
404
405
406
|
# File 'lib/puppet/util/windows/adsi.rb', line 404
def uri
self.class.uri(sid.account, sid.domain)
end
|