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 tarball for details.
   8 */
   9
  10#include "libbb.h"
  11
  12int getsebool_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
  13int getsebool_main(int argc, char **argv)
  14{
  15        int i, rc = 0, active, pending, len = 0;
  16        char **names;
  17        unsigned opt;
  18
  19        selinux_or_die();
  20        opt = getopt32(argv, "a");
  21
  22        if (opt) { /* -a */
  23                if (argc > 2)
  24                        bb_show_usage();
  25
  26                rc = security_get_boolean_names(&names, &len);
  27                if (rc)
  28                        bb_perror_msg_and_die("cannot get boolean names");
  29
  30                if (!len) {
  31                        puts("No booleans");
  32                        return 0;
  33                }
  34        }
  35
  36        if (!len) {
  37                if (argc < 2)
  38                        bb_show_usage();
  39                len = argc - 1;
  40                names = xmalloc(sizeof(char *) * len);
  41                for (i = 0; i < len; i++)
  42                        names[i] = xstrdup(argv[i + 1]);
  43        }
  44
  45        for (i = 0; i < len; i++) {
  46                active = security_get_boolean_active(names[i]);
  47                if (active < 0) {
  48                        bb_error_msg_and_die("error getting active value for %s", names[i]);
  49                }
  50                pending = security_get_boolean_pending(names[i]);
  51                if (pending < 0) {
  52                        bb_error_msg_and_die("error getting pending value for %s", names[i]);
  53                }
  54                printf("%s --> %s", names[i], (active ? "on" : "off"));
  55                if (pending != active)
  56                        printf(" pending: %s", (pending ? "on" : "off"));
  57                bb_putchar('\n');
  58        }
  59
  60        if (ENABLE_FEATURE_CLEAN_UP) {
  61                for (i = 0; i < len; i++)
  62                        free(names[i]);
  63                free(names);
  64        }
  65
  66        return rc;
  67}
  68