Skip to content

Commit 8256d3b

Browse files
(PUP-12041) Handle libuser's unavailability in Fedora 40
- Starting from version 40, Fedora does not have the lgroup* commands available due to deprecation of libuser. - groupadd relies on libuser to add members to groups. - Add manages_members feature to Fedora 40 and above since groupmod can add members to groups. - Handle flags for lgroupmod (-M) and groupmod (-aU) commands properly. - Only use lgroup* commands if libuser is supported.
1 parent ca922ca commit 8256d3b

File tree

1 file changed

+17
-6
lines changed

1 file changed

+17
-6
lines changed

lib/puppet/provider/group/groupadd.rb

+17-6
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,18 @@
1919

2020
optional_commands :localadd => "lgroupadd", :localdelete => "lgroupdel", :localmodify => "lgroupmod"
2121

22-
has_feature :manages_local_users_and_groups, :manages_members if Puppet.features.libuser?
23-
24-
options :members, :flag => '-M', :method => :mem
22+
has_feature :manages_local_users_and_groups if Puppet.features.libuser?
23+
has_feature :manages_members if Puppet.features.libuser? ||
24+
(Puppet.runtime[:facter].value('os.name') == "Fedora" &&
25+
Puppet.runtime[:facter].value('os.release.major').to_i >= 40)
26+
27+
# Libuser's modify command 'lgroupmod' requires '-M' flag for member additions.
28+
# 'groupmod' command requires the '-aU' flags for it.
29+
if Puppet.features.libuser?
30+
options :members, :flag => '-M', :method => :mem
31+
else
32+
options :members, :flag => '-aU', :method => :mem
33+
end
2534

2635
def exists?
2736
return !!localgid if @resource.forcelocal?
@@ -63,7 +72,7 @@ def create
6372
end
6473

6574
def addcmd
66-
if @resource.forcelocal?
75+
if Puppet.features.libuser? && @resource.forcelocal?
6776
cmd = [command(:localadd)]
6877
@custom_environment = Puppet::Util::Libuser.getenv
6978
else
@@ -91,7 +100,8 @@ def validate_members(members)
91100
end
92101

93102
def modifycmd(param, value)
94-
if @resource.forcelocal? || @resource[:members]
103+
# The localmodify command (lgroupmod) must only be called when libuser is supported.
104+
if Puppet.features.libuser? and (@resource.forcelocal? || @resource[:members])
95105
cmd = [command(:localmodify)]
96106
@custom_environment = Puppet::Util::Libuser.getenv
97107
else
@@ -114,7 +124,8 @@ def modifycmd(param, value)
114124
end
115125

116126
def deletecmd
117-
if @resource.forcelocal?
127+
# The localdelete command (lgroupdel) must only be called when libuser is supported.
128+
if Puppet.features.libuser? && @resource.forcelocal?
118129
@custom_environment = Puppet::Util::Libuser.getenv
119130
[command(:localdelete), @resource[:name]]
120131
else

0 commit comments

Comments
 (0)