1f074036424618c130dacb3464465a8b40bffef5Stephen Smalley#include <unistd.h>
2f074036424618c130dacb3464465a8b40bffef5Stephen Smalley#include <sys/types.h>
3f074036424618c130dacb3464465a8b40bffef5Stephen Smalley#include <fcntl.h>
4f074036424618c130dacb3464465a8b40bffef5Stephen Smalley#include <stdlib.h>
5f074036424618c130dacb3464465a8b40bffef5Stephen Smalley#include <errno.h>
6f074036424618c130dacb3464465a8b40bffef5Stephen Smalley#include <string.h>
7f074036424618c130dacb3464465a8b40bffef5Stephen Smalley#include "selinux_internal.h"
8f074036424618c130dacb3464465a8b40bffef5Stephen Smalley#include "policy.h"
9f074036424618c130dacb3464465a8b40bffef5Stephen Smalley#include <stdio.h>
10f074036424618c130dacb3464465a8b40bffef5Stephen Smalley#include <limits.h>
11f074036424618c130dacb3464465a8b40bffef5Stephen Smalley
12f074036424618c130dacb3464465a8b40bffef5Stephen Smalleyint security_setenforce(int value)
13f074036424618c130dacb3464465a8b40bffef5Stephen Smalley{
14f074036424618c130dacb3464465a8b40bffef5Stephen Smalley	int fd, ret;
15f074036424618c130dacb3464465a8b40bffef5Stephen Smalley	char path[PATH_MAX];
16f074036424618c130dacb3464465a8b40bffef5Stephen Smalley	char buf[20];
17f074036424618c130dacb3464465a8b40bffef5Stephen Smalley
18f074036424618c130dacb3464465a8b40bffef5Stephen Smalley	if (!selinux_mnt) {
19f074036424618c130dacb3464465a8b40bffef5Stephen Smalley		errno = ENOENT;
20f074036424618c130dacb3464465a8b40bffef5Stephen Smalley		return -1;
21f074036424618c130dacb3464465a8b40bffef5Stephen Smalley	}
22f074036424618c130dacb3464465a8b40bffef5Stephen Smalley
23f074036424618c130dacb3464465a8b40bffef5Stephen Smalley	snprintf(path, sizeof path, "%s/enforce", selinux_mnt);
24f074036424618c130dacb3464465a8b40bffef5Stephen Smalley	fd = open(path, O_RDWR);
25f074036424618c130dacb3464465a8b40bffef5Stephen Smalley	if (fd < 0)
26f074036424618c130dacb3464465a8b40bffef5Stephen Smalley		return -1;
27f074036424618c130dacb3464465a8b40bffef5Stephen Smalley
28f074036424618c130dacb3464465a8b40bffef5Stephen Smalley	snprintf(buf, sizeof buf, "%d", value);
29f074036424618c130dacb3464465a8b40bffef5Stephen Smalley	ret = write(fd, buf, strlen(buf));
30f074036424618c130dacb3464465a8b40bffef5Stephen Smalley	close(fd);
31f074036424618c130dacb3464465a8b40bffef5Stephen Smalley	if (ret < 0)
32f074036424618c130dacb3464465a8b40bffef5Stephen Smalley		return -1;
33f074036424618c130dacb3464465a8b40bffef5Stephen Smalley
34f074036424618c130dacb3464465a8b40bffef5Stephen Smalley	return 0;
35f074036424618c130dacb3464465a8b40bffef5Stephen Smalley}
36f074036424618c130dacb3464465a8b40bffef5Stephen Smalley
37f074036424618c130dacb3464465a8b40bffef5Stephen Smalleyhidden_def(security_setenforce)
38