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