diff options
author | Jay Mundrawala <jdmundrawala@gmail.com> | 2015-07-29 15:39:25 -0700 |
---|---|---|
committer | Jay Mundrawala <jdmundrawala@gmail.com> | 2015-07-29 15:39:25 -0700 |
commit | d03b97177b1a7dcf9e895f6ca74ec63f8b71f158 (patch) | |
tree | bea64f2826782b3eb844a25196e99a5b83020416 /lib/chef/util | |
parent | 3519f13ad7cb7bb582198185cb0bc470330fb866 (diff) | |
download | chef-d03b97177b1a7dcf9e895f6ca74ec63f8b71f158.tar.gz |
FFIify NetLocalGroupGetMembers
Diffstat (limited to 'lib/chef/util')
-rw-r--r-- | lib/chef/util/windows/net_group.rb | 33 |
1 files changed, 4 insertions, 29 deletions
diff --git a/lib/chef/util/windows/net_group.rb b/lib/chef/util/windows/net_group.rb index 30c32cbc65..43e7484457 100644 --- a/lib/chef/util/windows/net_group.rb +++ b/lib/chef/util/windows/net_group.rb @@ -48,36 +48,11 @@ class Chef::Util::Windows::NetGroup < Chef::Util::Windows end
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
+ begin
+ Chef::ReservedNames::Win32::NetUser::net_local_group_get_members(nil, @groupname)
+ rescue Chef::Exceptions::Win32NetAPIError => e
+ raise ArgumentError, e.msg
end
- group_members
end
def local_add
|