Class: Chef::Util::Windows::NetGroup
- Inherits:
-
Chef::Util::Windows
- Object
- Chef::Util::Windows
- Chef::Util::Windows::NetGroup
- Defined in:
- lib/chef/util/windows/net_group.rb
Overview
wrapper around a subset of the NetGroup* APIs. nothing Chef specific, but not complete enough to be its own gem, so util for now.
Instance Method Summary collapse
-
#initialize(groupname) ⇒ NetGroup
constructor
A new instance of NetGroup.
- #local_add ⇒ Object
- #local_add_members(members) ⇒ Object
- #local_delete ⇒ Object
- #local_delete_members(members) ⇒ Object
- #local_get_members ⇒ Object
- #local_set_members(members) ⇒ Object
Constructor Details
#initialize(groupname) ⇒ NetGroup
Returns a new instance of NetGroup.
44 45 46 |
# File 'lib/chef/util/windows/net_group.rb', line 44 def initialize(groupname) @name = multi_to_wide(groupname) end |
Instance Method Details
#local_add ⇒ Object
81 82 83 84 85 86 |
# File 'lib/chef/util/windows/net_group.rb', line 81 def local_add rc = NetLocalGroupAdd.call(nil, 0, pack_str(@name), nil) if rc != NERR_Success raise ArgumentError, get_last_error(rc) end end |
#local_add_members(members) ⇒ Object
92 93 94 |
# File 'lib/chef/util/windows/net_group.rb', line 92 def local_add_members(members) modify_members(members, NetLocalGroupAddMembers) end |
#local_delete ⇒ Object
100 101 102 103 104 105 |
# File 'lib/chef/util/windows/net_group.rb', line 100 def local_delete rc = NetLocalGroupDel.call(nil, @name) if rc != NERR_Success raise ArgumentError, get_last_error(rc) end end |
#local_delete_members(members) ⇒ Object
96 97 98 |
# File 'lib/chef/util/windows/net_group.rb', line 96 def local_delete_members(members) modify_members(members, NetLocalGroupDelMembers) end |
#local_get_members ⇒ Object
48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
# File 'lib/chef/util/windows/net_group.rb', line 48 def local_get_members group_members = [] handle = 0.chr * PTR_SIZE rc = ERROR_MORE_DATA while rc == ERROR_MORE_DATA ptr = 0.chr * PTR_SIZE nread = 0.chr * PTR_SIZE total = 0.chr * PTR_SIZE rc = NetLocalGroupGetMembers.call(nil, @name, 0, ptr, -1, nread, total, handle) if (rc == NERR_Success) || (rc == ERROR_MORE_DATA) ptr = ptr.unpack('L')[0] nread = nread.unpack('i')[0] members = 0.chr * (nread * PTR_SIZE ) #nread * sizeof(LOCALGROUP_MEMBERS_INFO_0) memcpy(members, ptr, members.size) # 1 pointer field in LOCALGROUP_MEMBERS_INFO_0, offset 0 is lgrmi0_sid nread.times do |i| sid_address = members[i * PTR_SIZE, PTR_SIZE].unpack('L')[0] sid_ptr = FFI::Pointer.new(sid_address) member_sid = Chef::ReservedNames::Win32::Security::SID.new(sid_ptr) group_members << member_sid.to_s end NetApiBufferFree(ptr) else raise ArgumentError, get_last_error(rc) end end group_members end |
#local_set_members(members) ⇒ Object
88 89 90 |
# File 'lib/chef/util/windows/net_group.rb', line 88 def local_set_members(members) modify_members(members, NetLocalGroupSetMembers) end |