xref: /aosp_15_r20/external/selinux/libsepol/utils/chkcon.c (revision 2d543d20722ada2425b5bdab9d0d1d29470e7bba)
1*2d543d20SAndroid Build Coastguard Worker #include <sepol/sepol.h>
2*2d543d20SAndroid Build Coastguard Worker #include <unistd.h>
3*2d543d20SAndroid Build Coastguard Worker #include <sys/types.h>
4*2d543d20SAndroid Build Coastguard Worker #include <stdio.h>
5*2d543d20SAndroid Build Coastguard Worker #include <stdlib.h>
6*2d543d20SAndroid Build Coastguard Worker #include <string.h>
7*2d543d20SAndroid Build Coastguard Worker #include <errno.h>
8*2d543d20SAndroid Build Coastguard Worker 
9*2d543d20SAndroid Build Coastguard Worker void usage(char*) __attribute__((noreturn));
10*2d543d20SAndroid Build Coastguard Worker 
usage(char * progname)11*2d543d20SAndroid Build Coastguard Worker void usage(char *progname)
12*2d543d20SAndroid Build Coastguard Worker {
13*2d543d20SAndroid Build Coastguard Worker 	printf("usage:  %s policy context\n", progname);
14*2d543d20SAndroid Build Coastguard Worker 	exit(1);
15*2d543d20SAndroid Build Coastguard Worker }
16*2d543d20SAndroid Build Coastguard Worker 
main(int argc,char ** argv)17*2d543d20SAndroid Build Coastguard Worker int main(int argc, char **argv)
18*2d543d20SAndroid Build Coastguard Worker {
19*2d543d20SAndroid Build Coastguard Worker 	FILE *fp;
20*2d543d20SAndroid Build Coastguard Worker 
21*2d543d20SAndroid Build Coastguard Worker 	if (argc != 3)
22*2d543d20SAndroid Build Coastguard Worker 		usage(argv[0]);
23*2d543d20SAndroid Build Coastguard Worker 
24*2d543d20SAndroid Build Coastguard Worker 	fp = fopen(argv[1], "r");
25*2d543d20SAndroid Build Coastguard Worker 	if (!fp) {
26*2d543d20SAndroid Build Coastguard Worker 		fprintf(stderr, "Can't open '%s':  %s\n",
27*2d543d20SAndroid Build Coastguard Worker 			argv[1], strerror(errno));
28*2d543d20SAndroid Build Coastguard Worker 		exit(1);
29*2d543d20SAndroid Build Coastguard Worker 	}
30*2d543d20SAndroid Build Coastguard Worker 	if (sepol_set_policydb_from_file(fp) < 0) {
31*2d543d20SAndroid Build Coastguard Worker 		fprintf(stderr, "Error while processing %s:  %s\n",
32*2d543d20SAndroid Build Coastguard Worker 			argv[1], strerror(errno));
33*2d543d20SAndroid Build Coastguard Worker 		exit(1);
34*2d543d20SAndroid Build Coastguard Worker 	}
35*2d543d20SAndroid Build Coastguard Worker 	fclose(fp);
36*2d543d20SAndroid Build Coastguard Worker 
37*2d543d20SAndroid Build Coastguard Worker 	if (sepol_check_context(argv[2]) < 0) {
38*2d543d20SAndroid Build Coastguard Worker 		fprintf(stderr, "%s is not valid\n", argv[2]);
39*2d543d20SAndroid Build Coastguard Worker 		exit(1);
40*2d543d20SAndroid Build Coastguard Worker 	}
41*2d543d20SAndroid Build Coastguard Worker 
42*2d543d20SAndroid Build Coastguard Worker 	printf("%s is valid\n", argv[2]);
43*2d543d20SAndroid Build Coastguard Worker 	exit(0);
44*2d543d20SAndroid Build Coastguard Worker }
45