diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-15 20:46:53 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-15 20:46:53 +0000 |
commit | 19da58be2d9359a9641381feb559be0b918ef710 (patch) | |
tree | 109724175f07436696f51b14b5abbd3f4d704d6d /src/get_subid_owners.c | |
parent | Initial commit. (diff) | |
download | shadow-88a6d35ef45b99c2015601528aedd25455c28cde.tar.xz shadow-88a6d35ef45b99c2015601528aedd25455c28cde.zip |
Adding upstream version 1:4.13+dfsg1.upstream/1%4.13+dfsg1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/get_subid_owners.c')
-rw-r--r-- | src/get_subid_owners.c | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/src/get_subid_owners.c b/src/get_subid_owners.c new file mode 100644 index 0000000..36974b8 --- /dev/null +++ b/src/get_subid_owners.c @@ -0,0 +1,45 @@ +/* SPDX-License-Identifier: BSD-3-Clause */ + +#include <stdio.h> +#include "subid.h" +#include "stdlib.h" +#include "prototypes.h" +#include "shadowlog.h" + +const char *Prog; + +static void usage(void) +{ + fprintf(stderr, "Usage: [-g] %s subuid\n", Prog); + fprintf(stderr, " list uids who own the given subuid\n"); + fprintf(stderr, " pass -g to query a subgid\n"); + exit(EXIT_FAILURE); +} + +int main(int argc, char *argv[]) +{ + int i, n; + uid_t *uids; + + Prog = Basename (argv[0]); + log_set_progname(Prog); + log_set_logfd(stderr); + if (argc < 2) { + usage(); + } + if (argc == 3 && strcmp(argv[1], "-g") == 0) + n = subid_get_gid_owners(atoi(argv[2]), &uids); + else if (argc == 2 && strcmp(argv[1], "-h") == 0) + usage(); + else + n = subid_get_uid_owners(atoi(argv[1]), &uids); + if (n < 0) { + fprintf(stderr, "No owners found\n"); + exit(1); + } + for (i = 0; i < n; i++) { + printf("%d\n", uids[i]); + } + free(uids); + return 0; +} |