1#include <stdio.h> 2#include <stdlib.h> 3#include <string.h> 4#include <unistd.h> 5#include <fcntl.h> 6#include <sys/stat.h> 7#include <sys/mman.h> 8#include <errno.h> 9#include <selinux/selinux.h> 10 11int load_policy_main(int argc, char **argv) 12{ 13 int fd, rc, vers; 14 struct stat sb; 15 void *map; 16 const char *path; 17 18 if (argc != 2) { 19 fprintf(stderr, "usage: %s policy-file\n", argv[0]); 20 exit(1); 21 } 22 23 path = argv[1]; 24 fd = open(path, O_RDONLY); 25 if (fd < 0) { 26 fprintf(stderr, "Could not open %s: %s\n", path, strerror(errno)); 27 exit(2); 28 } 29 30 if (fstat(fd, &sb) < 0) { 31 fprintf(stderr, "Could not stat %s: %s\n", path, strerror(errno)); 32 exit(3); 33 } 34 35 map = mmap(NULL, sb.st_size, PROT_READ, MAP_PRIVATE, fd, 0); 36 if (map == MAP_FAILED) { 37 fprintf(stderr, "Could not mmap %s: %s\n", path, strerror(errno)); 38 exit(4); 39 } 40 41 rc = security_load_policy(map, sb.st_size); 42 if (rc < 0) { 43 fprintf(stderr, "Could not load %s: %s\n", path, strerror(errno)); 44 exit(5); 45 } 46 munmap(map, sb.st_size); 47 close(fd); 48 exit(0); 49} 50