From: Todd C. Miller Date: Sun, 2 Nov 2008 19:06:37 +0000 (+0000) Subject: Move update_defaults into defaults.c and call it properly from X-Git-Tag: SUDO_1_7_0~61 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=f201db90f3f42707331d565276c87236a9e9ab25;p=sudo Move update_defaults into defaults.c and call it properly from visudo and testsudoers. --- diff --git a/defaults.c b/defaults.c index b588241b3..722c4832b 100644 --- a/defaults.c +++ b/defaults.c @@ -486,6 +486,52 @@ init_defaults() firsttime = 0; } +/* + * Update the defaults based on what was set by sudoers. + * Pass in a an OR'd list of which default types to update. + */ +int +update_defaults(what) + int what; +{ + struct defaults *def; + + tq_foreach_fwd(&defaults, def) { + switch (def->type) { + case DEFAULTS: + if (ISSET(what, SETDEF_GENERIC) && + !set_default(def->var, def->val, def->op)) + return(FALSE); + break; + case DEFAULTS_USER: + if (ISSET(what, SETDEF_USER) && + userlist_matches(sudo_user.pw, &def->binding) == ALLOW && + !set_default(def->var, def->val, def->op)) + return(FALSE); + break; + case DEFAULTS_RUNAS: + if (ISSET(what, SETDEF_RUNAS) && + runaslist_matches(&def->binding, NULL) == ALLOW && + !set_default(def->var, def->val, def->op)) + return(FALSE); + break; + case DEFAULTS_HOST: + if (ISSET(what, SETDEF_HOST) && + hostlist_matches(&def->binding) == ALLOW && + !set_default(def->var, def->val, def->op)) + return(FALSE); + break; + case DEFAULTS_CMND: + if (ISSET(what, SETDEF_CMND) && + cmndlist_matches(&def->binding) == ALLOW && + !set_default(def->var, def->val, def->op)) + return(FALSE); + break; + } + } + return(TRUE); +} + static int store_int(val, def, op) char *val; diff --git a/parse.c b/parse.c index f8bb455e2..8ce1321e1 100644 --- a/parse.c +++ b/parse.c @@ -127,54 +127,6 @@ sudo_file_parse(nss) return(0); } -/* - * Update the defaults based on what was set by sudoers. - * If skip_cmnd is 1, skip DEFAULTS_CMND, if it is 0, skip all others. - * Returns TRUE on success and FALSE on failure. - * XXX - move to defaults.c or match.c - */ -int -update_defaults(what) - int what; -{ - struct defaults *def; - - tq_foreach_fwd(&defaults, def) { - switch (def->type) { - case DEFAULTS: - if (ISSET(what, SETDEF_GENERIC) && - !set_default(def->var, def->val, def->op)) - return(FALSE); - break; - case DEFAULTS_USER: - if (ISSET(what, SETDEF_USER) && - userlist_matches(sudo_user.pw, &def->binding) == ALLOW && - !set_default(def->var, def->val, def->op)) - return(FALSE); - break; - case DEFAULTS_RUNAS: - if (ISSET(what, SETDEF_RUNAS) && - runaslist_matches(&def->binding, NULL) == ALLOW && - !set_default(def->var, def->val, def->op)) - return(FALSE); - break; - case DEFAULTS_HOST: - if (ISSET(what, SETDEF_HOST) && - hostlist_matches(&def->binding) == ALLOW && - !set_default(def->var, def->val, def->op)) - return(FALSE); - break; - case DEFAULTS_CMND: - if (ISSET(what, SETDEF_CMND) && - cmndlist_matches(&def->binding) == ALLOW && - !set_default(def->var, def->val, def->op)) - return(FALSE); - break; - } - } - return(TRUE); -} - /* * Wrapper around update_defaults() for nsswitch code. */ diff --git a/testsudoers.c b/testsudoers.c index e5961b3bf..7200dc793 100644 --- a/testsudoers.c +++ b/testsudoers.c @@ -336,14 +336,6 @@ set_runasgr(group) } } -/* XXX - sanity check defaults settings */ -int -update_defaults(what) - int what; -{ - return(TRUE); -} - void sudo_setspent() { diff --git a/visudo.c b/visudo.c index 6d7d36446..da4a42922 100644 --- a/visudo.c +++ b/visudo.c @@ -208,7 +208,7 @@ main(argc, argv) error(1, "%s", sudoers_path); init_parser(sudoers_path, 0); yyparse(); - (void) update_defaults(SETDEF_ALL & ~SETDEF_CMND); + (void) update_defaults(SETDEF_GENERIC|SETDEF_HOST|SETDEF_USER); editor = get_editor(&args); @@ -564,15 +564,6 @@ user_is_exempt() return(FALSE); } -/* STUB */ -/* XXX - parse defaults to get editor and env_editor values */ -int -update_defaults(what) - int what; -{ - return(TRUE); -} - /* STUB */ void sudo_setspent()