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