Update file module to not recurse when setting ownership
This updates set_owner_if_different() and set_group_if_different() to not implicitly recurse when setting ownership (whether user or group). It drops the os.system() call and replaces it with os.chown(). Resolves issue #825. The recursion should be explicit. A recurse=yes|no option should be added to the file module.
This commit is contained in:
parent
310c4b5eff
commit
352f8339ea
1 changed files with 14 additions and 4 deletions
18
file
18
file
|
@ -161,8 +161,13 @@ def set_owner_if_different(path, owner, changed):
|
||||||
return changed
|
return changed
|
||||||
user, group = user_and_group(path)
|
user, group = user_and_group(path)
|
||||||
if owner != user:
|
if owner != user:
|
||||||
rc = os.system("/bin/chown -R %s %s 2>/dev/null" % (owner, path))
|
try:
|
||||||
if rc != 0:
|
uid = pwd.getpwnam(owner).pw_uid
|
||||||
|
except KeyError:
|
||||||
|
module_fail_json(path=path, msg='chown failed: failed to look up user %s' % owner)
|
||||||
|
try:
|
||||||
|
os.chown(path, uid, -1)
|
||||||
|
except OSError:
|
||||||
module_fail_json(path=path, msg='chown failed')
|
module_fail_json(path=path, msg='chown failed')
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
@ -173,8 +178,13 @@ def set_group_if_different(path, group, changed):
|
||||||
return changed
|
return changed
|
||||||
old_user, old_group = user_and_group(path)
|
old_user, old_group = user_and_group(path)
|
||||||
if old_group != group:
|
if old_group != group:
|
||||||
rc = os.system("/bin/chgrp -R %s %s" % (group, path))
|
try:
|
||||||
if rc != 0:
|
gid = grp.getgrnam(group).gr_gid
|
||||||
|
except KeyError:
|
||||||
|
module_fail_json(path=path, msg='chgrp failed: failed to look up group %s' % group)
|
||||||
|
try:
|
||||||
|
os.chown(path, -1, gid)
|
||||||
|
except OSError:
|
||||||
module_fail_json(path=path, msg='chgrp failed')
|
module_fail_json(path=path, msg='chgrp failed')
|
||||||
return True
|
return True
|
||||||
return changed
|
return changed
|
||||||
|
|
Loading…
Reference in a new issue