18290d1083ec7eee3f32265012f5d6be2774c4afcStephen Smalley#include <unistd.h> 28290d1083ec7eee3f32265012f5d6be2774c4afcStephen Smalley#include <stdlib.h> 38290d1083ec7eee3f32265012f5d6be2774c4afcStephen Smalley#include <stdio.h> 48290d1083ec7eee3f32265012f5d6be2774c4afcStephen Smalley#include <string.h> 58290d1083ec7eee3f32265012f5d6be2774c4afcStephen Smalley#include <sys/stat.h> 68290d1083ec7eee3f32265012f5d6be2774c4afcStephen Smalley#include <fcntl.h> 78290d1083ec7eee3f32265012f5d6be2774c4afcStephen Smalley#include <errno.h> 88290d1083ec7eee3f32265012f5d6be2774c4afcStephen Smalley#include <selinux/selinux.h> 98290d1083ec7eee3f32265012f5d6be2774c4afcStephen Smalley#include <errno.h> 108290d1083ec7eee3f32265012f5d6be2774c4afcStephen Smalley 118290d1083ec7eee3f32265012f5d6be2774c4afcStephen Smalleystatic int do_setsebool(int nargs, char **args) { 128290d1083ec7eee3f32265012f5d6be2774c4afcStephen Smalley SELboolean *b = alloca(nargs * sizeof(SELboolean)); 138290d1083ec7eee3f32265012f5d6be2774c4afcStephen Smalley char *v; 148290d1083ec7eee3f32265012f5d6be2774c4afcStephen Smalley int i; 158290d1083ec7eee3f32265012f5d6be2774c4afcStephen Smalley 168290d1083ec7eee3f32265012f5d6be2774c4afcStephen Smalley if (is_selinux_enabled() <= 0) 178290d1083ec7eee3f32265012f5d6be2774c4afcStephen Smalley return 0; 188290d1083ec7eee3f32265012f5d6be2774c4afcStephen Smalley 198290d1083ec7eee3f32265012f5d6be2774c4afcStephen Smalley for (i = 1; i < nargs; i++) { 208290d1083ec7eee3f32265012f5d6be2774c4afcStephen Smalley char *name = args[i]; 218290d1083ec7eee3f32265012f5d6be2774c4afcStephen Smalley v = strchr(name, '='); 228290d1083ec7eee3f32265012f5d6be2774c4afcStephen Smalley if (!v) { 238290d1083ec7eee3f32265012f5d6be2774c4afcStephen Smalley fprintf(stderr, "setsebool: argument %s had no =\n", name); 248290d1083ec7eee3f32265012f5d6be2774c4afcStephen Smalley return -1; 258290d1083ec7eee3f32265012f5d6be2774c4afcStephen Smalley } 268290d1083ec7eee3f32265012f5d6be2774c4afcStephen Smalley *v++ = 0; 278290d1083ec7eee3f32265012f5d6be2774c4afcStephen Smalley b[i-1].name = name; 288290d1083ec7eee3f32265012f5d6be2774c4afcStephen Smalley if (!strcmp(v, "1") || !strcasecmp(v, "true") || !strcasecmp(v, "on")) 298290d1083ec7eee3f32265012f5d6be2774c4afcStephen Smalley b[i-1].value = 1; 308290d1083ec7eee3f32265012f5d6be2774c4afcStephen Smalley else if (!strcmp(v, "0") || !strcasecmp(v, "false") || !strcasecmp(v, "off")) 318290d1083ec7eee3f32265012f5d6be2774c4afcStephen Smalley b[i-1].value = 0; 328290d1083ec7eee3f32265012f5d6be2774c4afcStephen Smalley else { 338290d1083ec7eee3f32265012f5d6be2774c4afcStephen Smalley fprintf(stderr, "setsebool: invalid value %s\n", v); 348290d1083ec7eee3f32265012f5d6be2774c4afcStephen Smalley return -1; 358290d1083ec7eee3f32265012f5d6be2774c4afcStephen Smalley } 368290d1083ec7eee3f32265012f5d6be2774c4afcStephen Smalley } 378290d1083ec7eee3f32265012f5d6be2774c4afcStephen Smalley 388290d1083ec7eee3f32265012f5d6be2774c4afcStephen Smalley if (security_set_boolean_list(nargs - 1, b, 0) < 0) 398290d1083ec7eee3f32265012f5d6be2774c4afcStephen Smalley { 408290d1083ec7eee3f32265012f5d6be2774c4afcStephen Smalley fprintf(stderr, "setsebool: unable to set booleans: %s", strerror(errno)); 418290d1083ec7eee3f32265012f5d6be2774c4afcStephen Smalley return -1; 428290d1083ec7eee3f32265012f5d6be2774c4afcStephen Smalley } 438290d1083ec7eee3f32265012f5d6be2774c4afcStephen Smalley 448290d1083ec7eee3f32265012f5d6be2774c4afcStephen Smalley return 0; 458290d1083ec7eee3f32265012f5d6be2774c4afcStephen Smalley} 468290d1083ec7eee3f32265012f5d6be2774c4afcStephen Smalley 478290d1083ec7eee3f32265012f5d6be2774c4afcStephen Smalleyint setsebool_main(int argc, char **argv) 488290d1083ec7eee3f32265012f5d6be2774c4afcStephen Smalley{ 498290d1083ec7eee3f32265012f5d6be2774c4afcStephen Smalley if (argc < 2) { 508290d1083ec7eee3f32265012f5d6be2774c4afcStephen Smalley fprintf(stderr, "Usage: %s name=value...\n", argv[0]); 518290d1083ec7eee3f32265012f5d6be2774c4afcStephen Smalley exit(1); 528290d1083ec7eee3f32265012f5d6be2774c4afcStephen Smalley } 538290d1083ec7eee3f32265012f5d6be2774c4afcStephen Smalley 548290d1083ec7eee3f32265012f5d6be2774c4afcStephen Smalley return do_setsebool(argc, argv); 558290d1083ec7eee3f32265012f5d6be2774c4afcStephen Smalley} 56