147173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner#include <unistd.h>
247173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner#include <sys/types.h>
347173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner#include <fcntl.h>
447173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner#include <stdlib.h>
547173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner#include <errno.h>
647173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner#include <string.h>
747173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner#include "selinux_internal.h"
847173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner#include "policy.h"
947173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner#include <stdio.h>
1047173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner#include <limits.h>
1147173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner
1247173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turnerint security_getenforce(void)
1347173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner{
1447173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner	int fd, ret, enforce = 0;
1547173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner	char path[PATH_MAX];
1647173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner	char buf[20];
1747173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner
1847173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner	if (!selinux_mnt) {
1947173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner		errno = ENOENT;
2047173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner		return -1;
2147173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner	}
2247173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner
2347173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner	snprintf(path, sizeof path, "%s/enforce", selinux_mnt);
2447173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner	fd = open(path, O_RDONLY);
2547173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner	if (fd < 0)
2647173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner		return -1;
2747173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner
2847173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner	memset(buf, 0, sizeof buf);
2947173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner	ret = read(fd, buf, sizeof buf - 1);
3047173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner	close(fd);
3147173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner	if (ret < 0)
3247173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner		return -1;
3347173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner
3447173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner	if (sscanf(buf, "%d", &enforce) != 1)
3547173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner		return -1;
3647173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner
3747173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner	return enforce;
3847173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner}
3947173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner
4047173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turnerhidden_def(security_getenforce)
41