blob: eb5aba6748513813212dbb6edab9450ccf36fcba [file] [log] [blame]
Stephen Smalley8290d102012-01-13 08:53:56 -05001#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}