Do not call sudo_warnx() on invalid value from the env hook functions

as the printf() family may call getenv() for locale reasons.
This commit is contained in:
Todd C. Miller
2014-11-11 15:31:16 -07:00
parent 4d04c5644b
commit ae00eb719e

View File

@@ -74,18 +74,9 @@ process_hooks_setenv(const char *name, const char *value, int overwrite)
/* First process the hooks. */
SLIST_FOREACH(hook, &sudo_hook_setenv_list, entries) {
rc = hook->u.setenv_fn(name, value, overwrite, hook->closure);
switch (rc) {
case SUDO_HOOK_RET_NEXT:
break;
case SUDO_HOOK_RET_ERROR:
case SUDO_HOOK_RET_STOP:
goto done;
default:
sudo_warnx_nodebug("invalid setenv hook return value: %d", rc);
break;
}
if (rc == SUDO_HOOK_RET_STOP || SUDO_HOOK_RET_ERROR)
break;
}
done:
return rc;
}
@@ -99,18 +90,9 @@ process_hooks_putenv(char *string)
/* First process the hooks. */
SLIST_FOREACH(hook, &sudo_hook_putenv_list, entries) {
rc = hook->u.putenv_fn(string, hook->closure);
switch (rc) {
case SUDO_HOOK_RET_NEXT:
break;
case SUDO_HOOK_RET_ERROR:
case SUDO_HOOK_RET_STOP:
goto done;
default:
sudo_warnx_nodebug("invalid putenv hook return value: %d", rc);
break;
}
if (rc == SUDO_HOOK_RET_STOP || SUDO_HOOK_RET_ERROR)
break;
}
done:
return rc;
}
@@ -125,18 +107,9 @@ process_hooks_getenv(const char *name, char **value)
/* First process the hooks. */
SLIST_FOREACH(hook, &sudo_hook_getenv_list, entries) {
rc = hook->u.getenv_fn(name, &val, hook->closure);
switch (rc) {
case SUDO_HOOK_RET_NEXT:
break;
case SUDO_HOOK_RET_ERROR:
case SUDO_HOOK_RET_STOP:
goto done;
default:
sudo_warnx_nodebug("invalid getenv hook return value: %d", rc);
break;
}
if (rc == SUDO_HOOK_RET_STOP || SUDO_HOOK_RET_ERROR)
break;
}
done:
if (val != NULL)
*value = val;
return rc;
@@ -152,18 +125,9 @@ process_hooks_unsetenv(const char *name)
/* First process the hooks. */
SLIST_FOREACH(hook, &sudo_hook_unsetenv_list, entries) {
rc = hook->u.unsetenv_fn(name, hook->closure);
switch (rc) {
case SUDO_HOOK_RET_NEXT:
break;
case SUDO_HOOK_RET_ERROR:
case SUDO_HOOK_RET_STOP:
goto done;
default:
sudo_warnx_nodebug("invalid unsetenv hook return value: %d", rc);
break;
}
if (rc == SUDO_HOOK_RET_STOP || SUDO_HOOK_RET_ERROR)
break;
}
done:
return rc;
}