--- # Test setup # Use single task to save in CI runtime - name: create test folders win_shell: | $ErrorActionPreference = 'Stop' $tmp_dir = '{{ test_win_acl_inheritance_path }}' if (Test-Path -LiteralPath $tmp_dir) { Remove-Item -LiteralPath $tmp_dir -Force -Recurse } New-Item -Path $tmp_dir -ItemType Directory > $null Add-Type -AssemblyName System.DirectoryServices.AccountManagement $current_sid = ([System.DirectoryServices.AccountManagement.UserPrincipal]::Current).Sid $system_sid = New-Object -TypeName System.Security.Principal.SecurityIdentifier -ArgumentList @([System.Security.Principal.WellKnownSidType]::LocalSystemSid, $null) $everyone_sid = New-Object -TypeName System.Security.Principal.SecurityIdentifier -ArgumentList @([System.Security.Principal.WellKnownSidType]::WorldSid, $null) $sd = New-Object -TypeName System.Security.AccessControl.DirectorySecurity $sd.SetAccessRuleProtection($true, $false) $sd.AddAccessRule( (New-Object -TypeName System.Security.AccessControl.FileSystemAccessRule -ArgumentList @( $system_sid, [System.Security.AccessControl.FileSystemRights]::FullControl, [System.Security.AccessControl.InheritanceFlags]"ContainerInherit, ObjectInherit", [System.Security.AccessControl.PropagationFlags]::None, [System.Security.AccessControl.AccessControlType]::Allow )) ) $sd.AddAccessRule( (New-Object -TypeName System.Security.AccessControl.FileSystemAccessRule -ArgumentList @( $current_sid, [System.Security.AccessControl.FileSystemRights]::FullControl, [System.Security.AccessControl.InheritanceFlags]"ContainerInherit, ObjectInherit", [System.Security.AccessControl.PropagationFlags]::None, [System.Security.AccessControl.AccessControlType]::Allow )) ) $sd.AddAccessRule( (New-Object -TypeName System.Security.AccessControl.FileSystemAccessRule -ArgumentList @( $everyone_sid, [System.Security.AccessControl.FileSystemRights]::Read, [System.Security.AccessControl.InheritanceFlags]"ContainerInherit, ObjectInherit", [System.Security.AccessControl.PropagationFlags]::None, [System.Security.AccessControl.AccessControlType]::Allow )) ) Set-Acl -LiteralPath $tmp_dir -AclObject $sd New-Item -Path "$tmp_dir\folder" -ItemType Directory > $null Set-Content -LiteralPath "$tmp_dir\folder\file.txt" -Value 'a' $system_sid.Value $current_sid.Value $everyone_sid.Value register: test_sids # register the output SID values used for comparison tests below # Run tests - name: remove inheritance check win_acl_inheritance: path: '{{ test_win_acl_inheritance_path }}\folder' reorganize: True state: absent register: remove_check check_mode: True - name: get actual remove inheritance check test_get_acl: path: '{{ test_win_acl_inheritance_path }}\folder' register: actual_remove_check - name: assert remove inheritance check assert: that: - remove_check is changed - actual_remove_check.inherited == True - actual_remove_check.user_details[test_sids.stdout_lines[0]].isinherited == True - actual_remove_check.user_details[test_sids.stdout_lines[1]].isinherited == True - actual_remove_check.user_details[test_sids.stdout_lines[2]].isinherited == True - name: remove inheritance win_acl_inheritance: path: '{{ test_win_acl_inheritance_path }}\folder' reorganize: True state: absent register: remove - name: get actual remove inheritance test_get_acl: path: '{{ test_win_acl_inheritance_path }}\folder' register: actual_remove - name: assert remove inheritance assert: that: - remove is changed - actual_remove.inherited == False - actual_remove.user_details[test_sids.stdout_lines[0]].isinherited == False - actual_remove.user_details[test_sids.stdout_lines[1]].isinherited == False - actual_remove.user_details[test_sids.stdout_lines[2]].isinherited == False - name: remove inheritance again win_acl_inheritance: path: '{{ test_win_acl_inheritance_path }}\folder' reorganize: True state: absent register: remove_again - name: assert remove inheritance again assert: that: - remove_again is not changed - name: add inheritance check win_acl_inheritance: path: '{{ test_win_acl_inheritance_path }}\folder' reorganize: True state: present register: add_check check_mode: True - name: get actual add inheritance check test_get_acl: path: '{{ test_win_acl_inheritance_path }}\folder' register: actual_add_check - name: assert add inheritance check assert: that: - add_check is changed - actual_add_check.inherited == False - actual_add_check.user_details[test_sids.stdout_lines[0]].isinherited == False - actual_add_check.user_details[test_sids.stdout_lines[1]].isinherited == False - actual_add_check.user_details[test_sids.stdout_lines[2]].isinherited == False - name: add inheritance win_acl_inheritance: path: '{{ test_win_acl_inheritance_path }}\folder' reorganize: True state: present register: add - name: get actual add inheritance test_get_acl: path: '{{ test_win_acl_inheritance_path }}\folder' register: actual_add - name: assert add inheritance assert: that: - add is changed - actual_add.inherited == True - actual_add.user_details[test_sids.stdout_lines[0]].isinherited == True - actual_add.user_details[test_sids.stdout_lines[1]].isinherited == True - actual_add.user_details[test_sids.stdout_lines[2]].isinherited == True - name: add inheritance again win_acl_inheritance: path: '{{ test_win_acl_inheritance_path }}\folder' reorganize: True state: present register: add_again - name: assert add inheritance again assert: that: - add_again is not changed # Test cleanup - name: remove test folder win_file: path: '{{ test_win_acl_inheritance_path }}' state: absent