[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH] chgrp: --from parameter similar to chown
From: |
Ed Neville |
Subject: |
Re: [PATCH] chgrp: --from parameter similar to chown |
Date: |
Tue, 31 Oct 2023 17:51:39 +0000 |
Hi there,
Please could one of the maintainers take a look at this patch? Is it
ready for merge? It should be a straight forward change that brings the
same functionality from chown.
Best regards,
Ed
On 2023-09-27 20:32+0100, Ed Neville wrote:
> A friend at work noticed that chown had a --from and needed that
> functionality in chgrp.
> ---
> src/chgrp.c | 26 +++++++++++++++++++++++++-
> 1 file changed, 25 insertions(+), 1 deletion(-)
>
> diff --git a/src/chgrp.c b/src/chgrp.c
> index 6ec3b4d99..f780a6fc2 100644
> --- a/src/chgrp.c
> +++ b/src/chgrp.c
> @@ -28,6 +28,7 @@
> #include "quote.h"
> #include "root-dev-ino.h"
> #include "xstrtol.h"
> +#include "userspec.h"
>
> /* The official name of this program (e.g., no 'g' prefix). */
> #define PROGRAM_NAME "chgrp"
> @@ -49,6 +50,7 @@ static char *reference_file;
> enum
> {
> DEREFERENCE_OPTION = CHAR_MAX + 1,
> + FROM_OPTION,
> NO_PRESERVE_ROOT,
> PRESERVE_ROOT,
> REFERENCE_FILE_OPTION
> @@ -59,6 +61,7 @@ static struct option const long_options[] =
> {"recursive", no_argument, nullptr, 'R'},
> {"changes", no_argument, nullptr, 'c'},
> {"dereference", no_argument, nullptr, DEREFERENCE_OPTION},
> + {"from", required_argument, nullptr, FROM_OPTION},
> {"no-dereference", no_argument, nullptr, 'h'},
> {"no-preserve-root", no_argument, nullptr, NO_PRESERVE_ROOT},
> {"preserve-root", no_argument, nullptr, PRESERVE_ROOT},
> @@ -121,6 +124,11 @@ With --reference, change the group of each FILE to that
> of RFILE.\n\
> -v, --verbose output a diagnostic for every file processed\n\
> "), stdout);
> fputs (_("\
> + --from=CURRENT_OWNER:CURRENT_GROUP\n\
> + change the group of each file only if its current\n\
> + owner and/or group match those specified here.\n\
> + Either may be omitted, in which case a match is \n\
> + not required for the omitted attribute\n\
> --dereference affect the referent of each symbolic link (this
> is\n\
> the default), rather than the symbolic link
> itself\n\
> -h, --no-dereference affect symbolic links instead of any referenced
> file\n\
> @@ -184,6 +192,11 @@ main (int argc, char **argv)
> bool ok;
> int optc;
>
> + /* Change the group of a file only if it has this uid/gid.
> + * -1 means there's no restriction. */
> + uid_t required_uid = -1;
> + gid_t required_gid = -1;
> +
> initialize_main (&argc, &argv);
> set_program_name (argv[0]);
> setlocale (LC_ALL, "");
> @@ -232,6 +245,17 @@ main (int argc, char **argv)
> reference_file = optarg;
> break;
>
> + case FROM_OPTION:
> + {
> + bool warn;
> + char const *e = parse_user_spec_warn (optarg,
> + &required_uid,
> &required_gid,
> + nullptr, nullptr, &warn);
> + if (e)
> + error (warn ? 0 : EXIT_FAILURE, 0, "%s: %s", e, quote
> (optarg));
> + break;
> + }
> +
> case 'R':
> chopt.recurse = true;
> break;
> @@ -309,7 +333,7 @@ main (int argc, char **argv)
> bit_flags |= FTS_DEFER_STAT;
> ok = chown_files (argv + optind, bit_flags,
> (uid_t) -1, gid,
> - (uid_t) -1, (gid_t) -1, &chopt);
> + (uid_t) required_uid, required_gid, &chopt);
>
> main_exit (ok ? EXIT_SUCCESS : EXIT_FAILURE);
> }
> --
> 2.39.2
>
>
- Re: [PATCH] chgrp: --from parameter similar to chown,
Ed Neville <=