struct defaults *d;
rcstr_delref(errorfile);
errorfile = NULL;
+ errorlineno = -1;
/* XXX - should edit all files with errors */
TAILQ_FOREACH(d, &defaults, entries) {
if (d->error) {
} else if (check_aliases(strict, quiet) != 0) {
rcstr_delref(errorfile);
errorfile = NULL; /* don't know which file */
+ errorlineno = -1;
parse_error = true;
}
debug_return;
printf(_("press return to edit %s: "), sp->path);
while ((ch = getchar()) != EOF && ch != '\n')
continue;
- edit_sudoers(sp, editor, editor_argc, editor_argv,
- errorlineno);
+ edit_sudoers(sp, editor, editor_argc, editor_argv, -1);
}
/* If all sudoers files parsed OK we are done. */
}
static int
-check_alias(char *name, int type, char *file, int lineno, bool quiet)
+check_alias(char *name, int type, char *file, int lineno, bool strict, bool quiet)
{
struct member *m;
struct alias *a;
TAILQ_FOREACH(m, &a->members, entries) {
if (m->type != ALIAS)
continue;
- errors += check_alias(m->name, type, a->file, a->lineno, quiet);
+ errors += check_alias(m->name, type, a->file, a->lineno, strict, quiet);
}
alias_put(a);
} else {
sudo_warnx(U_("%s:%d %s \"%s\" referenced but not defined"),
file, lineno, alias_type_to_string(type), name);
}
+ if (strict && errorfile == NULL) {
+ errorfile = rcstr_addref(file);
+ errorlineno = lineno;
+ }
}
errors++;
}
TAILQ_FOREACH(m, &us->users, entries) {
if (m->type == ALIAS) {
errors += check_alias(m->name, USERALIAS,
- us->file, us->lineno, quiet);
+ us->file, us->lineno, strict, quiet);
}
}
TAILQ_FOREACH(priv, &us->privileges, entries) {
TAILQ_FOREACH(m, &priv->hostlist, entries) {
if (m->type == ALIAS) {
errors += check_alias(m->name, HOSTALIAS,
- us->file, us->lineno, quiet);
+ us->file, us->lineno, strict, quiet);
}
}
TAILQ_FOREACH(cs, &priv->cmndlist, entries) {
TAILQ_FOREACH(m, cs->runasuserlist, entries) {
if (m->type == ALIAS) {
errors += check_alias(m->name, RUNASALIAS,
- us->file, us->lineno, quiet);
+ us->file, us->lineno, strict, quiet);
}
}
}
TAILQ_FOREACH(m, cs->runasgrouplist, entries) {
if (m->type == ALIAS) {
errors += check_alias(m->name, RUNASALIAS,
- us->file, us->lineno, quiet);
+ us->file, us->lineno, strict, quiet);
}
}
}
if ((m = cs->cmnd)->type == ALIAS) {
errors += check_alias(m->name, CMNDALIAS,
- us->file, us->lineno, quiet);
+ us->file, us->lineno, strict, quiet);
}
}
}