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("can't 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