Special case comment lines in lbufs.

This commit is contained in:
Todd C. Miller
2018-03-04 07:03:41 -07:00
parent c9b70940cf
commit 670d8e6d77
4 changed files with 24 additions and 11 deletions

View File

@@ -195,10 +195,18 @@ static void
sudo_lbuf_println(struct sudo_lbuf *lbuf, char *line, int len)
{
char *cp, save;
int i, have, contlen;
int i, have, contlen = 0;
int indent = lbuf->indent;
bool is_comment = false;
debug_decl(sudo_lbuf_println, SUDO_DEBUG_UTIL)
contlen = lbuf->continuation ? strlen(lbuf->continuation) : 0;
/* Comment lines don't use continuation and only indent is for "# " */
if (line[0] == '#' && isblank((unsigned char)line[1])) {
is_comment = true;
indent = 2;
}
if (lbuf->continuation != NULL && !is_comment)
contlen = strlen(lbuf->continuation);
/*
* Print the buffer, splitting the line as needed on a word
@@ -218,10 +226,14 @@ sudo_lbuf_println(struct sudo_lbuf *lbuf, char *line, int len)
need = (int)(ep - cp);
}
if (cp != line) {
/* indent continued lines */
/* XXX - build up string instead? */
for (i = 0; i < lbuf->indent; i++)
lbuf->output(" ");
if (is_comment) {
lbuf->output("# ");
} else {
/* indent continued lines */
/* XXX - build up string instead? */
for (i = 0; i < indent; i++)
lbuf->output(" ");
}
}
/* NUL-terminate cp for the output function and restore afterwards */
save = cp[need];
@@ -235,7 +247,7 @@ sudo_lbuf_println(struct sudo_lbuf *lbuf, char *line, int len)
* the whitespace, and print a line continuaton char if needed.
*/
if (cp != NULL) {
have = lbuf->cols - lbuf->indent;
have = lbuf->cols - indent;
ep = line + len;
while (cp < ep && isblank((unsigned char)*cp)) {
cp++;

View File

@@ -582,8 +582,8 @@ convert_sudoers_sudoers(const char *output_file, struct cvtsudoers_config *conf)
}
}
/* Print User_Specs */
if (!sudoers_format_userspecs(&lbuf, &userspecs, conf->expand_aliases, true))
/* Print User_Specs, separated by blank lines. */
if (!sudoers_format_userspecs(&lbuf, &userspecs, "\n", conf->expand_aliases, true))
goto done;
if (lbuf.len > 1) {
sudo_lbuf_print(&lbuf);

View File

@@ -285,7 +285,7 @@ sudoers_format_userspec(struct sudo_lbuf *lbuf, struct userspec *us,
*/
bool
sudoers_format_userspecs(struct sudo_lbuf *lbuf, struct userspec_list *usl,
bool expand_aliases, bool flush)
const char *sep, bool expand_aliases, bool flush)
{
struct userspec *us;
debug_decl(sudoers_format_userspecs, SUDOERS_DEBUG_UTIL)
@@ -293,6 +293,7 @@ sudoers_format_userspecs(struct sudo_lbuf *lbuf, struct userspec_list *usl,
TAILQ_FOREACH(us, usl, entries) {
if (!sudoers_format_userspec(lbuf, us, expand_aliases))
break;
sudo_lbuf_append(lbuf, sep);
sudo_lbuf_print(lbuf);
}

View File

@@ -315,6 +315,6 @@ bool sudoers_format_default(struct sudo_lbuf *lbuf, struct defaults *d);
bool sudoers_format_member(struct sudo_lbuf *lbuf, struct member *m, const char *separator, int alias_type);
bool sudoers_format_privilege(struct sudo_lbuf *lbuf, struct privilege *priv, bool expand_aliases);
bool sudoers_format_userspec(struct sudo_lbuf *lbuf, struct userspec *us, bool expand_aliases);
bool sudoers_format_userspecs(struct sudo_lbuf *lbuf, struct userspec_list *usl, bool expand_aliases, bool flush);
bool sudoers_format_userspecs(struct sudo_lbuf *lbuf, struct userspec_list *usl, const char *sep, bool expand_aliases, bool flush);
#endif /* SUDOERS_PARSE_H */