user: fix default non-system user's shell on macOS
This commit is contained in:
parent
22c8522cbf
commit
32d6b1d0e0
3 changed files with 58 additions and 12 deletions
|
@ -76,6 +76,9 @@ options:
|
||||||
required: false
|
required: false
|
||||||
description:
|
description:
|
||||||
- Optionally set the user's shell.
|
- Optionally set the user's shell.
|
||||||
|
- On Mac OS X, before version 2.5, the default shell for non-system users was
|
||||||
|
/usr/bin/false. Since 2.5, the default shell for non-system users on
|
||||||
|
Mac OS X is /bin/bash.
|
||||||
home:
|
home:
|
||||||
required: false
|
required: false
|
||||||
description:
|
description:
|
||||||
|
@ -1763,6 +1766,11 @@ class DarwinUser(User):
|
||||||
os.makedirs(self.home)
|
os.makedirs(self.home)
|
||||||
self.chown_homedir(int(self.uid), int(self.group), self.home)
|
self.chown_homedir(int(self.uid), int(self.group), self.home)
|
||||||
|
|
||||||
|
# dscl sets shell to /usr/bin/false when UserShell is not specified
|
||||||
|
# so set the shell to /bin/bash when the user is not a system user
|
||||||
|
if not self.system and self.shell is None:
|
||||||
|
self.shell = '/bin/bash'
|
||||||
|
|
||||||
for field in self.fields:
|
for field in self.fields:
|
||||||
if field[0] in self.__dict__ and self.__dict__[field[0]]:
|
if field[0] in self.__dict__ and self.__dict__[field[0]]:
|
||||||
|
|
||||||
|
|
|
@ -4,18 +4,6 @@
|
||||||
become_method: su
|
become_method: su
|
||||||
user:
|
user:
|
||||||
name: "{{ become_test_user }}"
|
name: "{{ become_test_user }}"
|
||||||
when: ansible_distribution != "MacOSX"
|
|
||||||
|
|
||||||
|
|
||||||
- name: Create test user (become_method=su)
|
|
||||||
become: True
|
|
||||||
become_user: root
|
|
||||||
become_method: su
|
|
||||||
user:
|
|
||||||
name: "{{ become_test_user }}"
|
|
||||||
# explicitly set user shell since the default shell on OS X is /usr/bin/false
|
|
||||||
shell: /bin/bash
|
|
||||||
when: ansible_distribution == "MacOSX"
|
|
||||||
|
|
||||||
- name: test becoming user (become_method=su)
|
- name: test becoming user (become_method=su)
|
||||||
shell: whoami
|
shell: whoami
|
||||||
|
|
|
@ -108,3 +108,53 @@
|
||||||
assert:
|
assert:
|
||||||
that:
|
that:
|
||||||
- '"ansibulluser" not in user_names2.stdout_lines'
|
- '"ansibulluser" not in user_names2.stdout_lines'
|
||||||
|
|
||||||
|
|
||||||
|
- block:
|
||||||
|
- name: create non-system user on OSX to test the shell is set to /bin/bash
|
||||||
|
user:
|
||||||
|
name: osxuser
|
||||||
|
register: osxuser_output
|
||||||
|
|
||||||
|
- name: validate the shell is set to /bin/bash
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- 'osxuser_output.shell == "/bin/bash"'
|
||||||
|
|
||||||
|
- name: cleanup
|
||||||
|
user:
|
||||||
|
name: osxuser
|
||||||
|
state: absent
|
||||||
|
|
||||||
|
- name: create system user on OSX to test the shell is set to /usr/bin/false
|
||||||
|
user:
|
||||||
|
name: osxuser
|
||||||
|
system: yes
|
||||||
|
register: osxuser_output
|
||||||
|
|
||||||
|
- name: validate the shell is set to /usr/bin/false
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- 'osxuser_output.shell == "/usr/bin/false"'
|
||||||
|
|
||||||
|
- name: cleanup
|
||||||
|
user:
|
||||||
|
name: osxuser
|
||||||
|
state: absent
|
||||||
|
|
||||||
|
- name: create non-system user on OSX and set the shell to /bin/sh
|
||||||
|
user:
|
||||||
|
name: osxuser
|
||||||
|
shell: /bin/sh
|
||||||
|
register: osxuser_output
|
||||||
|
|
||||||
|
- name: validate the shell is set to /bin/sh
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- 'osxuser_output.shell == "/bin/sh"'
|
||||||
|
|
||||||
|
- name: cleanup
|
||||||
|
user:
|
||||||
|
name: osxuser
|
||||||
|
state: absent
|
||||||
|
when: ansible_distribution == "MacOSX"
|
||||||
|
|
Loading…
Reference in a new issue