diff options
Diffstat (limited to 'src/check_subid_range.c')
-rw-r--r-- | src/check_subid_range.c | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/src/check_subid_range.c b/src/check_subid_range.c new file mode 100644 index 0000000..38703b6 --- /dev/null +++ b/src/check_subid_range.c @@ -0,0 +1,51 @@ +// This program is for testing purposes only. +// usage is "[program] owner [u|g] start count +// Exits 0 if owner has subid range starting start, of size count +// Exits 1 otherwise. + +#include <config.h> +#include <stdio.h> +#include <string.h> +#include <errno.h> +#include <stdbool.h> +#include <stdlib.h> +#include <sys/types.h> +#include <sys/stat.h> +#include <fcntl.h> +#include "defines.h" +#include "prototypes.h" +#include "subordinateio.h" +#include "idmapping.h" +#include "shadowlog.h" + +const char *Prog; + +int main(int argc, char **argv) +{ + char *owner; + unsigned long start, count; + bool check_uids; + Prog = Basename (argv[0]); + log_set_progname(Prog); + log_set_logfd(stderr); + + if (argc != 5) + exit(1); + + owner = argv[1]; + check_uids = argv[2][0] == 'u'; + start = strtoul(argv[3], NULL, 10); + if (start == ULONG_MAX && errno == ERANGE) + exit(1); + count = strtoul(argv[4], NULL, 10); + if (count == ULONG_MAX && errno == ERANGE) + exit(1); + if (check_uids) { + if (have_sub_uids(owner, start, count)) + exit(0); + exit(1); + } + if (have_sub_gids(owner, start, count)) + exit(0); + exit(1); +} |