113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#include <sepol/sepol.h>
213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#include <unistd.h>
313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#include <sys/types.h>
413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#include <stdio.h>
513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#include <stdlib.h>
613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#include <string.h>
713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#include <errno.h>
813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle
984f6ac246f5980f831a5777d53c0a0bd6ad17d3cStephen Smalleyvoid usage(char*) __attribute__((noreturn));
1084f6ac246f5980f831a5777d53c0a0bd6ad17d3cStephen Smalley
1113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindlevoid usage(char *progname)
1213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle{
1313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	printf("usage:  %s policy context\n", progname);
1413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	exit(1);
1513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle}
1613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle
1713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindleint main(int argc, char **argv)
1813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle{
1913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	FILE *fp;
2013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle
2113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	if (argc != 3)
2213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle		usage(argv[0]);
2313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle
2413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	fp = fopen(argv[1], "r");
2513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	if (!fp) {
2613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle		fprintf(stderr, "Can't open '%s':  %s\n",
2713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle			argv[1], strerror(errno));
2813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle		exit(1);
2913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	}
3013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	if (sepol_set_policydb_from_file(fp) < 0) {
3113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle		fprintf(stderr, "Error while processing %s:  %s\n",
3213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle			argv[1], strerror(errno));
3313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle		exit(1);
3413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	}
3513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	fclose(fp);
3613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle
3713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	if (sepol_check_context(argv[2]) < 0) {
3813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle		fprintf(stderr, "%s is not valid\n", argv[2]);
3913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle		exit(1);
4013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	}
4113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle
4213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	printf("%s is valid\n", argv[2]);
4313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle	exit(0);
4413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle}
45