summaryrefslogtreecommitdiff
path: root/selinux/getsebool.c (plain)
blob: fce478f5b7c3c3d2a2c2ce54aab7ec4bfa218166
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//config:config GETSEBOOL
10//config: bool "getsebool"
11//config: default n
12//config: depends on SELINUX
13//config: help
14//config: Enable support to get SELinux boolean values.
15
16//applet:IF_GETSEBOOL(APPLET(getsebool, BB_DIR_USR_SBIN, BB_SUID_DROP))
17
18//kbuild:lib-$(CONFIG_GETSEBOOL) += getsebool.o
19
20//usage:#define getsebool_trivial_usage
21//usage: "-a or getsebool boolean..."
22//usage:#define getsebool_full_usage "\n\n"
23//usage: " -a Show all selinux booleans"
24
25#include "libbb.h"
26
27int getsebool_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
28int getsebool_main(int argc, char **argv)
29{
30 int i, rc = 0, active, pending, len = 0;
31 char **names;
32 unsigned opt;
33
34 selinux_or_die();
35 opt = getopt32(argv, "a");
36
37 if (opt) { /* -a */
38 if (argc > 2)
39 bb_show_usage();
40
41 rc = security_get_boolean_names(&names, &len);
42 if (rc)
43 bb_perror_msg_and_die("can't get boolean names");
44
45 if (!len) {
46 puts("No booleans");
47 return 0;
48 }
49 }
50
51 if (!len) {
52 if (argc < 2)
53 bb_show_usage();
54 len = argc - 1;
55 names = xmalloc(sizeof(char *) * len);
56 for (i = 0; i < len; i++)
57 names[i] = xstrdup(argv[i + 1]);
58 }
59
60 for (i = 0; i < len; i++) {
61 active = security_get_boolean_active(names[i]);
62 if (active < 0) {
63 bb_error_msg_and_die("error getting active value for %s", names[i]);
64 }
65 pending = security_get_boolean_pending(names[i]);
66 if (pending < 0) {
67 bb_error_msg_and_die("error getting pending value for %s", names[i]);
68 }
69 printf("%s --> %s", names[i], (active ? "on" : "off"));
70 if (pending != active)
71 printf(" pending: %s", (pending ? "on" : "off"));
72 bb_putchar('\n');
73 }
74
75 if (ENABLE_FEATURE_CLEAN_UP) {
76 for (i = 0; i < len; i++)
77 free(names[i]);
78 free(names);
79 }
80
81 return rc;
82}
83