Add primitive format string support to the lbuf code to make translations
simpler.
This commit is contained in:
@@ -266,33 +266,28 @@ sudo_file_append_cmnd(struct cmndspec *cs, struct cmndtag *tags,
|
||||
|
||||
#ifdef HAVE_SELINUX
|
||||
if (cs->role)
|
||||
lbuf_append(lbuf, "ROLE=", cs->role, " ", NULL);
|
||||
lbuf_append(lbuf, "ROLE=%s ", cs->role);
|
||||
if (cs->type)
|
||||
lbuf_append(lbuf, "TYPE=", cs->type, " ", NULL);
|
||||
lbuf_append(lbuf, "TYPE=%s ", cs->type);
|
||||
#endif /* HAVE_SELINUX */
|
||||
if (TAG_CHANGED(setenv)) {
|
||||
lbuf_append(lbuf, cs->tags.setenv ? "SETENV: " :
|
||||
"NOSETENV: ", NULL);
|
||||
lbuf_append(lbuf, cs->tags.setenv ? "SETENV: " : "NOSETENV: ");
|
||||
tags->setenv = cs->tags.setenv;
|
||||
}
|
||||
if (TAG_CHANGED(noexec)) {
|
||||
lbuf_append(lbuf, cs->tags.noexec ? "NOEXEC: " :
|
||||
"EXEC: ", NULL);
|
||||
lbuf_append(lbuf, cs->tags.noexec ? "NOEXEC: " : "EXEC: ");
|
||||
tags->noexec = cs->tags.noexec;
|
||||
}
|
||||
if (TAG_CHANGED(nopasswd)) {
|
||||
lbuf_append(lbuf, cs->tags.nopasswd ? "NOPASSWD: " :
|
||||
"PASSWD: ", NULL);
|
||||
lbuf_append(lbuf, cs->tags.nopasswd ? "NOPASSWD: " : "PASSWD: ");
|
||||
tags->nopasswd = cs->tags.nopasswd;
|
||||
}
|
||||
if (TAG_CHANGED(log_input)) {
|
||||
lbuf_append(lbuf, cs->tags.log_input ? "LOG_INPUT: " :
|
||||
"NOLOG_INPUT: ", NULL);
|
||||
lbuf_append(lbuf, cs->tags.log_input ? "LOG_INPUT: " : "NOLOG_INPUT: ");
|
||||
tags->log_input = cs->tags.log_input;
|
||||
}
|
||||
if (TAG_CHANGED(log_output)) {
|
||||
lbuf_append(lbuf, cs->tags.log_output ? "LOG_OUTPUT: " :
|
||||
"NOLOG_OUTPUT: ", NULL);
|
||||
lbuf_append(lbuf, cs->tags.log_output ? "LOG_OUTPUT: " : "NOLOG_OUTPUT: ");
|
||||
tags->log_output = cs->tags.log_output;
|
||||
}
|
||||
m = cs->cmnd;
|
||||
@@ -318,37 +313,37 @@ sudo_file_display_priv_short(struct passwd *pw, struct userspec *us,
|
||||
tags.nopasswd = UNSPEC;
|
||||
tags.log_input = UNSPEC;
|
||||
tags.log_output = UNSPEC;
|
||||
lbuf_append(lbuf, " ", NULL);
|
||||
lbuf_append(lbuf, " ");
|
||||
tq_foreach_fwd(&priv->cmndlist, cs) {
|
||||
if (cs != tq_first(&priv->cmndlist))
|
||||
lbuf_append(lbuf, ", ", NULL);
|
||||
lbuf_append(lbuf, "(", NULL);
|
||||
lbuf_append(lbuf, ", ");
|
||||
lbuf_append(lbuf, "(");
|
||||
if (!tq_empty(&cs->runasuserlist)) {
|
||||
tq_foreach_fwd(&cs->runasuserlist, m) {
|
||||
if (m != tq_first(&cs->runasuserlist))
|
||||
lbuf_append(lbuf, ", ", NULL);
|
||||
lbuf_append(lbuf, ", ");
|
||||
print_member(lbuf, m->name, m->type, m->negated,
|
||||
RUNASALIAS);
|
||||
}
|
||||
} else if (tq_empty(&cs->runasgrouplist)) {
|
||||
lbuf_append(lbuf, def_runas_default, NULL);
|
||||
lbuf_append(lbuf, "%s", def_runas_default);
|
||||
} else {
|
||||
lbuf_append(lbuf, pw->pw_name, NULL);
|
||||
lbuf_append(lbuf, "%s", pw->pw_name);
|
||||
}
|
||||
if (!tq_empty(&cs->runasgrouplist)) {
|
||||
lbuf_append(lbuf, " : ", NULL);
|
||||
lbuf_append(lbuf, " : ");
|
||||
tq_foreach_fwd(&cs->runasgrouplist, m) {
|
||||
if (m != tq_first(&cs->runasgrouplist))
|
||||
lbuf_append(lbuf, ", ", NULL);
|
||||
lbuf_append(lbuf, ", ");
|
||||
print_member(lbuf, m->name, m->type, m->negated,
|
||||
RUNASALIAS);
|
||||
}
|
||||
}
|
||||
lbuf_append(lbuf, ") ", NULL);
|
||||
lbuf_append(lbuf, ") ");
|
||||
sudo_file_append_cmnd(cs, &tags, lbuf);
|
||||
nfound++;
|
||||
}
|
||||
lbuf_append(lbuf, "\n", NULL);
|
||||
lbuf_append(lbuf, "\n");
|
||||
}
|
||||
return nfound;
|
||||
}
|
||||
@@ -371,35 +366,35 @@ sudo_file_display_priv_long(struct passwd *pw, struct userspec *us,
|
||||
tags.nopasswd = UNSPEC;
|
||||
tags.log_input = UNSPEC;
|
||||
tags.log_output = UNSPEC;
|
||||
lbuf_append(lbuf, _("\nSudoers entry:\n"), NULL);
|
||||
lbuf_append(lbuf, _("\nSudoers entry:\n"));
|
||||
tq_foreach_fwd(&priv->cmndlist, cs) {
|
||||
lbuf_append(lbuf, " ", _("RunAsUsers: "), NULL);
|
||||
lbuf_append(lbuf, _(" RunAsUsers: "));
|
||||
if (!tq_empty(&cs->runasuserlist)) {
|
||||
tq_foreach_fwd(&cs->runasuserlist, m) {
|
||||
if (m != tq_first(&cs->runasuserlist))
|
||||
lbuf_append(lbuf, ", ", NULL);
|
||||
lbuf_append(lbuf, ", ");
|
||||
print_member(lbuf, m->name, m->type, m->negated,
|
||||
RUNASALIAS);
|
||||
}
|
||||
} else if (tq_empty(&cs->runasgrouplist)) {
|
||||
lbuf_append(lbuf, def_runas_default, NULL);
|
||||
lbuf_append(lbuf, "%s", def_runas_default);
|
||||
} else {
|
||||
lbuf_append(lbuf, pw->pw_name, NULL);
|
||||
lbuf_append(lbuf, "%s", pw->pw_name);
|
||||
}
|
||||
lbuf_append(lbuf, "\n", NULL);
|
||||
lbuf_append(lbuf, "\n");
|
||||
if (!tq_empty(&cs->runasgrouplist)) {
|
||||
lbuf_append(lbuf, " ", _("RunAsGroups: "), NULL);
|
||||
lbuf_append(lbuf, _(" RunAsGroups: "));
|
||||
tq_foreach_fwd(&cs->runasgrouplist, m) {
|
||||
if (m != tq_first(&cs->runasgrouplist))
|
||||
lbuf_append(lbuf, ", ", NULL);
|
||||
lbuf_append(lbuf, ", ");
|
||||
print_member(lbuf, m->name, m->type, m->negated,
|
||||
RUNASALIAS);
|
||||
}
|
||||
lbuf_append(lbuf, "\n", NULL);
|
||||
lbuf_append(lbuf, "\n");
|
||||
}
|
||||
lbuf_append(lbuf, " ", _("Commands:\n\t"), NULL);
|
||||
lbuf_append(lbuf, _(" Commands:\n\t"));
|
||||
sudo_file_append_cmnd(cs, &tags, lbuf);
|
||||
lbuf_append(lbuf, "\n", NULL);
|
||||
lbuf_append(lbuf, "\n");
|
||||
nfound++;
|
||||
}
|
||||
}
|
||||
@@ -462,18 +457,18 @@ sudo_file_display_defaults(struct sudo_nss *nss, struct passwd *pw,
|
||||
case DEFAULTS_CMND:
|
||||
continue;
|
||||
}
|
||||
lbuf_append(lbuf, prefix, NULL);
|
||||
lbuf_append(lbuf, prefix);
|
||||
if (d->val != NULL) {
|
||||
lbuf_append(lbuf, d->var, d->op == '+' ? "+=" :
|
||||
d->op == '-' ? "-=" : "=", NULL);
|
||||
lbuf_append(lbuf, "%s%s", d->var, d->op == '+' ? "+=" :
|
||||
d->op == '-' ? "-=" : "=");
|
||||
if (strpbrk(d->val, " \t") != NULL) {
|
||||
lbuf_append(lbuf, "\"", NULL);
|
||||
lbuf_append_quoted(lbuf, "\"", d->val, NULL);
|
||||
lbuf_append(lbuf, "\"", NULL);
|
||||
lbuf_append(lbuf, "\"");
|
||||
lbuf_append_quoted(lbuf, "\"", "%s", d->val);
|
||||
lbuf_append(lbuf, "\"");
|
||||
} else
|
||||
lbuf_append_quoted(lbuf, SUDOERS_QUOTED, d->val, NULL);
|
||||
lbuf_append_quoted(lbuf, SUDOERS_QUOTED, "%s", d->val);
|
||||
} else
|
||||
lbuf_append(lbuf, d->op == FALSE ? "!" : "", d->var, NULL);
|
||||
lbuf_append(lbuf, "%s%s", d->op == FALSE ? "!" : "", d->var);
|
||||
prefix = ", ";
|
||||
nfound++;
|
||||
}
|
||||
@@ -541,21 +536,21 @@ display_bound_defaults(int dtype, struct lbuf *lbuf)
|
||||
if (binding != tq_first(&d->binding)) {
|
||||
binding = tq_first(&d->binding);
|
||||
if (nfound != 1)
|
||||
lbuf_append(lbuf, "\n", NULL);
|
||||
lbuf_append(lbuf, " Defaults", dsep, NULL);
|
||||
lbuf_append(lbuf, "\n");
|
||||
lbuf_append(lbuf, " Defaults%s", dsep);
|
||||
for (m = binding; m != NULL; m = m->next) {
|
||||
if (m != binding)
|
||||
lbuf_append(lbuf, ",", NULL);
|
||||
lbuf_append(lbuf, ",");
|
||||
print_member(lbuf, m->name, m->type, m->negated, atype);
|
||||
lbuf_append(lbuf, " ", NULL);
|
||||
lbuf_append(lbuf, " ");
|
||||
}
|
||||
} else
|
||||
lbuf_append(lbuf, ", ", NULL);
|
||||
lbuf_append(lbuf, ", ");
|
||||
if (d->val != NULL) {
|
||||
lbuf_append(lbuf, d->var, d->op == '+' ? "+=" :
|
||||
d->op == '-' ? "-=" : "=", d->val, NULL);
|
||||
lbuf_append(lbuf, "%s%s%s", d->var, d->op == '+' ? "+=" :
|
||||
d->op == '-' ? "-=" : "=", d->val);
|
||||
} else
|
||||
lbuf_append(lbuf, d->op == FALSE ? "!" : "", d->var, NULL);
|
||||
lbuf_append(lbuf, "%s%s", d->op == FALSE ? "!" : "", d->var);
|
||||
}
|
||||
|
||||
return nfound;
|
||||
@@ -619,23 +614,23 @@ _print_member(struct lbuf *lbuf, char *name, int type, int negated,
|
||||
|
||||
switch (type) {
|
||||
case ALL:
|
||||
lbuf_append(lbuf, negated ? "!ALL" : "ALL", NULL);
|
||||
lbuf_append(lbuf, "%sALL", negated ? "!" : "");
|
||||
break;
|
||||
case COMMAND:
|
||||
c = (struct sudo_command *) name;
|
||||
if (negated)
|
||||
lbuf_append(lbuf, "!", NULL);
|
||||
lbuf_append_quoted(lbuf, SUDOERS_QUOTED, c->cmnd, NULL);
|
||||
lbuf_append(lbuf, "!");
|
||||
lbuf_append_quoted(lbuf, SUDOERS_QUOTED, "%s", c->cmnd);
|
||||
if (c->args) {
|
||||
lbuf_append(lbuf, " ", NULL);
|
||||
lbuf_append_quoted(lbuf, SUDOERS_QUOTED, c->args, NULL);
|
||||
lbuf_append(lbuf, " ");
|
||||
lbuf_append_quoted(lbuf, SUDOERS_QUOTED, "%s", c->args);
|
||||
}
|
||||
break;
|
||||
case ALIAS:
|
||||
if ((a = alias_find(name, alias_type)) != NULL) {
|
||||
tq_foreach_fwd(&a->members, m) {
|
||||
if (m != tq_first(&a->members))
|
||||
lbuf_append(lbuf, ", ", NULL);
|
||||
lbuf_append(lbuf, ", ");
|
||||
_print_member(lbuf, m->name, m->type,
|
||||
negated ? !m->negated : m->negated, alias_type);
|
||||
}
|
||||
@@ -643,7 +638,7 @@ _print_member(struct lbuf *lbuf, char *name, int type, int negated,
|
||||
}
|
||||
/* FALLTHROUGH */
|
||||
default:
|
||||
lbuf_append(lbuf, negated ? "!" : "", name, NULL);
|
||||
lbuf_append(lbuf, "%s%s", negated ? "!" : "", name);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user