summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStuart Preston <stuart@chef.io>2018-12-14 11:08:04 +0100
committerStuart Preston <stuart@chef.io>2018-12-14 10:10:41 +0000
commit6247d28ac360873a2346fe852dc7fc442fdc92db (patch)
tree4be4e4d61b06112c06f5d7e6d99fe0752ab1ccf8
parent9a3c016feebcb2116a016e1eb8a96427aa581b3e (diff)
downloadchef-sp/chef14-backport-8038.tar.gz
Merge pull request #8038 from MsysTechnologiesllc/Kapil/MSYS-897_allow_setting_the_comment_on_a_Windows_groupsp/chef14-backport-8038
Added property `comment` on Windows group.
-rw-r--r--lib/chef/provider/group/windows.rb1
-rw-r--r--lib/chef/resource/group.rb4
-rw-r--r--lib/chef/util/windows/net_group.rb6
-rw-r--r--lib/chef/win32/api/net.rb16
-rw-r--r--lib/chef/win32/net.rb15
-rw-r--r--spec/unit/provider/group/windows_spec.rb15
-rw-r--r--spec/unit/resource/group_spec.rb17
7 files changed, 74 insertions, 0 deletions
diff --git a/lib/chef/provider/group/windows.rb b/lib/chef/provider/group/windows.rb
index e0cb3b804b..6981c7126e 100644
--- a/lib/chef/provider/group/windows.rb
+++ b/lib/chef/provider/group/windows.rb
@@ -77,6 +77,7 @@ class Chef
else
@net_group.local_set_members(new_resource.members)
end
+ @net_group.local_group_set_info(new_resource.comment) if new_resource.comment
end
def has_current_group_member?(member)
diff --git a/lib/chef/resource/group.rb b/lib/chef/resource/group.rb
index 2f8406faf4..7aaecc1374 100644
--- a/lib/chef/resource/group.rb
+++ b/lib/chef/resource/group.rb
@@ -51,6 +51,10 @@ class Chef
property :non_unique, [ TrueClass, FalseClass ], default: false,
description: "Allow gid duplication. May only be used with the Groupadd provider."
+ property :comment, String,
+ introduced: "14.9",
+ description: "Specifies a comment to associate with the local group."
+
alias_method :users, :members
end
end
diff --git a/lib/chef/util/windows/net_group.rb b/lib/chef/util/windows/net_group.rb
index efe2561bf2..0d2a366c4f 100644
--- a/lib/chef/util/windows/net_group.rb
+++ b/lib/chef/util/windows/net_group.rb
@@ -58,6 +58,12 @@ class Chef::Util::Windows::NetGroup
raise ArgumentError, e
end
+ def local_group_set_info(comment)
+ Chef::ReservedNames::Win32::NetUser.net_local_group_set_info(nil, groupname, comment)
+ rescue Chef::Exceptions::Win32APIError => e
+ raise ArgumentError, e
+ end
+
def local_delete_members(members)
Chef::ReservedNames::Win32::NetUser.net_local_group_del_members(nil, groupname, members)
rescue Chef::Exceptions::Win32APIError => e
diff --git a/lib/chef/win32/api/net.rb b/lib/chef/win32/api/net.rb
index e7c191dd9c..8c624866d4 100644
--- a/lib/chef/win32/api/net.rb
+++ b/lib/chef/win32/api/net.rb
@@ -144,6 +144,11 @@ class Chef
layout :lgrpi0_name, :LPWSTR
end
+ class LOCALGROUP_INFO_1 < FFI::Struct
+ layout :lgrpi1_name, :LPWSTR,
+ :lgrpi1_comment, :LPWSTR
+ end
+
class USE_INFO_2 < FFI::Struct
include StructHelpers
@@ -168,6 +173,17 @@ class Chef
:LPCWSTR, :DWORD, :LPBYTE, :LPDWORD
], :DWORD
+ # NET_API_STATUS NetLocalGroupSetInfo(
+ # _In_ LPCWSTR servername,
+ # _In_ LPCWSTR groupname,
+ # _In_ DWORD level,
+ # _In_ LPBYTE buf,
+ # _Out_ LPDWORD parm_err
+ # );
+ safe_attach_function :NetLocalGroupSetInfo, [
+ :LPCWSTR, :LPCWSTR, :DWORD, :LPBYTE, :LPDWORD
+ ], :DWORD
+
# NET_API_STATUS NetLocalGroupDel(
# _In_ LPCWSTR servername,
# _In_ LPCWSTR groupname
diff --git a/lib/chef/win32/net.rb b/lib/chef/win32/net.rb
index 09db2af89d..06d91e9823 100644
--- a/lib/chef/win32/net.rb
+++ b/lib/chef/win32/net.rb
@@ -180,6 +180,21 @@ class Chef
end
end
+ def self.net_local_group_set_info(server_name, group_name, comment)
+ server_name = wstring(server_name)
+ group_name = wstring(group_name)
+ comment = wstring(comment)
+
+ buf = LOCALGROUP_INFO_1.new
+ buf[:lgrpi1_name] = FFI::MemoryPointer.from_string(group_name)
+ buf[:lgrpi1_comment] = FFI::MemoryPointer.from_string(comment)
+
+ rc = NetLocalGroupSetInfo(server_name, group_name, 1, buf, nil)
+ if rc != NERR_Success
+ Chef::ReservedNames::Win32::Error.raise!(nil, rc)
+ end
+ end
+
def self.net_user_del(server_name, user_name)
server_name = wstring(server_name)
user_name = wstring(user_name)
diff --git a/spec/unit/provider/group/windows_spec.rb b/spec/unit/provider/group/windows_spec.rb
index 51cd3c58d6..61853c90bd 100644
--- a/spec/unit/provider/group/windows_spec.rb
+++ b/spec/unit/provider/group/windows_spec.rb
@@ -49,6 +49,7 @@ describe Chef::Provider::Group::Windows do
describe "manage_group" do
before do
@new_resource.members([ "us" ])
+ @new_resource.comment = "this is group comment"
@current_resource = Chef::Resource::Group.new("staff")
@current_resource.members %w{all your base}
@new_resource.excluded_members %w{all}
@@ -57,6 +58,7 @@ describe Chef::Provider::Group::Windows do
allow(@net_group).to receive(:local_add_members)
allow(@net_group).to receive(:local_set_members)
allow(@provider).to receive(:lookup_account_name)
+ allow(@net_group).to receive(:local_group_set_info)
allow(@provider).to receive(:validate_member!).and_return(true)
@provider.current_resource = @current_resource
end
@@ -73,6 +75,19 @@ describe Chef::Provider::Group::Windows do
@provider.manage_group
end
+ it "when comment is present, should call @net_group.local_group_set_info" do
+ @new_resource.append(true)
+ expect(@net_group).to receive(:local_group_set_info).with(@new_resource.comment)
+ @provider.manage_group
+ end
+
+ it "when comment is not present, should not call @net_group.local_group_set_info" do
+ @new_resource.comment = nil
+ @new_resource.append(true)
+ expect(@net_group).not_to receive(:local_group_set_info).with(@new_resource.comment)
+ @provider.manage_group
+ end
+
it "should call @net_group.local_delete_members" do
@new_resource.append(true)
allow(@provider).to receive(:lookup_account_name).with("all").and_return("all")
diff --git a/spec/unit/resource/group_spec.rb b/spec/unit/resource/group_spec.rb
index 60f72b6785..6d9df79299 100644
--- a/spec/unit/resource/group_spec.rb
+++ b/spec/unit/resource/group_spec.rb
@@ -49,6 +49,10 @@ describe Chef::Resource::Group, "initialize" do
expect(resource.members).to eql([])
end
+ it "defaults comment to be nil" do
+ expect(resource.comment).to eql(nil)
+ end
+
it "aliases users to members, also an empty array" do
expect(resource.users).to eql([])
end
@@ -146,3 +150,16 @@ describe Chef::Resource::Group, "append" do
end
end
end
+
+describe Chef::Resource::Group, "comment" do
+ let(:resource) { Chef::Resource::Group.new("fakey_fakerton") }
+
+ it "allows an string" do
+ resource.comment "this is a group comment"
+ expect(resource.comment).to eql("this is a group comment")
+ end
+
+ it "does not allow a hash" do
+ expect { resource.send(:comment, { some_other_user: "is freakin awesome" }) }.to raise_error(ArgumentError)
+ end
+end