From 107bab3d277293f327d62e9014952540bbc13fea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rn=20Henkel?= Date: Mon, 29 Jan 2024 13:15:42 +0100 Subject: [PATCH 1/2] Added going deeper --- Program.cs | 55 +++++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 48 insertions(+), 7 deletions(-) diff --git a/Program.cs b/Program.cs index 54267f6..97cce22 100644 --- a/Program.cs +++ b/Program.cs @@ -438,6 +438,25 @@ private void GenerateCache() } } + private int CountInCache(string searchChar) + { + var count = 0; + foreach (var key in Cache.ValueToIdCache.Keys) + { + + if (key.StartsWith("CN=", true, null)) + { + var sub = key.Substring(3); + if (sub.StartsWith(searchChar, true, null)){ + count = count + 1; + } + + + } + } + return count; + } + private void AutoSplit() { char firstChar; @@ -519,19 +538,39 @@ private void AutoSplit() } } + private void RecursiveQuerySplit(string prefix, int depth) + { + if (depth > 100) return; // Prevent going too deep + + var results = CountInCache(prefix); + Console.WriteLine("Result count: " + results + " prefix: " + prefix); + if (results == 0){ + return; + } + if (results < threshold) + { + List objects = ADWSUtils.GetObjects("(cn=" + prefix + "*)"); + CreateOutput(objects, prefix); + objects.Clear(); + } + else + { + // If the results are too many, split further + foreach (char c in "abcdefghijklmnopqrstuvwxyz0123456789") + { + RecursiveQuerySplit(prefix + c, depth + 1); // Go one level deeper + } + } + + } + private void ParseAutosplitObjects(string str1, string str2) { foreach (char c1 in str1) { if (deep) { - //Gather 2nd depth level - foreach (char c2 in str2) - { - List objects = ADWSUtils.GetObjects("(cn=" + c1 + c2 + "*)"); - CreateOutput(objects, c1.ToString() + c2.ToString()); - objects.Clear(); - } + RecursiveQuerySplit(c1.ToString(), 1); //Gather non alphanumeric in 2nd depth level List adobjects = ADWSUtils.GetObjects("(&(cn=" + c1 + "*)(!(cn=" + c1 + "a*))(!(cn=" + c1 + "b*))(!(cn=" + c1 + "c*))(!(cn=" + c1 + "d*))(!(cn=" + c1 + "e*))(!(cn=" + c1 + "f*))(!(cn=" + c1 + "g*))(!(cn=" + c1 + "h*))(!(cn=" + c1 + "i*))(!(cn=" + c1 + "j*))(!(cn=" + c1 + "k*))(!(cn=" + c1 + "l*))(!(cn=" + c1 + "m*))(!(cn=" + c1 + "n*))(!(cn=" + c1 + "o*))(!(cn=" + c1 + "p*))(!(cn=" + c1 + "q*))(!(cn=" + c1 + "r*))(!(cn=" + c1 + "s*))(!(cn=" + c1 + "t*))(!(cn=" + c1 + "u*))(!(cn=" + c1 + "v*))(!(cn=" + c1 + "w*))(!(cn=" + c1 + "x*))(!(cn=" + c1 + "y*))(!(cn=" + c1 + "z*))(!(cn=" + c1 + "0*))(!(cn=" + c1 + "1*))(!(cn=" + c1 + "2*))(!(cn=" + c1 + "3*))(!(cn=" + c1 + "4*))(!(cn=" + c1 + "5*))(!(cn=" + c1 + "6*))(!(cn=" + c1 + "7*))(!(cn=" + c1 + "8*))(!(cn=" + c1 + "9*)))"); CreateOutput(adobjects, c1.ToString() + "_nonchars_"); @@ -547,6 +586,8 @@ private void ParseAutosplitObjects(string str1, string str2) } } + + public void CreateOutput(List adobjects, string header) { From 11075e247c1c173ee0cd68ded7297b493408d27d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rn=20Henkel?= Date: Mon, 29 Jan 2024 14:18:32 +0100 Subject: [PATCH 2/2] removed debug output --- Program.cs | 3 --- 1 file changed, 3 deletions(-) diff --git a/Program.cs b/Program.cs index 97cce22..bd7792e 100644 --- a/Program.cs +++ b/Program.cs @@ -543,7 +543,6 @@ private void RecursiveQuerySplit(string prefix, int depth) if (depth > 100) return; // Prevent going too deep var results = CountInCache(prefix); - Console.WriteLine("Result count: " + results + " prefix: " + prefix); if (results == 0){ return; } @@ -586,8 +585,6 @@ private void ParseAutosplitObjects(string str1, string str2) } } - - public void CreateOutput(List adobjects, string header) {