class Puppet::Util::Windows::ADSI::Group

Attributes

name[R]
native_group[RW]
sid[R]

Public Instance Methods

add_member(*names) click to toggle source
Alias for: add_members
add_member_sids(*sids) click to toggle source
# File lib/puppet/util/windows/adsi.rb, line 382
def add_member_sids(*sids)
  sids.each do |sid|
    native_group.Add(Puppet::Util::Windows::ADSI.sid_uri(sid))
  end
end
add_members(*names) click to toggle source
# File lib/puppet/util/windows/adsi.rb, line 368
def add_members(*names)
  Puppet.deprecation_warning('Puppet::Util::Windows::ADSI::Group#add_members is deprecated; please use Puppet::Util::Windows::ADSI::Group#add_member_sids')
  sids = self.class.name_sid_hash(names)
  add_member_sids(*sids.values)
end
Also aliased as: add_member
commit() click to toggle source
# File lib/puppet/util/windows/adsi.rb, line 339
def commit
  begin
    native_group.SetInfo unless native_group.nil?
  rescue WIN32OLERuntimeError => e
    # ERROR_BAD_USERNAME 2202L from winerror.h
    if e.message =~ /8007089A/
      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() click to toggle source
# File lib/puppet/util/windows/adsi.rb, line 401
def member_sids
  sids = []
  native_group.Members.each do |m|
    sids << Puppet::Util::Windows::SID.octet_string_to_sid_object(m.objectSID)
  end
  sids
end
members() click to toggle source
# File lib/puppet/util/windows/adsi.rb, line 394
def members
  # WIN32OLE objects aren't enumerable, so no map
  members = []
  native_group.Members.each {|m| members << m.Name}
  members
end
remove_member(*names) click to toggle source
Alias for: remove_members
remove_member_sids(*sids) click to toggle source
# File lib/puppet/util/windows/adsi.rb, line 388
def remove_member_sids(*sids)
  sids.each do |sid|
    native_group.Remove(Puppet::Util::Windows::ADSI.sid_uri(sid))
  end
end
remove_members(*names) click to toggle source
# File lib/puppet/util/windows/adsi.rb, line 375
def remove_members(*names)
  Puppet.deprecation_warning('Puppet::Util::Windows::ADSI::Group#remove_members is deprecated; please use Puppet::Util::Windows::ADSI::Group#remove_member_sids')
  sids = self.class.name_sid_hash(names)
  remove_member_sids(*sids.values)
end
Also aliased as: remove_member
set_members(desired_members, inclusive = true) click to toggle source
# File lib/puppet/util/windows/adsi.rb, line 409
def set_members(desired_members, inclusive = true)
  return if desired_members.nil?

  current_hash = Hash[ self.member_sids.map { |sid| [sid.to_s, sid] } ]
  desired_hash = self.class.name_sid_hash(desired_members)

  # First we add all missing 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

  # Then we remove all extra members if inclusive
  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
uri() click to toggle source
# File lib/puppet/util/windows/adsi.rb, line 321
def uri
  self.class.uri(name)
end

Public Class Methods

create(name) click to toggle source
# File lib/puppet/util/windows/adsi.rb, line 433
def self.create(name)
  # Windows error 2224: The account already exists.
  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) click to toggle source
# File lib/puppet/util/windows/adsi.rb, line 443
def self.delete(name)
  Puppet::Util::Windows::ADSI.delete(name, 'group')
end
each(&block) click to toggle source
# File lib/puppet/util/windows/adsi.rb, line 447
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) click to toggle source
# File lib/puppet/util/windows/adsi.rb, line 439
def self.exists?(name)
  Puppet::Util::Windows::ADSI.connectable?(Group.uri(name))
end
name_sid_hash(names) click to toggle source
# File lib/puppet/util/windows/adsi.rb, line 356
def self.name_sid_hash(names)
  return [] if names.nil? or names.empty?

  sids = names.map do |name|
    sid = Puppet::Util::Windows::SID.name_to_sid_object(name)
    raise Puppet::Error.new( "Could not resolve username: #{name}" ) if !sid
    [sid.to_s, sid]
  end

  Hash[ sids ]
end
new(name, native_group = nil) click to toggle source
# File lib/puppet/util/windows/adsi.rb, line 316
def initialize(name, native_group = nil)
  @name = name
  @native_group = native_group
end
uri(name, host = '.') click to toggle source
# File lib/puppet/util/windows/adsi.rb, line 325
def self.uri(name, host = '.')
  if sid_uri = Puppet::Util::Windows::ADSI.sid_uri_safe(name) then return sid_uri end

  Puppet::Util::Windows::ADSI.uri(name, 'group', host)
end