Apply NTFS level filters to data area creation
This commit is contained in:
@@ -1111,9 +1111,19 @@ namespace C4IT.LIAM
|
|||||||
IEnumerable<string> ownerSids,
|
IEnumerable<string> ownerSids,
|
||||||
IEnumerable<string> readerSids,
|
IEnumerable<string> readerSids,
|
||||||
IEnumerable<string> writerSids,
|
IEnumerable<string> writerSids,
|
||||||
bool whatIf = false
|
bool whatIf = false)
|
||||||
)
|
|
||||||
{
|
{
|
||||||
|
var classification = ClassifyPath(newFolderPath);
|
||||||
|
string levelSkipReason;
|
||||||
|
if (!IsCreateDataAreaLevelManagedPath(classification, out levelSkipReason))
|
||||||
|
{
|
||||||
|
return Task.FromResult(new ResultToken(System.Reflection.MethodBase.GetCurrentMethod().ToString())
|
||||||
|
{
|
||||||
|
resultErrorId = 30008,
|
||||||
|
resultMessage = levelSkipReason
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
var engine = CreateFilesystemEngine(
|
var engine = CreateFilesystemEngine(
|
||||||
newFolderPath,
|
newFolderPath,
|
||||||
newFolderParent,
|
newFolderParent,
|
||||||
@@ -1456,6 +1466,15 @@ namespace C4IT.LIAM
|
|||||||
out skipReason);
|
out skipReason);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private bool IsCreateDataAreaLevelManagedPath(cNtfsPathClassification classification, out string skipReason)
|
||||||
|
{
|
||||||
|
return IsLevelManagedPath(
|
||||||
|
classification,
|
||||||
|
GetPermissionLevelRange(),
|
||||||
|
"create data area",
|
||||||
|
out skipReason);
|
||||||
|
}
|
||||||
|
|
||||||
private bool IsTraverseLevelManagedPath(cNtfsPathClassification classification, out string skipReason)
|
private bool IsTraverseLevelManagedPath(cNtfsPathClassification classification, out string skipReason)
|
||||||
{
|
{
|
||||||
return IsLevelManagedPath(
|
return IsLevelManagedPath(
|
||||||
@@ -1468,15 +1487,15 @@ namespace C4IT.LIAM
|
|||||||
private bool IsLevelManagedPath(cNtfsPathClassification classification, cNtfsLevelRange range, string operationName, out string skipReason)
|
private bool IsLevelManagedPath(cNtfsPathClassification classification, cNtfsLevelRange range, string operationName, out string skipReason)
|
||||||
{
|
{
|
||||||
skipReason = string.Empty;
|
skipReason = string.Empty;
|
||||||
|
if (range == null || !range.IsConfigured)
|
||||||
|
return true;
|
||||||
|
|
||||||
if (classification == null)
|
if (classification == null)
|
||||||
{
|
{
|
||||||
skipReason = $"NTFS {operationName} skipped because the path could not be classified.";
|
skipReason = $"NTFS {operationName} skipped because the path could not be classified.";
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (range == null || !range.IsConfigured)
|
|
||||||
return true;
|
|
||||||
|
|
||||||
if (!range.IsValid)
|
if (!range.IsValid)
|
||||||
{
|
{
|
||||||
skipReason = $"NTFS {operationName} skipped for '{classification.NormalizedPath}' because {range.ErrorMessage}";
|
skipReason = $"NTFS {operationName} skipped for '{classification.NormalizedPath}' because {range.ErrorMessage}";
|
||||||
|
|||||||
@@ -267,7 +267,7 @@ EnsureNtfsTraverseGroups=1
|
|||||||
|
|
||||||
In diesem Beispiel koennen Traverse-Gruppen fuer `...\Projekte` selbst und fuer die Ordner darunter sichergestellt werden. Der Boundary-Pfad selbst ist gueltig; er muss nicht zusaetzlich als `NtfsIncludePaths`-Match enthalten sein, solange es nur um Traverse geht.
|
In diesem Beispiel koennen Traverse-Gruppen fuer `...\Projekte` selbst und fuer die Ordner darunter sichergestellt werden. Der Boundary-Pfad selbst ist gueltig; er muss nicht zusaetzlich als `NtfsIncludePaths`-Match enthalten sein, solange es nur um Traverse geht.
|
||||||
|
|
||||||
#### Levelbereiche fuer automatisches Ensure
|
#### Levelbereiche fuer Ensure und Ordneranlage
|
||||||
|
|
||||||
Die optionalen Levelbereiche schraenken ein, auf welchen Ebenen Gruppen und ACLs automatisch sichergestellt werden. Wenn keiner der Level-Parameter gesetzt ist, bleibt das bisherige Verhalten unveraendert.
|
Die optionalen Levelbereiche schraenken ein, auf welchen Ebenen Gruppen und ACLs automatisch sichergestellt werden. Wenn keiner der Level-Parameter gesetzt ist, bleibt das bisherige Verhalten unveraendert.
|
||||||
|
|
||||||
@@ -286,7 +286,9 @@ NtfsTraverseGroupsMaxLevel=2
|
|||||||
|
|
||||||
Damit werden Owner/Write/Read-Gruppen nur fuer `\\server\share\Bereich\...` auf Ebene `1` und `2` erzeugt. Traverse-Gruppen duerfen zusaetzlich bis zum Share auf Ebene `-1` erzeugt werden. `NtfsTraverseBoundaryPath` bleibt die harte Grenze fuer Traverse; die Min-/Max-Level legen nur fest, welche Ebenen innerhalb dieses Korridors verarbeitet werden.
|
Damit werden Owner/Write/Read-Gruppen nur fuer `\\server\share\Bereich\...` auf Ebene `1` und `2` erzeugt. Traverse-Gruppen duerfen zusaetzlich bis zum Share auf Ebene `-1` erzeugt werden. `NtfsTraverseBoundaryPath` bleibt die harte Grenze fuer Traverse; die Min-/Max-Level legen nur fest, welche Ebenen innerhalb dieses Korridors verarbeitet werden.
|
||||||
|
|
||||||
Wenn nur ein Min- oder Max-Wert gesetzt ist, ist die andere Seite offen. Ungueltige Werte oder ein Min-Wert groesser als der Max-Wert fuehren dazu, dass die betroffene Ensure-Phase mit einer Warning uebersprungen wird.
|
Die Permission-Level gelten auch fuer die explizite NTFS-Ordneranlage ueber `CreateDataArea`. Wenn der Zielordner ausserhalb des Permission-Levelbereichs liegt oder die Permission-Levelkonfiguration ungueltig ist, wird die Ordneranlage vor AD-/ACL-Aenderungen abgebrochen. Traverse-Level blockieren die Ordneranlage nicht; sie schraenken nur die Traverse-Gruppen und Traverse-ACLs ein.
|
||||||
|
|
||||||
|
Wenn nur ein Min- oder Max-Wert gesetzt ist, ist die andere Seite offen. Ungueltige Werte oder ein Min-Wert groesser als der Max-Wert fuehren dazu, dass die betroffene Ensure-Phase mit einer Warning uebersprungen wird; bei `CreateDataArea` fuehrt eine ungueltige Permission-Levelkonfiguration zum Abbruch vor der Anlage.
|
||||||
|
|
||||||
#### WhatIf / Preview
|
#### WhatIf / Preview
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user