shadow/src/new_subid_range.c
Serge Hallyn 0a7888b1fa Create a new libsubid
Closes #154

Currently this has three functions: one which returns the
list of subuid ranges for a user, one returning the subgids,
and one which frees the ranges lists.

I might be mistaken about what -disable-man means;  some of
the code suggests it means just don't re-generate them, but
not totally ignore them.  But that doesn't seem to really work,
so let's just ignore man/ when -disable-man.

Remove --disable-shared.  I'm not sure why it was there, but it stems
from long, long ago, and I suspect it comes from some ancient
toolchain bug.

Create a tests/run_some, a shorter version of run_all.  I'll
slowly add tests to this as I verify they work, then I can
work on fixing the once which don't.

Also, don't touch man/ if not -enable-man.

Changelog:
	Apr 22: change the subid list api as recomended by Dan Walsh.
	Apr 23: implement get_subid_owner
	Apr 24: implement range add/release
	Apr 25: finish tests and rebase
	May 10: make @owner const

Signed-off-by: Serge Hallyn <serge@hallyn.com>
2020-06-07 12:11:58 -05:00

58 lines
1.3 KiB
C

#include <stdio.h>
#include <unistd.h>
#include "api.h"
#include "stdlib.h"
#include "prototypes.h"
/* Test program for the subid creation routine */
const char *Prog;
void usage(void)
{
fprintf(stderr, "Usage: %s [-g] [-n] user count\n", Prog);
fprintf(stderr, " Find a subuid (or with -g, subgid) range for user\n");
fprintf(stderr, " If -n is given, a new range will be created even if one exists\n");
fprintf(stderr, " count defaults to 65536\n");
exit(EXIT_FAILURE);
}
int main(int argc, char *argv[])
{
int c;
struct subordinate_range range;
bool makenew = false; // reuse existing by default
bool group = false; // get subuids by default
bool ok;
Prog = Basename (argv[0]);
while ((c = getopt(argc, argv, "gn")) != EOF) {
switch(c) {
case 'n': makenew = true; break;
case 'g': group = true; break;
default: usage();
}
}
argv = &argv[optind];
argc = argc - optind;
if (argc == 0)
usage();
range.owner = argv[0];
range.start = 0;
range.count = 65536;
if (argc > 1)
range.count = atoi(argv[1]);
if (group)
ok = grant_subgid_range(&range, !makenew);
else
ok = grant_subuid_range(&range, !makenew);
if (!ok) {
fprintf(stderr, "Failed creating new id range\n");
exit(EXIT_FAILURE);
}
printf("Subuid range %lu:%lu\n", range.start, range.count);
return 0;
}