Home | History | Annotate | Download | only in toolbox
      1 #include <unistd.h>
      2 #include <stdlib.h>
      3 #include <stdio.h>
      4 #include <string.h>
      5 #include <sys/stat.h>
      6 #include <fcntl.h>
      7 #include <errno.h>
      8 #include <selinux/selinux.h>
      9 #include <errno.h>
     10 
     11 static int do_setsebool(int nargs, char **args) {
     12     const char *name = args[1];
     13     const char *value = args[2];
     14     SELboolean b;
     15 
     16     if (is_selinux_enabled() <= 0)
     17         return 0;
     18 
     19     b.name = name;
     20     if (!strcmp(value, "1") || !strcasecmp(value, "true") || !strcasecmp(value, "on"))
     21         b.value = 1;
     22     else if (!strcmp(value, "0") || !strcasecmp(value, "false") || !strcasecmp(value, "off"))
     23         b.value = 0;
     24     else {
     25         fprintf(stderr, "setsebool: invalid value %s\n", value);
     26         return -1;
     27     }
     28 
     29     if (security_set_boolean_list(1, &b, 0) < 0)
     30     {
     31         fprintf(stderr, "setsebool: could not set %s to %s:  %s", name, value, strerror(errno));
     32         return -1;
     33     }
     34 
     35     return 0;
     36 }
     37 
     38 int setsebool_main(int argc, char **argv)
     39 {
     40     if (argc != 3) {
     41         fprintf(stderr, "Usage:  %s name value\n", argv[0]);
     42         exit(1);
     43     }
     44 
     45     return do_setsebool(argc, argv);
     46 }
     47