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 "dso.h" 11#include <limits.h> 12 13int security_policyvers(void) 14{ 15 int fd, ret; 16 char path[PATH_MAX]; 17 char buf[20]; 18 unsigned vers = DEFAULT_POLICY_VERSION; 19 20 if (!selinux_mnt) { 21 errno = ENOENT; 22 return -1; 23 } 24 25 snprintf(path, sizeof path, "%s/policyvers", selinux_mnt); 26 fd = open(path, O_RDONLY); 27 if (fd < 0) { 28 if (errno == ENOENT) 29 return vers; 30 else 31 return -1; 32 } 33 memset(buf, 0, sizeof buf); 34 ret = read(fd, buf, sizeof buf - 1); 35 close(fd); 36 if (ret < 0) 37 return -1; 38 39 if (sscanf(buf, "%u", &vers) != 1) 40 return -1; 41 42 return vers; 43} 44 45hidden_def(security_policyvers) 46