diff --git a/cmd/user/delete.go b/cmd/user/delete.go index 2157184f867577f36bf29c33842c8156a15d65cd..bdc5c6d308cb20480a4f4dd8d97f1af696a5e6de 100644 --- a/cmd/user/delete.go +++ b/cmd/user/delete.go @@ -78,7 +78,7 @@ func locateUser(login string) (model.User, error) { if !loginExists(users, login) { return u, fmt.Errorf("Failed to find login in LDAP database: %v", err) } - filter := searchUser(users, login, "", "", "", "", "") + filter := searchUser(users, false, login, "", "", "", "", "") if len(filter) != 1 { return u, fmt.Errorf(`More than one user matched the login given. search made: "useradm user show -l %v"`, login) diff --git a/cmd/user/show.go b/cmd/user/show.go index 0fbd4ac0db00d06b6be27dbf39e77a2cf0101312..dd3fb5549eba734ff560d9b405559c3ed55aca49 100644 --- a/cmd/user/show.go +++ b/cmd/user/show.go @@ -32,6 +32,8 @@ func init() { ShowCmd.Flags().StringP("status", "s", "", "Search by user status (Active/Blocked)") ShowCmd.Flags().StringP("homedir", "d", "", "Search by user homedir") + ShowCmd.Flags().BoolP("ignore", "i", false, "Make the search case-insensitive") + // At least one is required! ShowCmd.MarkFlagsOneRequired("grr", "name", "login", "group", "homedir", "status") } @@ -49,10 +51,12 @@ func searchUserFunc(cmd *cobra.Command, args []string) error { if err != nil { return err } status, err := cmd.Flags().GetString("status") if err != nil { return err } + ig, err := cmd.Flags().GetBool("ignore") + if err != nil { return err } users, err := getUsers() if err != nil { return err } - filtered := searchUser(users, login, group, name, grr, status, homedir) + filtered := searchUser(users, ig, login, group, name, grr, status, homedir) for i := range filtered { fmt.Printf("%v\n\n",filtered[i].ToString()) @@ -61,14 +65,26 @@ func searchUserFunc(cmd *cobra.Command, args []string) error { return nil } -func searchUser(users []model.User, l, g, n, r, s, h string) []model.User { +func searchUser(users []model.User, ig bool, l, g, n, r, s, h string) []model.User { + return Filter(users, func(u model.User) bool { - return (r == "" || strings.Contains(u.GRR, r)) && - (n == "" || strings.Contains(u.Name, n)) && - (l == "" || strings.Contains(u.UID, l)) && - (g == "" || strings.Contains(u.GID, g)) && - (s == "" || strings.Contains(u.Status, s)) && - (h == "" || strings.Contains(u.Homedir, h)) + contains := func(src, substr string) bool { + if ig { + return strings.Contains( // normalize if set to ignore + strings.ToLower(src), + strings.ToLower(substr), + ) + } + return strings.Contains(src, substr) + } + + // Search + return (r == "" || contains(u.GRR, r)) && + (n == "" || contains(u.Name, n)) && + (l == "" || contains(u.UID, l)) && + (g == "" || contains(u.GID, g)) && + (s == "" || contains(u.Status, s)) && + (h == "" || contains(u.Homedir, h)) }) }