diff options
author | Jay Mundrawala <jdmundrawala@gmail.com> | 2015-07-30 08:02:55 -0700 |
---|---|---|
committer | Jay Mundrawala <jdmundrawala@gmail.com> | 2015-07-30 08:02:55 -0700 |
commit | f1ca00c684cb06b0792a71579526a508e5ecb408 (patch) | |
tree | c5b7570e659ab4a924bde2c44b1043dd64ded327 /lib | |
parent | d03b97177b1a7dcf9e895f6ca74ec63f8b71f158 (diff) | |
download | chef-f1ca00c684cb06b0792a71579526a508e5ecb408.tar.gz |
FFYify NetLocalGroupAddMembers
Diffstat (limited to 'lib')
-rw-r--r-- | lib/chef/util/windows/net_group.rb | 6 | ||||
-rw-r--r-- | lib/chef/win32/net.rb | 22 |
2 files changed, 27 insertions, 1 deletions
diff --git a/lib/chef/util/windows/net_group.rb b/lib/chef/util/windows/net_group.rb index 43e7484457..f9acf783cc 100644 --- a/lib/chef/util/windows/net_group.rb +++ b/lib/chef/util/windows/net_group.rb @@ -68,7 +68,11 @@ class Chef::Util::Windows::NetGroup < Chef::Util::Windows end
def local_add_members(members)
- modify_members(members, NetLocalGroupAddMembers)
+ begin
+ Chef::ReservedNames::Win32::NetUser::net_local_group_add_members(nil, @groupname, members)
+ rescue Chef::Exceptions::Win32NetAPIError => e
+ raise ArgumentError, e.msg
+ end
end
def local_delete_members(members)
diff --git a/lib/chef/win32/net.rb b/lib/chef/win32/net.rb index 8c3ddc5a57..afbe9f6ebf 100644 --- a/lib/chef/win32/net.rb +++ b/lib/chef/win32/net.rb @@ -238,6 +238,28 @@ END end end + def self.members_to_lgrmi3(members) + buf = FFI::MemoryPointer.new(LOCALGROUP_MEMBERS_INFO_3, members.size) + members.size.times.collect do |i| + member_info = LOCALGROUP_MEMBERS_INFO_3.new( + buf + i * LOCALGROUP_MEMBERS_INFO_3.size) + member_info[:lgrmi3_domainandname] = FFI::MemoryPointer.from_string(wstring(members[i])) + member_info + end + end + + def self.net_local_group_add_members(server_name, group_name, members) + server_name = wstring(server_name) + group_name = wstring(group_name) + + lgrmi3s = members_to_lgrmi3(members) + rc = NetLocalGroupAddMembers( + server_name, group_name, 3, lgrmi3s[0], members.size) + + if rc != NERR_Success + net_api_error!(rc) + end + end end end end |