From ba5fc6cfcb3dc7a8782188c94c031b60dec24cff Mon Sep 17 00:00:00 2001 From: Ludwig Lehnert Date: Thu, 2 Jul 2026 21:28:12 +0000 Subject: [PATCH] fix: preserve leading dots in group folders --- app/reconcile_shares.py | 2 +- tests/test_reconcile_shares.py | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/app/reconcile_shares.py b/app/reconcile_shares.py index f44d5bb..b44e387 100755 --- a/app/reconcile_shares.py +++ b/app/reconcile_shares.py @@ -277,7 +277,7 @@ def parse_groups_from_ldap_output(output: str) -> List[Dict[str, object]]: def sanitize_group_folder_name(raw_name: str) -> str: candidate = GROUP_FOLDER_INVALID_RE.sub("_", raw_name.strip()) - candidate = candidate.strip().strip(".") + candidate = candidate.strip().rstrip(".") candidate = re.sub(r"\s+", " ", candidate) if not candidate: return "" diff --git a/tests/test_reconcile_shares.py b/tests/test_reconcile_shares.py index c839089..27d60d9 100644 --- a/tests/test_reconcile_shares.py +++ b/tests/test_reconcile_shares.py @@ -24,6 +24,17 @@ def principal(dn, sam, classes, members=()): } +class GroupFolderNameTests(unittest.TestCase): + def test_sanitizer_preserves_leading_dot(self): + self.assertEqual(rs.sanitize_group_folder_name(".Finance"), ".Finance") + self.assertEqual(rs.sanitize_group_folder_name("..Finance"), "..Finance") + + def test_sanitizer_still_rejects_dot_only_names(self): + self.assertEqual(rs.sanitize_group_folder_name("."), "") + self.assertEqual(rs.sanitize_group_folder_name(".."), "") + self.assertEqual(rs.sanitize_group_folder_name("Finance."), "Finance") + + class LdapParsingTests(unittest.TestCase): def test_parser_keeps_repeated_members_and_unfolds_lines(self): display_name = base64.b64encode(b"Data Folder").decode("ascii")