1#include <unistd.h>
2#include <sys/types.h>
3#include <stdio.h>
4#include <stdlib.h>
5#include <string.h>
6#include <errno.h>
7#include <selinux/selinux.h>
8
9int main(int argc, char **argv)
10{
11	security_class_t tclass;
12	int ret;
13
14	if (argc != 5) {
15		fprintf(stderr, "usage:  %s scontext tcontext tclass newcontext\n",
16			argv[0]);
17		exit(1);
18	}
19
20	if (security_check_context(argv[1])) {
21		fprintf(stderr, "%s:  invalid source context '%s'\n", argv[0], argv[1]);
22		exit(4);
23	}
24
25	if (security_check_context(argv[2])) {
26		fprintf(stderr, "%s:  invalid target context '%s'\n", argv[0], argv[2]);
27		exit(5);
28	}
29
30	tclass = string_to_security_class(argv[3]);
31	if (!tclass) {
32		fprintf(stderr, "%s:  invalid class '%s'\n", argv[0], argv[3]);
33		exit(2);
34	}
35
36	if (security_check_context(argv[4])) {
37		fprintf(stderr, "%s:  invalid new context '%s'\n", argv[0], argv[4]);
38		exit(6);
39	}
40
41	ret = security_validatetrans(argv[1], argv[2], tclass, argv[4]);
42	printf("security_validatetrans returned %d errno: %s\n", ret, strerror(errno));
43
44	return ret;
45}
46