]> granicus.if.org Git - sudo/commitdiff
When exporting sudoers in JSON format, use the same type of Options
authorTodd C. Miller <Todd.Miller@courtesan.com>
Mon, 24 Feb 2014 16:31:14 +0000 (09:31 -0700)
committerTodd C. Miller <Todd.Miller@courtesan.com>
Mon, 24 Feb 2014 16:31:14 +0000 (09:31 -0700)
object for both Defaults and Cmnd_Specs.

NEWS
plugins/sudoers/visudo_json.c

diff --git a/NEWS b/NEWS
index 212d3b69d34db07f9f8709cf2f1865aa0a91e52a..73898fcf1f3835058baa33c7d71824ce40385e91 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -43,6 +43,9 @@ What's new in Sudo 1.8.10?
    directory at boot time on AIX and HP-UX systems.  These systems
    either lack /var/run or do not clear it on boot.
 
+ * The JSON format used by "visudo -x" now uses the same type of
+   Options object for both Defaults and Cmnd_Specs.
+
 What's new in Sudo 1.8.9p5?
 
  * Fixed a compilation error on AIX when LDAP support is enabled.
index 0598b31f5b9f6c481138ae0b6b41760817cb4668..47d192798d5f9207e64b26c5468821501e066363 100644 (file)
@@ -779,7 +779,7 @@ print_cmndspec_json(FILE *fp, struct cmndspec *cs, struct cmndspec **nextp,
     if (cs->tags.nopasswd != UNSPEC || cs->tags.noexec != UNSPEC ||
        cs->tags.setenv != UNSPEC || cs->tags.log_input != UNSPEC ||
        cs->tags.log_output != UNSPEC) {
-       fprintf(fp, "%*s\"Options\": {\n", indent, "");
+       fprintf(fp, "%*s\"Options\": [\n", indent, "");
        indent += 4;
        if (cs->tags.nopasswd != UNSPEC) {
            value.type = JSON_BOOL;
@@ -787,39 +787,39 @@ print_cmndspec_json(FILE *fp, struct cmndspec *cs, struct cmndspec **nextp,
            last_one = cs->tags.noexec == UNSPEC &&
                cs->tags.setenv == UNSPEC && cs->tags.log_input == UNSPEC &&
                cs->tags.log_output == UNSPEC;
-           print_pair_json(fp, NULL, "authenticate", &value,
-               last_one ? "\n" : ",\n", indent);
+           print_pair_json(fp, "{ ", "authenticate", &value,
+               last_one ? " }\n" : " },\n", indent);
        }
        if (cs->tags.noexec != UNSPEC) {
            value.type = JSON_BOOL;
            value.u.boolean = cs->tags.noexec;
            last_one = cs->tags.setenv == UNSPEC &&
                cs->tags.log_input == UNSPEC && cs->tags.log_output == UNSPEC;
-           print_pair_json(fp, NULL, "noexec", &value,
-               last_one ? "\n" : ",\n", indent);
+           print_pair_json(fp, "{ ", "noexec", &value,
+               last_one ? " }\n" : " },\n", indent);
        }
        if (cs->tags.setenv != UNSPEC) {
            value.type = JSON_BOOL;
            value.u.boolean = cs->tags.setenv;
            last_one = cs->tags.log_input == UNSPEC &&
                cs->tags.log_output == UNSPEC;
-           print_pair_json(fp, NULL, "setenv", &value,
-               last_one ? "\n" : ",\n", indent);
+           print_pair_json(fp, "{ ", "setenv", &value,
+               last_one ? " }\n" : " },\n", indent);
        }
        if (cs->tags.log_input != UNSPEC) {
            value.type = JSON_BOOL;
            value.u.boolean = cs->tags.log_input;
            last_one = cs->tags.log_output == UNSPEC;
-           print_pair_json(fp, NULL, "log_input", &value,
-               last_one ? "\n" : ",\n", indent);
+           print_pair_json(fp, "{ ", "log_input", &value,
+               last_one ? " }\n" : " },\n", indent);
        }
        if (cs->tags.log_output != UNSPEC) {
            value.type = JSON_BOOL;
            value.u.boolean = cs->tags.log_output;
-           print_pair_json(fp, NULL, "log_output", &value, "\n", indent);
+           print_pair_json(fp, "{ ", "log_output", &value, " }\n", indent);
        }
        indent -= 4;
-       fprintf(fp, "%*s},\n", indent, "");
+       fprintf(fp, "%*s],\n", indent, "");
     }
 
 #ifdef HAVE_SELINUX