diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 14:54:37 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 14:54:37 +0000 |
commit | 97c26c1924b076ef23ebe4381558e8aa025712b2 (patch) | |
tree | 109724175f07436696f51b14b5abbd3f4d704d6d /src/free_subid_range.c | |
parent | Initial commit. (diff) | |
download | shadow-97c26c1924b076ef23ebe4381558e8aa025712b2.tar.xz shadow-97c26c1924b076ef23ebe4381558e8aa025712b2.zip |
Adding upstream version 1:4.13+dfsg1.upstream/1%4.13+dfsg1upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/free_subid_range.c')
-rw-r--r-- | src/free_subid_range.c | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/src/free_subid_range.c b/src/free_subid_range.c new file mode 100644 index 0000000..d9a2cd8 --- /dev/null +++ b/src/free_subid_range.c @@ -0,0 +1,55 @@ +/* SPDX-License-Identifier: BSD-3-Clause */ + +#include <stdio.h> +#include <unistd.h> +#include "subid.h" +#include "stdlib.h" +#include "prototypes.h" +#include "shadowlog.h" + +/* Test program for the subid freeing routine */ + +const char *Prog; + +static void usage(void) +{ + fprintf(stderr, "Usage: %s [-g] user start count\n", Prog); + fprintf(stderr, " Release a user's subuid (or with -g, subgid) range\n"); + exit(EXIT_FAILURE); +} + +int main(int argc, char *argv[]) +{ + int c; + bool ok; + struct subordinate_range range; + bool group = false; // get subuids by default + + Prog = Basename (argv[0]); + log_set_progname(Prog); + log_set_logfd(stderr); + while ((c = getopt(argc, argv, "g")) != EOF) { + switch(c) { + case 'g': group = true; break; + default: usage(); + } + } + argv = &argv[optind]; + argc = argc - optind; + if (argc < 3) + usage(); + range.owner = argv[0]; + range.start = atoi(argv[1]); + range.count = atoi(argv[2]); + if (group) + ok = subid_ungrant_gid_range(&range); + else + ok = subid_ungrant_uid_range(&range); + + if (!ok) { + fprintf(stderr, "Failed freeing id range\n"); + exit(EXIT_FAILURE); + } + + return 0; +} |