diff --git a/changelogs/fragments/75063-allow-dev-nul-as-skeleton-for-new-homedir.yml b/changelogs/fragments/75063-allow-dev-nul-as-skeleton-for-new-homedir.yml new file mode 100644 index 00000000000..f7e10b74536 --- /dev/null +++ b/changelogs/fragments/75063-allow-dev-nul-as-skeleton-for-new-homedir.yml @@ -0,0 +1,3 @@ +bugfixes: + - modules/user.py - Add check for valid directory when creating new user homedir (allows /dev/null as skeleton) (https://github.com/ansible/ansible/issues/75063) + diff --git a/lib/ansible/modules/user.py b/lib/ansible/modules/user.py index 0c26cc28bdf..a888fea8919 100644 --- a/lib/ansible/modules/user.py +++ b/lib/ansible/modules/user.py @@ -1273,7 +1273,7 @@ class User(object): else: skeleton = '/etc/skel' - if os.path.exists(skeleton): + if os.path.exists(skeleton) and skeleton != os.devnull: try: shutil.copytree(skeleton, path, symlinks=True) except OSError as e: diff --git a/test/integration/targets/user/tasks/test_create_user_home.yml b/test/integration/targets/user/tasks/test_create_user_home.yml index 1b529f76be3..5561a2f5249 100644 --- a/test/integration/targets/user/tasks/test_create_user_home.yml +++ b/test/integration/targets/user/tasks/test_create_user_home.yml @@ -134,3 +134,21 @@ name: randomuser state: absent remove: yes + +- name: Create user home directory with /dev/null as skeleton, https://github.com/ansible/ansible/issues/75063 + # create_homedir is mostly used by linux, rest of OSs take care of it themselves via -k option (which fails this task) + when: ansible_system == 'Linux' + block: + - name: "Create user home directory with /dev/null as skeleton" + user: + name: withskeleton + state: present + skeleton: "/dev/null" + createhome: yes + register: create_user_with_skeleton_dev_null + always: + - name: "Remove test user" + user: + name: withskeleton + state: absent + remove: yes