1 #include <unistd.h>
2 #include <sys/types.h>
3 #include <fcntl.h>
4 #include <stdlib.h>
5 #include <errno.h>
6 #include <string.h>
7 #include "selinux_internal.h"
8 #include <stdio.h>
9 #include "policy.h"
10 #include <limits.h>
11
security_policyvers(void)12 int security_policyvers(void)
13 {
14 int fd, ret;
15 char path[PATH_MAX];
16 char buf[20];
17 unsigned vers = DEFAULT_POLICY_VERSION;
18
19 if (!selinux_mnt) {
20 errno = ENOENT;
21 return -1;
22 }
23
24 snprintf(path, sizeof path, "%s/policyvers", selinux_mnt);
25 fd = open(path, O_RDONLY | O_CLOEXEC);
26 if (fd < 0) {
27 if (errno == ENOENT)
28 return vers;
29 else
30 return -1;
31 }
32 memset(buf, 0, sizeof buf);
33 ret = read(fd, buf, sizeof buf - 1);
34 close(fd);
35 if (ret < 0)
36 return -1;
37
38 if (sscanf(buf, "%u", &vers) != 1)
39 return -1;
40
41 return vers;
42 }
43
44