Fixes #4312 for older versions of usermod which do not have --append
This commit is contained in:
parent
119b6d73dd
commit
e3849f1be7
1 changed files with 28 additions and 3 deletions
|
@ -313,9 +313,28 @@ class User(object):
|
||||||
return self.execute_command(cmd)
|
return self.execute_command(cmd)
|
||||||
|
|
||||||
|
|
||||||
|
def _check_usermod_append(self):
|
||||||
|
# check if this version of usermod can append groups
|
||||||
|
|
||||||
|
cmd = [self.module.get_bin_path('usermod', True)]
|
||||||
|
cmd.append('--help')
|
||||||
|
rc, data1, data2 = self.execute_command(cmd)
|
||||||
|
helpout = data1 + data2
|
||||||
|
|
||||||
|
# check if --append exists
|
||||||
|
lines = helpout.split('\n')
|
||||||
|
for line in lines:
|
||||||
|
if line.strip().startswith('-a, --append'):
|
||||||
|
return True
|
||||||
|
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def modify_user_usermod(self):
|
def modify_user_usermod(self):
|
||||||
cmd = [self.module.get_bin_path('usermod', True)]
|
cmd = [self.module.get_bin_path('usermod', True)]
|
||||||
info = self.user_info()
|
info = self.user_info()
|
||||||
|
has_append = self._check_usermod_append()
|
||||||
|
|
||||||
if self.uid is not None and info[2] != int(self.uid):
|
if self.uid is not None and info[2] != int(self.uid):
|
||||||
cmd.append('-u')
|
cmd.append('-u')
|
||||||
|
@ -348,15 +367,21 @@ class User(object):
|
||||||
if self.append:
|
if self.append:
|
||||||
for g in groups:
|
for g in groups:
|
||||||
if g in group_diff:
|
if g in group_diff:
|
||||||
cmd.append('-a')
|
if has_append:
|
||||||
|
cmd.append('-a')
|
||||||
groups_need_mod = True
|
groups_need_mod = True
|
||||||
break
|
break
|
||||||
else:
|
else:
|
||||||
groups_need_mod = True
|
groups_need_mod = True
|
||||||
|
|
||||||
if groups_need_mod:
|
if groups_need_mod:
|
||||||
cmd.append('-G')
|
if self.append and not has_append:
|
||||||
cmd.append(','.join(groups))
|
cmd.append('-A')
|
||||||
|
cmd.append(','.join(group_diff))
|
||||||
|
else:
|
||||||
|
cmd.append('-G')
|
||||||
|
cmd.append(','.join(groups))
|
||||||
|
|
||||||
|
|
||||||
if self.comment is not None and info[4] != self.comment:
|
if self.comment is not None and info[4] != self.comment:
|
||||||
cmd.append('-c')
|
cmd.append('-c')
|
||||||
|
|
Loading…
Reference in a new issue