• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
load_policy_main(int argc,char ** argv)11 int load_policy_main(int argc, char **argv)
12 {
13     int fd, rc;
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