Fix copy module to reset filesystem acls (#51868)

The controller's fixup_perms2 uses filesystem acls to make the temporary
file for copy readable by an unprivileged become user. On Python3, the
acls are then copied to the destination filename so we have to remove
them from there.

We can't remove them prior to the copy because we may not have
permission to read the file if the acls are not present. We can't
remove them in atomic_move() because the move function shouldn't know
anything about controller features. We may want to generalize this into
a helper function, though.

Fixes #44412

Co-authored-by: Toshio Kuratomi <a.badger@gmail.com>
This commit is contained in:
Martin Krizek 2019-04-03 18:37:59 +02:00 committed by GitHub
parent 40507220b4
commit d15812fabf
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 131 additions and 4 deletions

View file

@ -0,0 +1,33 @@
- block:
- block:
- name: Testing ACLs
copy:
content: "TEST"
mode: 0644
dest: "~/test.txt"
- shell: getfacl ~/test.txt
register: acls
become: yes
become_user: "{{ remote_unprivileged_user }}"
- name: Check that there are no ACLs leftovers
assert:
that:
- "'user:{{ remote_unprivileged_user }}:r-x\t#effective:r--' not in acls.stdout_lines"
- name: Check that permissions match with what was set in the mode param
assert:
that:
- "'user::rw-' in acls.stdout_lines"
- "'group::r--' in acls.stdout_lines"
- "'other::r--' in acls.stdout_lines"
always:
- name: Clean up
file:
path: "~/test.txt"
state: absent
become: yes
become_user: "{{ remote_unprivileged_user }}"

View file

@ -58,6 +58,9 @@
- import_tasks: tests.yml
remote_user: '{{ remote_unprivileged_user }}'
- import_tasks: acls.yml
when: ansible_system == 'Linux'
always:
- name: Cleaning
file: