Avoid repeated NTFS engine logger initialization

This commit is contained in:
Meik
2026-07-16 13:11:40 +02:00
parent 0b1dbd7925
commit dd0ebd3d6d
2 changed files with 84 additions and 39 deletions

View File

@@ -1335,9 +1335,17 @@ namespace C4IT.LIAM
IEnumerable<string> readerSids, IEnumerable<string> readerSids,
IEnumerable<string> writerSids) IEnumerable<string> writerSids)
{ {
var stopwatch = Stopwatch.StartNew();
LogEntry(
$"NTFS filesystem engine creation stage. Stage=Start Path='{folderPath}', ParentPath='{parentFolderPath}'",
LogLevels.Debug);
var requiresDomainLocalTag = this.GroupStrategy == eLiamGroupStrategies.Ntfs_AGDLP var requiresDomainLocalTag = this.GroupStrategy == eLiamGroupStrategies.Ntfs_AGDLP
|| (NamingConventions ?? Enumerable.Empty<cLiamNamingConvention>()) || (NamingConventions ?? Enumerable.Empty<cLiamNamingConvention>())
.Any(i => i.Scope == eLiamAccessRoleScopes.DomainLocal); .Any(i => i.Scope == eLiamAccessRoleScopes.DomainLocal);
LogEntry(
$"NTFS filesystem engine creation stage finished. Stage=ResolveStrategy Path='{folderPath}', RequiresDomainLocalTag={requiresDomainLocalTag}, Elapsed='{stopwatch.Elapsed}'",
LogLevels.Debug);
var mergedCustomTags = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase); var mergedCustomTags = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
foreach (var tag in CustomTags) foreach (var tag in CustomTags)
@@ -1347,49 +1355,70 @@ namespace C4IT.LIAM
foreach (var tag in customTags) foreach (var tag in customTags)
mergedCustomTags[tag.Key] = tag.Value; mergedCustomTags[tag.Key] = tag.Value;
} }
LogEntry(
$"NTFS filesystem engine creation stage finished. Stage=MergeCustomTags Path='{folderPath}', CustomTags={mergedCustomTags.Count}, Elapsed='{stopwatch.Elapsed}'",
LogLevels.Debug);
LogEntry(
$"NTFS filesystem engine creation stage. Stage=ConstructEngine Path='{folderPath}'",
LogLevels.Debug);
var engine = new DataArea_FileSystem();
LogEntry(
$"NTFS filesystem engine creation stage finished. Stage=ConstructEngine Path='{folderPath}', Elapsed='{stopwatch.Elapsed}'",
LogLevels.Debug);
LogEntry(
$"NTFS filesystem engine creation stage. Stage=AssignEngineProperties Path='{folderPath}'",
LogLevels.Debug);
engine.ConfigID = "manual";
engine.domainName = this.Domain;
engine.effectiveDomainController = activeDirectoryBase.EffectiveDomainController;
engine.username = this.Credential.Identification;
engine.password = new NetworkCredential("", this.Credential.Secret).SecurePassword;
engine.baseFolder = this.RootPath;
engine.newFolderPath = folderPath;
engine.newFolderParent = parentFolderPath;
engine.groupPrefix = GetRequiredCustomTag("Filesystem_GroupPrefixTag");
engine.groupOUPath = this.GroupPath;
engine.groupPermissionStrategy = (C4IT_IAM_GET.PermissionGroupStrategy)this.GroupStrategy;
engine.groupCustomTags = mergedCustomTags;
engine.ownerUserSids = ownerSids?.Where(i => !string.IsNullOrWhiteSpace(i)).Distinct(StringComparer.OrdinalIgnoreCase).ToList() ?? new List<string>();
engine.readerUserSids = readerSids?.Where(i => !string.IsNullOrWhiteSpace(i)).Distinct(StringComparer.OrdinalIgnoreCase).ToList() ?? new List<string>();
engine.writerUserSids = writerSids?.Where(i => !string.IsNullOrWhiteSpace(i)).Distinct(StringComparer.OrdinalIgnoreCase).ToList() ?? new List<string>();
engine.groupOwnerTag = GetRequiredCustomTag("Filesystem_GroupOwnerTag");
engine.groupWriteTag = GetRequiredCustomTag("Filesystem_GroupWriteTag");
engine.groupReadTag = GetRequiredCustomTag("Filesystem_GroupReadTag");
engine.groupTraverseTag = GetRequiredCustomTag("Filesystem_GroupTraverseTag");
engine.groupDLTag = requiresDomainLocalTag ? GetRequiredCustomTag("Filesystem_GroupDomainLocalTag") : string.Empty;
engine.groupGTag = GetRequiredCustomTag("Filesystem_GroupGlobalTag");
engine.CanManagePermissionsForPath = IsPermissionManagedFolderPath;
engine.CanManageTraversePermissionsForPath = IsTraversePermissionManagedPath;
engine.forceStrictAdGroupNames = IsAdditionalConfigurationEnabled("ForceStrictAdGroupNames");
engine.groupNameSanitizeReplacement = GetAdditionalConfigurationValueOrDefault(
AdditionalConfigurationGroupNameSanitizeReplacementKey,
Helper.DefaultGroupNameSanitizeReplacement);
engine.preserveAdGroupNameCase = IsAdditionalConfigurationEnabled(AdditionalConfigurationPreserveAdGroupNameCaseKey);
engine.OwnerACLPermission = this.OwnerACLPermission;
engine.WriteACLPermission = this.WriteACLPermission;
engine.ReadACLPermission = this.ReadACLPermission;
LogEntry(
$"NTFS filesystem engine creation stage finished. Stage=AssignEngineProperties Path='{folderPath}', Elapsed='{stopwatch.Elapsed}'",
LogLevels.Debug);
var engine = new DataArea_FileSystem
{
ConfigID = "manual",
domainName = this.Domain,
effectiveDomainController = activeDirectoryBase.EffectiveDomainController,
username = this.Credential.Identification,
password = new NetworkCredential("", this.Credential.Secret).SecurePassword,
baseFolder = this.RootPath,
newFolderPath = folderPath,
newFolderParent = parentFolderPath,
groupPrefix = GetRequiredCustomTag("Filesystem_GroupPrefixTag"),
groupOUPath = this.GroupPath,
groupPermissionStrategy = (C4IT_IAM_GET.PermissionGroupStrategy)this.GroupStrategy,
groupCustomTags = mergedCustomTags,
ownerUserSids = ownerSids?.Where(i => !string.IsNullOrWhiteSpace(i)).Distinct(StringComparer.OrdinalIgnoreCase).ToList() ?? new List<string>(),
readerUserSids = readerSids?.Where(i => !string.IsNullOrWhiteSpace(i)).Distinct(StringComparer.OrdinalIgnoreCase).ToList() ?? new List<string>(),
writerUserSids = writerSids?.Where(i => !string.IsNullOrWhiteSpace(i)).Distinct(StringComparer.OrdinalIgnoreCase).ToList() ?? new List<string>(),
groupOwnerTag = GetRequiredCustomTag("Filesystem_GroupOwnerTag"),
groupWriteTag = GetRequiredCustomTag("Filesystem_GroupWriteTag"),
groupReadTag = GetRequiredCustomTag("Filesystem_GroupReadTag"),
groupTraverseTag = GetRequiredCustomTag("Filesystem_GroupTraverseTag"),
groupDLTag = requiresDomainLocalTag ? GetRequiredCustomTag("Filesystem_GroupDomainLocalTag") : string.Empty,
groupGTag = GetRequiredCustomTag("Filesystem_GroupGlobalTag"),
CanManagePermissionsForPath = IsPermissionManagedFolderPath,
CanManageTraversePermissionsForPath = IsTraversePermissionManagedPath,
forceStrictAdGroupNames = IsAdditionalConfigurationEnabled("ForceStrictAdGroupNames"),
groupNameSanitizeReplacement = GetAdditionalConfigurationValueOrDefault(
AdditionalConfigurationGroupNameSanitizeReplacementKey,
Helper.DefaultGroupNameSanitizeReplacement),
preserveAdGroupNameCase = IsAdditionalConfigurationEnabled(AdditionalConfigurationPreserveAdGroupNameCaseKey),
OwnerACLPermission = this.OwnerACLPermission,
WriteACLPermission = this.WriteACLPermission,
ReadACLPermission = this.ReadACLPermission
};
engine.traverseBoundaryPath = GetEffectiveTraverseBoundaryPath(); engine.traverseBoundaryPath = GetEffectiveTraverseBoundaryPath();
LogEntry( LogEntry(
$"NTFS filesystem engine ACL permissions: Owner=0x{engine.OwnerACLPermission:X}, Write=0x{engine.WriteACLPermission:X}, Read=0x{engine.ReadACLPermission:X}", $"NTFS filesystem engine ACL permissions: Owner=0x{engine.OwnerACLPermission:X}, Write=0x{engine.WriteACLPermission:X}, Read=0x{engine.ReadACLPermission:X}",
LogLevels.Debug); LogLevels.Debug);
LogEntry(
$"NTFS filesystem engine creation stage. Stage=BuildSecurityGroupTemplates Path='{folderPath}'",
LogLevels.Debug);
foreach (var template in BuildSecurityGroupTemplates()) foreach (var template in BuildSecurityGroupTemplates())
engine.templates.Add(template); engine.templates.Add(template);
LogEntry(
$"NTFS filesystem engine creation stage finished. Stage=BuildSecurityGroupTemplates Path='{folderPath}', Templates={engine.templates.Count}, Elapsed='{stopwatch.Elapsed}'",
LogLevels.Debug);
return engine; return engine;
} }

View File

@@ -17,6 +17,7 @@ using C4IT.Logging;
using static C4IT.Logging.cLogManager; using static C4IT.Logging.cLogManager;
using System.Reflection; using System.Reflection;
using System.Threading;
using C4IT_IAM_GET; using C4IT_IAM_GET;
using C4IT.LIAM; using C4IT.LIAM;
@@ -75,18 +76,33 @@ namespace C4IT_IAM_SET
public List<IAM_SecurityGroupTemplate> templates; public List<IAM_SecurityGroupTemplate> templates;
public int createTraverseGroupLvl = 0; public int createTraverseGroupLvl = 0;
private static int engineFileLoggerInitialized;
public DataArea_FileSystem() public DataArea_FileSystem()
{ {
EnsureEngineFileLoggerInitialized();
if (DefaultLogger != null)
{
DefaultLogger.LogEntry(LogLevels.Info, "=================================================");
DefaultLogger.LogEntry(LogLevels.Info, $"LIAM engine v{Assembly.GetExecutingAssembly().GetName().Version} started");
}
templates = new List<IAM_SecurityGroupTemplate>();
}
private static void EnsureEngineFileLoggerInitialized()
{
if (DefaultLogger != null)
return;
if (Interlocked.Exchange(ref engineFileLoggerInitialized, 1) != 0)
return;
var logDirectory = Environment.ExpandEnvironmentVariables(constApplicationDataPath); var logDirectory = Environment.ExpandEnvironmentVariables(constApplicationDataPath);
Helper.CreatePathWithWriteAccess(logDirectory); Helper.CreatePathWithWriteAccess(logDirectory);
var LogPath = Path.Combine(logDirectory, "Logs"); var LogPath = Path.Combine(logDirectory, "Logs");
cLogManagerFile.CreateInstance(Path.Combine(LogPath, "LIAM.log")); cLogManagerFile.CreateInstance(Path.Combine(LogPath, "LIAM.log"));
DefaultLogger.LogEntry(LogLevels.Info, "=================================================");
DefaultLogger.LogEntry(LogLevels.Info, $"LIAM engine v{Assembly.GetExecutingAssembly().GetName().Version} started");
templates = new List<IAM_SecurityGroupTemplate>();
} }
private string GetAdServer() private string GetAdServer()