icinga-powershell-framework/lib/core/icingaagent/setters/Set-IcingaAcl.psm1

39 lines
1.1 KiB
PowerShell
Raw Normal View History

2019-09-29 12:25:40 -04:00
function Set-IcingaAcl()
{
param(
2021-08-06 12:12:27 -04:00
[string]$Directory,
[string]$IcingaUser = (Get-IcingaServiceUser),
[switch]$Remove = $FALSE
2019-09-29 12:25:40 -04:00
);
if (-Not (Test-Path $Directory)) {
2021-08-06 12:12:27 -04:00
Write-IcingaConsoleWarning 'Unable to set ACL for directory "{0}". Directory does not exist' -Objects $Directory;
2019-09-29 12:25:40 -04:00
return;
}
$DirectoryAcl = (Get-Item -Path $Directory).GetAccessControl('Access');
2019-09-29 12:25:40 -04:00
$DirectoryAccessRule = New-Object System.Security.AccessControl.FileSystemAccessRule(
2021-08-06 12:12:27 -04:00
$IcingaUser,
2019-09-29 12:25:40 -04:00
'Modify',
'ContainerInherit,ObjectInherit',
'None',
'Allow'
);
2021-08-06 12:12:27 -04:00
if ($Remove -eq $FALSE) {
$DirectoryAcl.SetAccessRule($DirectoryAccessRule);
} else {
foreach ($entry in $DirectoryAcl.Access) {
if (([string]($entry.IdentityReference)).ToLower() -like [string]::Format('*\{0}', $IcingaUser.ToLower())) {
$DirectoryAcl.RemoveAccessRuleSpecific($entry);
}
}
}
2019-09-29 12:25:40 -04:00
Set-Acl -Path $Directory -AclObject $DirectoryAcl;
2021-08-06 12:12:27 -04:00
if ($Remove -eq $FALSE) {
Test-IcingaAcl -Directory $Directory -WriteOutput | Out-Null;
}
2019-09-29 12:25:40 -04:00
}