113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#include <stdlib.h>
213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#include <stdio.h>
313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#include <string.h>
413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#include <errno.h>
513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#include <selinux/selinux.h>
613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#include <selinux/get_context_list.h>
713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle
813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindleint main(int argc, char **argv)
913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle{
1013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	char *seuser = NULL, *level = NULL;
119eb9c9327563014ad6a807814e7975424642d5b9Stephen Smalley	char **contextlist;
1213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	int rc, n, i;
1313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle
1413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	if (argc != 3) {
1513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle		fprintf(stderr, "usage:  %s linuxuser fromcon\n", argv[0]);
1613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle		exit(1);
1713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	}
1813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle
1913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	rc = getseuserbyname(argv[1], &seuser, &level);
2013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	if (rc) {
2113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle		fprintf(stderr, "getseuserbyname failed:  %s\n",
2213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle			strerror(errno));
2313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle		exit(2);
2413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	}
2513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	printf("seuser:  %s, level %s\n", seuser, level);
2613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	n = get_ordered_context_list_with_level(seuser, level, argv[2],
2713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle						&contextlist);
2813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	if (n <= 0) {
2913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle		fprintf(stderr,
3013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle			"get_ordered_context_list_with_level failed:  %s\n",
3113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle			strerror(errno));
3213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle		exit(3);
3313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	}
3413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	free(seuser);
3513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	free(level);
3613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	for (i = 0; i < n; i++)
3713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle		printf("Context %d\t%s\n", i, contextlist[i]);
3813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	freeconary(contextlist);
3913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	exit(0);
4013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle}
41