16cd6a6acSopenharmony_ci#include <sepol/sepol.h>
26cd6a6acSopenharmony_ci#include <unistd.h>
36cd6a6acSopenharmony_ci#include <sys/types.h>
46cd6a6acSopenharmony_ci#include <stdio.h>
56cd6a6acSopenharmony_ci#include <stdlib.h>
66cd6a6acSopenharmony_ci#include <string.h>
76cd6a6acSopenharmony_ci#include <errno.h>
86cd6a6acSopenharmony_ci
96cd6a6acSopenharmony_civoid usage(char*) __attribute__((noreturn));
106cd6a6acSopenharmony_ci
116cd6a6acSopenharmony_civoid usage(char *progname)
126cd6a6acSopenharmony_ci{
136cd6a6acSopenharmony_ci	printf("usage:  %s policy context\n", progname);
146cd6a6acSopenharmony_ci	exit(1);
156cd6a6acSopenharmony_ci}
166cd6a6acSopenharmony_ci
176cd6a6acSopenharmony_ciint main(int argc, char **argv)
186cd6a6acSopenharmony_ci{
196cd6a6acSopenharmony_ci	FILE *fp;
206cd6a6acSopenharmony_ci
216cd6a6acSopenharmony_ci	if (argc != 3)
226cd6a6acSopenharmony_ci		usage(argv[0]);
236cd6a6acSopenharmony_ci
246cd6a6acSopenharmony_ci	fp = fopen(argv[1], "r");
256cd6a6acSopenharmony_ci	if (!fp) {
266cd6a6acSopenharmony_ci		fprintf(stderr, "Can't open '%s':  %s\n",
276cd6a6acSopenharmony_ci			argv[1], strerror(errno));
286cd6a6acSopenharmony_ci		exit(1);
296cd6a6acSopenharmony_ci	}
306cd6a6acSopenharmony_ci	if (sepol_set_policydb_from_file(fp) < 0) {
316cd6a6acSopenharmony_ci		fprintf(stderr, "Error while processing %s:  %s\n",
326cd6a6acSopenharmony_ci			argv[1], strerror(errno));
336cd6a6acSopenharmony_ci		exit(1);
346cd6a6acSopenharmony_ci	}
356cd6a6acSopenharmony_ci	fclose(fp);
366cd6a6acSopenharmony_ci
376cd6a6acSopenharmony_ci	if (sepol_check_context(argv[2]) < 0) {
386cd6a6acSopenharmony_ci		fprintf(stderr, "%s is not valid\n", argv[2]);
396cd6a6acSopenharmony_ci		exit(1);
406cd6a6acSopenharmony_ci	}
416cd6a6acSopenharmony_ci
426cd6a6acSopenharmony_ci	printf("%s is valid\n", argv[2]);
436cd6a6acSopenharmony_ci	exit(0);
446cd6a6acSopenharmony_ci}
45