Implement's POSIX's -nouser and -nogroup primaries for find.
From 48e78e55f367a427cf613f199cfa9060af08a304 Mon Sep 17 00:00:00 2001 From: David Leonard <d+busy...@adaptive-enterprises.com> Date: Mon, 28 Mar 2022 11:14:13 +1000 Subject: [PATCH] find: implement -nouser, -nogroup
function old new delta parse_params 3363 3443 +80 func_nouser - 52 +52 func_nogroup - 52 +52 static.params 275 292 +17 packed_usage 34464 34473 +9 ------------------------------------------------------------------------------ (add/remove: 2/0 grow/shrink: 3/0 up/down: 210/0) Total: 210 bytes text data bss dec hex filename 1734831 16476 1816 1753123 1ac023 busybox_old 1735041 16476 1816 1753333 1ac0f5 busybox_unstripped --- findutils/find.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/findutils/find.c b/findutils/find.c index 40f66ab2e..2a0a867e3 100644 --- a/findutils/find.c +++ b/findutils/find.c @@ -197,6 +197,16 @@ //config: default y //config: depends on FIND //config: +//config:config FEATURE_FIND_NOUSER +//config: bool "Enable -nouser matching" +//config: default y +//config: depends on FIND +//config: +//config:config FEATURE_FIND_NOGROUP +//config: bool "Enable -nogroup matching" +//config: default y +//config: depends on FIND +//config: //config:config FEATURE_FIND_NOT //config: bool "Enable the 'not' (!) operator" //config: default y @@ -373,6 +383,12 @@ //usage: IF_FEATURE_FIND_GROUP( //usage: "\n -group NAME/ID File is owned by given group" //usage: ) +//usage: IF_FEATURE_FIND_NOUSER( +//usage: "\n -nouser File is owned by unknown uid" +//usage: ) +//usage: IF_FEATURE_FIND_NOGROUP( +//usage: "\n -nogroup File is owned by unknown gid" +//usage: ) //usage: IF_FEATURE_FIND_SIZE( //usage: "\n -size N[bck] File size is N (c:bytes,k:kbytes,b:512 bytes(def.))" //usage: "\n +/-N: file size is bigger/smaller than N" @@ -466,6 +482,8 @@ IF_FEATURE_FIND_NEWER( ACTS(newer, time_t newer_mtime;)) IF_FEATURE_FIND_INUM( ACTS(inum, ino_t inode_num;)) IF_FEATURE_FIND_SAMEFILE(ACTS(samefile, ino_t inode_num; dev_t device;)) IF_FEATURE_FIND_USER( ACTS(user, uid_t uid;)) +IF_FEATURE_FIND_NOUSER( ACTS(nouser)) +IF_FEATURE_FIND_NOUSER( ACTS(nogroup)) IF_FEATURE_FIND_SIZE( ACTS(size, char size_char; off_t size;)) IF_FEATURE_FIND_CONTEXT(ACTS(context, security_context_t context;)) IF_FEATURE_FIND_PAREN( ACTS(paren, action ***subexpr;)) @@ -891,6 +909,18 @@ ACTF(group) return (statbuf->st_gid == ap->gid); } #endif +#if ENABLE_FEATURE_FIND_NOUSER +ACTF(nouser) +{ + return !getpwuid(statbuf->st_uid); +} +#endif +#if ENABLE_FEATURE_FIND_NOGROUP +ACTF(nogroup) +{ + return !getgrgid(statbuf->st_gid); +} +#endif #if ENABLE_FEATURE_FIND_PRINT0 ACTF(print0) { @@ -1144,6 +1174,8 @@ static action*** parse_params(char **argv) IF_FEATURE_FIND_QUIT( PARM_quit ,) IF_FEATURE_FIND_DELETE( PARM_delete ,) IF_FEATURE_FIND_EMPTY( PARM_empty ,) + IF_FEATURE_FIND_NOUSER( PARM_nouser ,) + IF_FEATURE_FIND_NOGROUP(PARM_nogroup ,) IF_FEATURE_FIND_EXEC( PARM_exec ,) IF_FEATURE_FIND_EXEC_OK(PARM_ok ,) IF_FEATURE_FIND_EXECUTABLE(PARM_executable,) @@ -1196,6 +1228,8 @@ static action*** parse_params(char **argv) IF_FEATURE_FIND_QUIT( "-quit\0" ) IF_FEATURE_FIND_DELETE( "-delete\0" ) IF_FEATURE_FIND_EMPTY( "-empty\0" ) + IF_FEATURE_FIND_NOUSER( "-nouser\0" ) + IF_FEATURE_FIND_NOGROUP("-nogroup\0" ) IF_FEATURE_FIND_EXEC( "-exec\0" ) IF_FEATURE_FIND_EXEC_OK("-ok\0" ) IF_FEATURE_FIND_EXECUTABLE("-executable\0") @@ -1594,6 +1628,18 @@ static action*** parse_params(char **argv) ap->gid = xgroup2gid(arg1); } #endif +#if ENABLE_FEATURE_FIND_NOUSER + else if (parm == PARM_nouser) { + dbg("%d", __LINE__); + (void) ALLOC_ACTION(nouser); + } +#endif +#if ENABLE_FEATURE_FIND_NOGROUP + else if (parm == PARM_nogroup) { + dbg("%d", __LINE__); + (void) ALLOC_ACTION(nogroup); + } +#endif #if ENABLE_FEATURE_FIND_SIZE else if (parm == PARM_size) { /* -size n[bckw]: file uses n units of space -- 2.32.0
_______________________________________________ busybox mailing list busybox@busybox.net http://lists.busybox.net/mailman/listinfo/busybox