Add configurable NTFS group name formatting
This commit is contained in:
@@ -56,6 +56,8 @@ namespace C4IT_IAM_SET
|
||||
public Func<string, bool> CanManageTraversePermissionsForPath;
|
||||
public string traverseBoundaryPath;
|
||||
public bool forceStrictAdGroupNames;
|
||||
public string groupNameSanitizeReplacement = Helper.DefaultGroupNameSanitizeReplacement;
|
||||
public bool preserveAdGroupNameCase;
|
||||
public bool WhatIf;
|
||||
|
||||
public int ReadACLPermission = 0x200A9;
|
||||
@@ -301,7 +303,8 @@ namespace C4IT_IAM_SET
|
||||
username = username,
|
||||
domainName = domainName,
|
||||
password = password,
|
||||
ForceStrictAdGroupNames = forceStrictAdGroupNames
|
||||
ForceStrictAdGroupNames = forceStrictAdGroupNames,
|
||||
PreserveAdGroupNameCase = preserveAdGroupNameCase
|
||||
};
|
||||
}
|
||||
|
||||
@@ -579,14 +582,14 @@ namespace C4IT_IAM_SET
|
||||
DefaultLogger.LogEntry(LogLevels.Debug, $"relativePath vor Normalisierung: {relativePathRaw}");
|
||||
|
||||
var relativePathSegments = relativePathRaw.Split(new[] { Path.DirectorySeparatorChar }, StringSplitOptions.RemoveEmptyEntries);
|
||||
var sanitizedSegments = relativePathSegments.Select(Helper.SanitizePathSegment).ToArray();
|
||||
var relativePath = sanitizedSegments.Length > 0 ? string.Join("_", sanitizedSegments) : string.Empty;
|
||||
var sanitizedSegments = relativePathSegments.Select(i => Helper.SanitizePathSegment(i, groupNameSanitizeReplacement)).ToArray();
|
||||
var relativePath = sanitizedSegments.Length > 0 ? Helper.JoinSanitizedPathSegments(sanitizedSegments, groupNameSanitizeReplacement) : string.Empty;
|
||||
DefaultLogger.LogEntry(LogLevels.Debug, $"relativePath nach Normalisierung: {relativePath}");
|
||||
var folderName = sanitizedSegments.Length > 0
|
||||
? sanitizedSegments[sanitizedSegments.Length - 1]
|
||||
: Helper.SanitizePathSegment(Path.GetFileName(parent.FullName.TrimEnd(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar)));
|
||||
: Helper.SanitizePathSegment(Path.GetFileName(parent.FullName.TrimEnd(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar)), groupNameSanitizeReplacement);
|
||||
var traverseTags = GetTraverseReplacementTags(parent.FullName);
|
||||
var rootContext = Helper.GetRootPathTemplateContext(baseFolder);
|
||||
var rootContext = Helper.GetRootPathTemplateContext(baseFolder, groupNameSanitizeReplacement);
|
||||
var boundedTraverseContext = Helper.GetBoundedAdGroupTemplateContext(
|
||||
traverseGroupTemplate.NamingTemplate,
|
||||
true,
|
||||
@@ -597,7 +600,9 @@ namespace C4IT_IAM_SET
|
||||
Helper.MaxAdGroupNameLength,
|
||||
$"Traverse fuer '{parent.FullName}'",
|
||||
"AD-Gruppenname",
|
||||
rootContext);
|
||||
rootContext,
|
||||
preserveAdGroupNameCase,
|
||||
groupNameSanitizeReplacement);
|
||||
var boundedTraverseDescriptionContext = Helper.GetBoundedAdGroupTemplateContext(
|
||||
traverseGroupTemplate.DescriptionTemplate,
|
||||
true,
|
||||
@@ -608,20 +613,28 @@ namespace C4IT_IAM_SET
|
||||
Helper.MaxAdGroupDescriptionLength,
|
||||
$"Traverse fuer '{parent.FullName}'",
|
||||
"AD-Gruppenbeschreibung",
|
||||
rootContext);
|
||||
rootContext,
|
||||
preserveAdGroupNameCase,
|
||||
groupNameSanitizeReplacement);
|
||||
var adjustedTraverseSegments = boundedTraverseContext.SanitizedSegments ?? Array.Empty<string>();
|
||||
var adjustedTraverseRelativePath = adjustedTraverseSegments.Length > 0 ? string.Join("_", adjustedTraverseSegments) : string.Empty;
|
||||
var adjustedTraverseRelativePath = adjustedTraverseSegments.Length > 0 ? Helper.JoinSanitizedPathSegments(adjustedTraverseSegments, groupNameSanitizeReplacement) : string.Empty;
|
||||
var adjustedTraverseFolderName = boundedTraverseContext.FolderName;
|
||||
var adjustedTraverseDescriptionSegments = boundedTraverseDescriptionContext.SanitizedSegments ?? Array.Empty<string>();
|
||||
var adjustedTraverseDescriptionRelativePath = adjustedTraverseDescriptionSegments.Length > 0 ? string.Join("_", adjustedTraverseDescriptionSegments) : string.Empty;
|
||||
var adjustedTraverseDescriptionRelativePath = adjustedTraverseDescriptionSegments.Length > 0 ? Helper.JoinSanitizedPathSegments(adjustedTraverseDescriptionSegments, groupNameSanitizeReplacement) : string.Empty;
|
||||
var adjustedTraverseDescriptionFolderName = boundedTraverseDescriptionContext.FolderName;
|
||||
var traverseNameTemplate = Helper.ApplyTemplatePlaceholders(traverseGroupTemplate.NamingTemplate, true, adjustedTraverseRelativePath, adjustedTraverseSegments, adjustedTraverseFolderName, rootContext).ReplaceTags(traverseTags);
|
||||
var traverseDescriptionTemplate = Helper.ApplyTemplatePlaceholders(traverseGroupTemplate.DescriptionTemplate, true, adjustedTraverseDescriptionRelativePath, adjustedTraverseDescriptionSegments, adjustedTraverseDescriptionFolderName, rootContext).ReplaceTags(traverseTags);
|
||||
var traverseNameTemplate = Helper.ApplyAdGroupNameCasing(
|
||||
Helper.ApplyTemplatePlaceholders(traverseGroupTemplate.NamingTemplate, true, adjustedTraverseRelativePath, adjustedTraverseSegments, adjustedTraverseFolderName, rootContext, groupNameSanitizeReplacement).ReplaceTags(traverseTags),
|
||||
preserveAdGroupNameCase);
|
||||
var traverseDescriptionTemplate = Helper.ApplyAdGroupNameCasing(
|
||||
Helper.ApplyTemplatePlaceholders(traverseGroupTemplate.DescriptionTemplate, true, adjustedTraverseDescriptionRelativePath, adjustedTraverseDescriptionSegments, adjustedTraverseDescriptionFolderName, rootContext, groupNameSanitizeReplacement).ReplaceTags(traverseTags),
|
||||
preserveAdGroupNameCase);
|
||||
|
||||
string traverseRegex = null;
|
||||
try
|
||||
{
|
||||
traverseRegex = Helper.ApplyTemplatePlaceholders(traverseGroupTemplate.WildcardTemplate, true, adjustedTraverseRelativePath, adjustedTraverseSegments, adjustedTraverseFolderName, rootContext).ReplaceTags(traverseTags);
|
||||
traverseRegex = Helper.ApplyAdGroupNameCasing(
|
||||
Helper.ApplyTemplatePlaceholders(traverseGroupTemplate.WildcardTemplate, true, adjustedTraverseRelativePath, adjustedTraverseSegments, adjustedTraverseFolderName, rootContext, groupNameSanitizeReplacement).ReplaceTags(traverseTags),
|
||||
preserveAdGroupNameCase);
|
||||
DefaultLogger.LogEntry(LogLevels.Debug, $"traverseRegex: {traverseRegex}");
|
||||
}
|
||||
catch (Exception ex)
|
||||
@@ -721,7 +734,7 @@ namespace C4IT_IAM_SET
|
||||
DefaultLogger.LogEntry(LogLevels.Error, $"Fehler beim Erstellen von newTraverseGroup: {ex.Message}");
|
||||
break;
|
||||
}
|
||||
} while (newSecurityGroups.GroupAllreadyExisting(newTraverseGroup.Name.ToUpper()) && loop < 20);
|
||||
} while (newSecurityGroups.GroupAllreadyExisting(newTraverseGroup.Name) && loop < 20);
|
||||
|
||||
if (newTraverseGroup != null)
|
||||
{
|
||||
@@ -947,8 +960,8 @@ namespace C4IT_IAM_SET
|
||||
var visibleSegments = GetVisibleTraversePathSegments(currentPath);
|
||||
return new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase)
|
||||
{
|
||||
{ "TRAVERSE_NAME", Helper.SanitizePathSegment(GetLastPathSegment(currentPath)) },
|
||||
{ "TRAVERSE_VISIBLEPATH", string.Join("_", visibleSegments.Select(Helper.SanitizePathSegment)) }
|
||||
{ "TRAVERSE_NAME", Helper.SanitizePathSegment(GetLastPathSegment(currentPath), groupNameSanitizeReplacement) },
|
||||
{ "TRAVERSE_VISIBLEPATH", Helper.JoinSanitizedPathSegments(visibleSegments.Select(i => Helper.SanitizePathSegment(i, groupNameSanitizeReplacement)), groupNameSanitizeReplacement) }
|
||||
};
|
||||
}
|
||||
|
||||
@@ -1319,7 +1332,10 @@ namespace C4IT_IAM_SET
|
||||
ReadACLPermission,
|
||||
WriteACLPermission,
|
||||
OwnerACLPermission,
|
||||
0);
|
||||
0,
|
||||
0,
|
||||
groupNameSanitizeReplacement,
|
||||
preserveAdGroupNameCase);
|
||||
|
||||
List<UserPrincipal> owners = getUserPrincipalBySid(ownerUserSids);
|
||||
List<UserPrincipal> writers = getUserPrincipalBySid(writerUserSids);
|
||||
@@ -1482,7 +1498,10 @@ namespace C4IT_IAM_SET
|
||||
ReadACLPermission,
|
||||
WriteACLPermission,
|
||||
OwnerACLPermission,
|
||||
existingADGroupCount);
|
||||
existingADGroupCount,
|
||||
0,
|
||||
groupNameSanitizeReplacement,
|
||||
preserveAdGroupNameCase);
|
||||
/*
|
||||
if (existingADGroupCount > 0 && !templates.All(t => t.Type == SecurityGroupType.Traverse || Regex.IsMatch(t.NamingTemplate, @"(?<loopTag>{{(?<prefix>[^}]*)(?<loop>LOOP)(?<postfix>[^{]*)}})")))
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user