diff --git a/changelogs/fragments/permission-denied-spwd-module.yml b/changelogs/fragments/permission-denied-spwd-module.yml new file mode 100644 index 00000000000..437df4bc2ae --- /dev/null +++ b/changelogs/fragments/permission-denied-spwd-module.yml @@ -0,0 +1,2 @@ +bugfixes: + - user - Fix error "Permission denied" in user module while generating SSH keys (https://github.com/ansible/ansible/issues/78017). diff --git a/lib/ansible/modules/user.py b/lib/ansible/modules/user.py index b247ba3682e..3e35e90facd 100644 --- a/lib/ansible/modules/user.py +++ b/lib/ansible/modules/user.py @@ -1052,7 +1052,17 @@ class User(object): max_needs_change = self.password_expire_max is not None if HAVE_SPWD: - shadow_info = spwd.getspnam(self.name) + try: + shadow_info = spwd.getspnam(self.name) + except KeyError: + return None, '', '' + except OSError as e: + # Python 3.6 raises PermissionError instead of KeyError + # Due to absence of PermissionError in python2.7 need to check + # errno + if e.errno in (errno.EACCES, errno.EPERM, errno.ENOENT): + return None, '', '' + raise min_needs_change &= self.password_expire_min != shadow_info.sp_min max_needs_change &= self.password_expire_max != shadow_info.sp_max