busybox/selinux/getsebool.c
<<
>>
Prefs
   1/*
   2 * getsebool
   3 *
   4 * Based on libselinux 1.33.1
   5 * Port to BusyBox  Hiroshi Shinji <shiroshi@my.email.ne.jp>
   6 *
   7 * Licensed under GPLv2, see file LICENSE in this source tree.
   8 */
   9
  10//usage:#define getsebool_trivial_usage
  11//usage:       "-a or getsebool boolean..."
  12//usage:#define getsebool_full_usage "\n\n"
  13//usage:       "        -a      Show all selinux booleans"
  14
  15#include "libbb.h"
  16
  17int getsebool_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
  18int getsebool_main(int argc, char **argv)
  19{
  20        int i, rc = 0, active, pending, len = 0;
  21        char **names;
  22        unsigned opt;
  23
  24        selinux_or_die();
  25        opt = getopt32(argv, "a");
  26
  27        if (opt) { /* -a */
  28                if (argc > 2)
  29                        bb_show_usage();
  30
  31                rc = security_get_boolean_names(&names, &len);
  32                if (rc)
  33                        bb_perror_msg_and_die("can't get boolean names");
  34
  35                if (!len) {
  36                        puts("No booleans");
  37                        return 0;
  38                }
  39        }
  40
  41        if (!len) {
  42                if (argc < 2)
  43                        bb_show_usage();
  44                len = argc - 1;
  45                names = xmalloc(sizeof(char *) * len);
  46                for (i = 0; i < len; i++)
  47                        names[i] = xstrdup(argv[i + 1]);
  48        }
  49
  50        for (i = 0; i < len; i++) {
  51                active = security_get_boolean_active(names[i]);
  52                if (active < 0) {
  53                        bb_error_msg_and_die("error getting active value for %s", names[i]);
  54                }
  55                pending = security_get_boolean_pending(names[i]);
  56                if (pending < 0) {
  57                        bb_error_msg_and_die("error getting pending value for %s", names[i]);
  58                }
  59                printf("%s --> %s", names[i], (active ? "on" : "off"));
  60                if (pending != active)
  61                        printf(" pending: %s", (pending ? "on" : "off"));
  62                bb_putchar('\n');
  63        }
  64
  65        if (ENABLE_FEATURE_CLEAN_UP) {
  66                for (i = 0; i < len; i++)
  67                        free(names[i]);
  68                free(names);
  69        }
  70
  71        return rc;
  72}
  73