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