find -user support by Natanael Copa <natanael.copa@gmail.com>
authorDenis Vlasenko <vda.linux@googlemail.com>
Fri, 2 Feb 2007 01:17:52 +0000 (01:17 -0000)
committerDenis Vlasenko <vda.linux@googlemail.com>
Fri, 2 Feb 2007 01:17:52 +0000 (01:17 -0000)
findutils/Config.in
findutils/find.c

index 5a4476a9875e59cacbfc1e733d4f7db16628c62e..73ce36f51e6d958077bf453ba0279654846ecfc5 100644 (file)
@@ -83,6 +83,13 @@ config FEATURE_FIND_EXEC
          Support the 'find -exec' option for executing commands based upon
          the files matched.
 
+config FEATURE_FIND_USER
+       bool "Enable username/uid matching (-user) option"
+       default y
+       depends on FIND
+       help
+         Support the 'find -user' option for searching by username or uid.
+
 config GREP
        bool "grep"
        default n
index 0c22ee6d1b6e434c95139d2658a66f0844b0e6f1..2decb3608d213f114f0c24373556dd2710fc005a 100644 (file)
@@ -68,6 +68,7 @@ USE_FEATURE_FIND_MMIN(  ACTS(mmin,  char mmin_char; unsigned mmin_mins;))
 USE_FEATURE_FIND_NEWER( ACTS(newer, time_t newer_mtime;))
 USE_FEATURE_FIND_INUM(  ACTS(inum,  ino_t inode_num;))
 USE_FEATURE_FIND_EXEC(  ACTS(exec,  char **exec_argv; int *subst_count; int exec_argc;))
+USE_FEATURE_FIND_USER(  ACTS(user,  int uid;))
 USE_DESKTOP(            ACTS(paren, action ***subexpr;))
 USE_DESKTOP(            ACTS(size,  off_t size;))
 USE_DESKTOP(            ACTS(prune))
@@ -212,6 +213,13 @@ ACTF(exec)
 }
 #endif
 
+#if ENABLE_FEATURE_FIND_USER
+ACTF(user)
+{
+       return (statbuf->st_uid == ap->uid);
+}
+#endif
+
 #if ENABLE_FEATURE_FIND_PRINT0
 ACTF(print0)
 {
@@ -478,6 +486,17 @@ static action*** parse_params(char **argv)
                                ap->subst_count[i] = count_subst(ap->exec_argv[i]);
                }
 #endif
+#ifdef ENABLE_FEATURE_FIND_USER
+               else if (strcmp(arg, "-user") == 0) {
+                       action_user *ap;
+                       if (!*++argv)
+                               bb_error_msg_and_die(bb_msg_requires_arg, arg);
+                       ap = ALLOC_ACTION(user);
+                       ap->uid = bb_strtou(arg1, NULL, 10);
+                       if (errno)
+                               ap->uid = xuname2uid(arg1);
+               }
+#endif
 #if ENABLE_DESKTOP
                else if (LONE_CHAR(arg, '(')) {
                        action_paren *ap;