15
15
value . is_a? Integer
16
16
end
17
17
18
- optional_commands :localadd => "lgroupadd" , :localdelete => "lgroupdel" , :localmodify => "lgroupmod"
19
-
20
- has_feature :manages_local_users_and_groups , :manages_members if Puppet . features . libuser?
21
-
22
- options :members , :flag => '-M' , :method => :mem
18
+ optional_commands :localadd => "lgroupadd" , :localdelete => "lgroupdel" , :localmodify => "lgroupmod" , :purgemember => "usermod"
19
+
20
+ has_feature :manages_local_users_and_groups if Puppet . features . libuser?
21
+ has_feature :manages_members if Puppet . features . libuser? ||
22
+ ( Puppet . runtime [ :facter ] . value ( 'os.name' ) == "Fedora" &&
23
+ Puppet . runtime [ :facter ] . value ( 'os.release.major' ) . to_i >= 40 )
24
+
25
+ # Libuser's modify command 'lgroupmod' requires '-M' flag for member additions.
26
+ # 'groupmod' command requires the '-aU' flags for it.
27
+ if Puppet . features . libuser?
28
+ options :members , :flag => '-M' , :method => :mem
29
+ else
30
+ options :members , :flag => '-aU' , :method => :mem
31
+ end
23
32
24
33
def exists?
25
34
return !!localgid if @resource . forcelocal?
@@ -58,7 +67,8 @@ def create
58
67
end
59
68
60
69
def addcmd
61
- if @resource . forcelocal?
70
+ # The localadd command (lgroupadd) must only be called when libuser is supported.
71
+ if Puppet . features . libuser? && @resource . forcelocal?
62
72
cmd = [ command ( :localadd ) ]
63
73
@custom_environment = Puppet ::Util ::Libuser . getenv
64
74
else
@@ -86,7 +96,8 @@ def validate_members(members)
86
96
end
87
97
88
98
def modifycmd ( param , value )
89
- if @resource . forcelocal? || @resource [ :members ]
99
+ # The localmodify command (lgroupmod) must only be called when libuser is supported.
100
+ if Puppet . features . libuser? && ( @resource . forcelocal? || @resource [ :members ] )
90
101
cmd = [ command ( :localmodify ) ]
91
102
@custom_environment = Puppet ::Util ::Libuser . getenv
92
103
else
@@ -109,7 +120,8 @@ def modifycmd(param, value)
109
120
end
110
121
111
122
def deletecmd
112
- if @resource . forcelocal?
123
+ # The localdelete command (lgroupdel) must only be called when libuser is supported.
124
+ if Puppet . features . libuser? && @resource . forcelocal?
113
125
@custom_environment = Puppet ::Util ::Libuser . getenv
114
126
[ command ( :localdelete ) , @resource [ :name ] ]
115
127
else
@@ -127,7 +139,16 @@ def members_to_s(current)
127
139
end
128
140
129
141
def purge_members
130
- localmodify ( '-m' , members_to_s ( members ) , @resource . name )
142
+ # The groupadd provider doesn't have the ability currently to remove members from a group, libuser does.
143
+ # Use libuser's lgroupmod command to achieve purging members if libuser is supported.
144
+ # Otherwise use the 'usermod' command.
145
+ if Puppet . features . libuser?
146
+ localmodify ( '-m' , members_to_s ( members ) , @resource . name )
147
+ else
148
+ members . each do |member |
149
+ purgemember ( '-rG' , @resource . name , member )
150
+ end
151
+ end
131
152
end
132
153
133
154
private
0 commit comments