Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7ec62dbd authored by Dima Zavin's avatar Dima Zavin Committed by Android Git Automerger
Browse files

am 82ea44f8: Merge "Change setsebool syntax to be consistent with other init built-ins."

* commit '82ea44f8':
  Change setsebool syntax to be consistent with other init built-ins.
parents 22e91366 82ea44f8
Loading
Loading
Loading
Loading
+17 −22
Original line number Diff line number Diff line
@@ -754,34 +754,29 @@ int do_restorecon(int nargs, char **args) {
}

int do_setsebool(int nargs, char **args) {
    SELboolean *b = alloca(nargs * sizeof(SELboolean));
    char *v;
    int i;
    const char *name = args[1];
    const char *value = args[2];
    SELboolean b;
    int ret;

    if (is_selinux_enabled() <= 0)
        return 0;

    for (i = 1; i < nargs; i++) {
        char *name = args[i];
        v = strchr(name, '=');
        if (!v) {
            ERROR("setsebool: argument %s had no =\n", name);
            return -EINVAL;
        }
        *v++ = 0;
        b[i-1].name = name;
        if (!strcmp(v, "1") || !strcasecmp(v, "true") || !strcasecmp(v, "on"))
            b[i-1].value = 1;
        else if (!strcmp(v, "0") || !strcasecmp(v, "false") || !strcasecmp(v, "off"))
            b[i-1].value = 0;
    b.name = name;
    if (!strcmp(value, "1") || !strcasecmp(value, "true") || !strcasecmp(value, "on"))
        b.value = 1;
    else if (!strcmp(value, "0") || !strcasecmp(value, "false") || !strcasecmp(value, "off"))
        b.value = 0;
    else {
            ERROR("setsebool: invalid value %s\n", v);
        ERROR("setsebool: invalid value %s\n", value);
        return -EINVAL;
    }
    }

    if (security_set_boolean_list(nargs - 1, b, 0) < 0)
        return -errno;
    if (security_set_boolean_list(1, &b, 0) < 0) {
        ret = -errno;
        ERROR("setsebool: could not set %s to %s\n", name, value);
        return ret;
    }

    return 0;
}
+1 −1
Original line number Diff line number Diff line
@@ -78,7 +78,7 @@ enum {
    KEYWORD(setkey,      COMMAND, 0, do_setkey)
    KEYWORD(setprop,     COMMAND, 2, do_setprop)
    KEYWORD(setrlimit,   COMMAND, 3, do_setrlimit)
    KEYWORD(setsebool,   COMMAND, 1, do_setsebool)
    KEYWORD(setsebool,   COMMAND, 2, do_setsebool)
    KEYWORD(socket,      OPTION,  0, 0)
    KEYWORD(start,       COMMAND, 1, do_start)
    KEYWORD(stop,        COMMAND, 1, do_stop)
+1 −1
Original line number Diff line number Diff line
@@ -213,7 +213,7 @@ setprop <name> <value>
setrlimit <resource> <cur> <max>
   Set the rlimit for a resource.

setsebool <name>=<value>
setsebool <name> <value>
   Set SELinux boolean <name> to <value>.
   <value> may be 1|true|on or 0|false|off

+15 −24
Original line number Diff line number Diff line
@@ -9,35 +9,26 @@
#include <errno.h>

static int do_setsebool(int nargs, char **args) {
    SELboolean *b = alloca(nargs * sizeof(SELboolean));
    char *v;
    int i;
    const char *name = args[1];
    const char *value = args[2];
    SELboolean b;

    if (is_selinux_enabled() <= 0)
        return 0;

    for (i = 1; i < nargs; i++) {
        char *name = args[i];
        v = strchr(name, '=');
        if (!v) {
            fprintf(stderr, "setsebool: argument %s had no =\n", name);
            return -1;
        }
        *v++ = 0;
        b[i-1].name = name;
        if (!strcmp(v, "1") || !strcasecmp(v, "true") || !strcasecmp(v, "on"))
            b[i-1].value = 1;
        else if (!strcmp(v, "0") || !strcasecmp(v, "false") || !strcasecmp(v, "off"))
            b[i-1].value = 0;
    b.name = name;
    if (!strcmp(value, "1") || !strcasecmp(value, "true") || !strcasecmp(value, "on"))
        b.value = 1;
    else if (!strcmp(value, "0") || !strcasecmp(value, "false") || !strcasecmp(value, "off"))
        b.value = 0;
    else {
            fprintf(stderr, "setsebool: invalid value %s\n", v);
        fprintf(stderr, "setsebool: invalid value %s\n", value);
        return -1;
    }
    }

    if (security_set_boolean_list(nargs - 1, b, 0) < 0)
    if (security_set_boolean_list(1, &b, 0) < 0)
    {
        fprintf(stderr, "setsebool: unable to set booleans: %s", strerror(errno));
        fprintf(stderr, "setsebool: could not set %s to %s:  %s", name, value, strerror(errno));
        return -1;
    }

@@ -46,8 +37,8 @@ static int do_setsebool(int nargs, char **args) {

int setsebool_main(int argc, char **argv)
{
    if (argc < 2) {
        fprintf(stderr, "Usage:  %s name=value...\n", argv[0]);
    if (argc != 3) {
        fprintf(stderr, "Usage:  %s name value\n", argv[0]);
        exit(1);
    }