summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJay Mundrawala <jdmundrawala@gmail.com>2015-07-30 08:02:55 -0700
committerJay Mundrawala <jdmundrawala@gmail.com>2015-07-30 08:02:55 -0700
commitf1ca00c684cb06b0792a71579526a508e5ecb408 (patch)
treec5b7570e659ab4a924bde2c44b1043dd64ded327
parentd03b97177b1a7dcf9e895f6ca74ec63f8b71f158 (diff)
downloadchef-f1ca00c684cb06b0792a71579526a508e5ecb408.tar.gz
FFYify NetLocalGroupAddMembers
-rw-r--r--lib/chef/util/windows/net_group.rb6
-rw-r--r--lib/chef/win32/net.rb22
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