From 006f7bb9741e3eb1a4894efbd4405c001f029e09 Mon Sep 17 00:00:00 2001 From: Lucas Di Pentima Date: Thu, 16 Sep 2021 19:33:26 -0300 Subject: [PATCH] 18097: Adds logic for the "-case-insensitive" flag. Makes new test pass. Arvados-DCO-1.1-Signed-off-by: Lucas Di Pentima --- tools/sync-groups/sync-groups.go | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/tools/sync-groups/sync-groups.go b/tools/sync-groups/sync-groups.go index 6314a52469..f0c3770783 100644 --- a/tools/sync-groups/sync-groups.go +++ b/tools/sync-groups/sync-groups.go @@ -305,7 +305,11 @@ func doMain(cfg *ConfigParams) error { } defer f.Close() - log.Printf("%s %s started. Using %q as users id and parent group UUID %q", os.Args[0], version, cfg.UserID, cfg.ParentGroupUUID) + iCaseLog := "" + if cfg.UserID == "username" && cfg.CaseInsensitive { + iCaseLog = " - username matching requested to be case-insensitive" + } + log.Printf("%s %s started. Using %q as users id and parent group UUID %q%s", os.Args[0], version, cfg.UserID, cfg.ParentGroupUUID, iCaseLog) // Get the complete user list to minimize API Server requests allUsers := make(map[string]arvados.User) @@ -322,6 +326,12 @@ func doMain(cfg *ConfigParams) error { if err != nil { return err } + if cfg.UserID == "username" && uID != "" && cfg.CaseInsensitive { + uID = strings.ToLower(uID) + if uuid, found := userIDToUUID[uID]; found { + return fmt.Errorf("case insensitive collision for username %q between %q and %q", uID, u.UUID, uuid) + } + } userIDToUUID[uID] = u.UUID if cfg.Verbose { log.Printf("Seen user %q (%s)", u.Username, u.UUID) @@ -421,6 +431,9 @@ func ProcessFile( membersSkipped++ continue } + if cfg.UserID == "username" && cfg.CaseInsensitive { + groupMember = strings.ToLower(groupMember) + } if !(groupPermission == "can_read" || groupPermission == "can_write" || groupPermission == "can_manage") { log.Printf("Warning: 3rd field should be 'can_read', 'can_write' or 'can_manage'. Found: %q at line %d, skipping.", groupPermission, lineNo) membersSkipped++ @@ -638,6 +651,9 @@ func GetRemoteGroups(cfg *ConfigParams, allUsers map[string]arvados.User) (remot if err != nil { return remoteGroups, groupNameToUUID, err } + if cfg.UserID == "username" && cfg.CaseInsensitive { + memberID = strings.ToLower(memberID) + } membersSet[memberID] = u2gLinkSet[link.HeadUUID] } remoteGroups[group.UUID] = &GroupInfo{ -- 2.30.2