1#include <stdlib.h> 2#include <stdio.h> 3#include <string.h> 4#include <errno.h> 5#include <selinux/selinux.h> 6#include <selinux/get_context_list.h> 7 8int main(int argc, char **argv) 9{ 10 char *seuser = NULL, *level = NULL; 11 char **contextlist; 12 int rc, n, i; 13 14 if (argc != 3) { 15 fprintf(stderr, "usage: %s linuxuser fromcon\n", argv[0]); 16 return 1; 17 } 18 19 if (!is_selinux_enabled()) { 20 fprintf(stderr, "%s may be used only on a SELinux enabled kernel.\n", argv[0]); 21 return 4; 22 } 23 24 rc = getseuserbyname(argv[1], &seuser, &level); 25 if (rc) { 26 fprintf(stderr, "getseuserbyname failed: %s\n", strerror(errno)); 27 return 2; 28 } 29 printf("seuser: %s, level %s\n", seuser, level); 30 31 rc = security_check_context(argv[2]); 32 if (rc) { 33 fprintf(stderr, "context '%s' is invalid\n", argv[2]); 34 free(seuser); 35 free(level); 36 return 5; 37 } 38 39 n = get_ordered_context_list_with_level(seuser, level, argv[2], &contextlist); 40 if (n < 0) { 41 fprintf(stderr, "get_ordered_context_list_with_level failed: %s\n", strerror(errno)); 42 free(seuser); 43 free(level); 44 return 3; 45 } 46 47 free(seuser); 48 free(level); 49 50 if (n == 0) 51 printf("no valid context found\n"); 52 53 for (i = 0; i < n; i++) 54 printf("Context %d\t%s\n", i, contextlist[i]); 55 56 freeconary(contextlist); 57 58 return EXIT_SUCCESS; 59} 60