16cd6a6acSopenharmony_ci#include <unistd.h>
26cd6a6acSopenharmony_ci#include <stdio.h>
36cd6a6acSopenharmony_ci#include <stdlib.h>
46cd6a6acSopenharmony_ci#include <ctype.h>
56cd6a6acSopenharmony_ci#include <string.h>
66cd6a6acSopenharmony_ci#include <strings.h>
76cd6a6acSopenharmony_ci#include <errno.h>
86cd6a6acSopenharmony_ci#include <selinux/selinux.h>
96cd6a6acSopenharmony_ci
106cd6a6acSopenharmony_cistatic __attribute__ ((__noreturn__)) void usage(const char *progname)
116cd6a6acSopenharmony_ci{
126cd6a6acSopenharmony_ci	fprintf(stderr, "usage:  %s [ Enforcing | Permissive | 1 | 0 ]\n",
136cd6a6acSopenharmony_ci		progname);
146cd6a6acSopenharmony_ci	exit(1);
156cd6a6acSopenharmony_ci}
166cd6a6acSopenharmony_ci
176cd6a6acSopenharmony_ciint main(int argc, char **argv)
186cd6a6acSopenharmony_ci{
196cd6a6acSopenharmony_ci	int rc = 0;
206cd6a6acSopenharmony_ci	if (argc != 2) {
216cd6a6acSopenharmony_ci		usage(argv[0]);
226cd6a6acSopenharmony_ci	}
236cd6a6acSopenharmony_ci
246cd6a6acSopenharmony_ci	if (is_selinux_enabled() <= 0) {
256cd6a6acSopenharmony_ci		fprintf(stderr, "%s: SELinux is disabled\n", argv[0]);
266cd6a6acSopenharmony_ci		return 1;
276cd6a6acSopenharmony_ci	}
286cd6a6acSopenharmony_ci	if (strlen(argv[1]) == 1 && (argv[1][0] == '0' || argv[1][0] == '1')) {
296cd6a6acSopenharmony_ci		rc = security_setenforce(atoi(argv[1]));
306cd6a6acSopenharmony_ci	} else {
316cd6a6acSopenharmony_ci		if (strcasecmp(argv[1], "enforcing") == 0) {
326cd6a6acSopenharmony_ci			rc = security_setenforce(1);
336cd6a6acSopenharmony_ci		} else if (strcasecmp(argv[1], "permissive") == 0) {
346cd6a6acSopenharmony_ci			rc = security_setenforce(0);
356cd6a6acSopenharmony_ci		} else
366cd6a6acSopenharmony_ci			usage(argv[0]);
376cd6a6acSopenharmony_ci	}
386cd6a6acSopenharmony_ci	if (rc < 0) {
396cd6a6acSopenharmony_ci		fprintf(stderr, "%s:  security_setenforce() failed:  %s\n", argv[0], strerror(errno));
406cd6a6acSopenharmony_ci		return 2;
416cd6a6acSopenharmony_ci	}
426cd6a6acSopenharmony_ci	return 0;
436cd6a6acSopenharmony_ci}
44