]> granicus.if.org Git - sudo/commitdiff
When outputting sudoers, if a word includes spaces, print it in
authorTodd C. Miller <Todd.Miller@sudo.ws>
Sat, 3 Feb 2018 13:18:47 +0000 (06:18 -0700)
committerTodd C. Miller <Todd.Miller@sudo.ws>
Sat, 3 Feb 2018 13:18:47 +0000 (06:18 -0700)
double quotes.  Also escape spaces in the command path.

plugins/sudoers/cvtsudoers.c

index 877c24783edae5b66ec89d49cf8feab0448c51e8..52223101bf912dd73cecdd755bcc7c6f7a0fb3be 100644 (file)
@@ -252,7 +252,7 @@ print_member_sudoers(struct sudo_lbuf *lbuf, struct member *m)
            c = (struct sudo_command *)m->name;
            if (m->negated)
                sudo_lbuf_append(lbuf, "!");
-           sudo_lbuf_append_quoted(lbuf, SUDOERS_QUOTED, "%s", c->cmnd);
+           sudo_lbuf_append_quoted(lbuf, SUDOERS_QUOTED" \t", "%s", c->cmnd);
            if (c->args) {
                sudo_lbuf_append(lbuf, " ");
                sudo_lbuf_append_quoted(lbuf, SUDOERS_QUOTED, "%s", c->args);
@@ -264,8 +264,14 @@ print_member_sudoers(struct sudo_lbuf *lbuf, struct member *m)
                m->name[strspn(m->name + 1, "0123456789") + 1] == '\0') {
                sudo_lbuf_append(lbuf, "%s%s", m->negated ? "!" : "", m->name);
            } else {
-               sudo_lbuf_append_quoted(lbuf, SUDOERS_QUOTED, "%s%s",
-                   m->negated ? "!" : "", m->name);
+               if (strpbrk(m->name, " \t") != NULL) {
+                   sudo_lbuf_append(lbuf, "\"");
+                   sudo_lbuf_append_quoted(lbuf, "\"", "%s", m->name);
+                   sudo_lbuf_append(lbuf, "\"");
+               } else {
+                   sudo_lbuf_append_quoted(lbuf, SUDOERS_QUOTED, "%s%s",
+                       m->negated ? "!" : "", m->name);
+               }
            }
            break;
     }