diff --git a/include/env.h b/include/env.h index ff5fc796e..db6f95932 100644 --- a/include/env.h +++ b/include/env.h @@ -2,14 +2,20 @@ #define UTIL_LINUX_ENV_H #include "c.h" +#include "nls.h" extern void sanitize_env(void); extern char *safe_getenv(const char *arg); + +#ifndef XSETENV_EXIT_CODE +# define XSETENV_EXIT_CODE EXIT_FAILURE +#endif + static inline void xsetenv(char const *name, char const *val, int overwrite) { if (setenv(name, val, overwrite) != 0) - err(EXIT_FAILURE, _("failed to set the %s environment variable"), name); + err(XSETENV_EXIT_CODE, _("failed to set the %s environment variable"), name); } #endif /* UTIL_LINUX_ENV_H */ diff --git a/login-utils/login.c b/login-utils/login.c index 1de24a8b8..2350fc3ec 100644 --- a/login-utils/login.c +++ b/login-utils/login.c @@ -1047,13 +1047,14 @@ static void init_environ(struct login_context *cxt) xsetenv("TERM", termenv ? termenv : "dumb", 1); free(termenv); - if (pwd->pw_uid) + if (pwd->pw_uid) { if (logindefs_setenv("PATH", "ENV_PATH", _PATH_DEFPATH) != 0) err(EXIT_FAILURE, _("failed to set the %s environment variable"), "PATH"); - else if (logindefs_setenv("PATH", "ENV_ROOTPATH", NULL) != 0) - if (logindefs_setenv("PATH", "ENV_SUPATH", _PATH_DEFPATH_ROOT) != 0) + } else if (logindefs_setenv("PATH", "ENV_ROOTPATH", NULL) != 0 && + logindefs_setenv("PATH", "ENV_SUPATH", _PATH_DEFPATH_ROOT) != 0) { err(EXIT_FAILURE, _("failed to set the %s environment variable"), "PATH"); + } /* mailx will give a funny error msg if you forget this one */ len = snprintf(tmp, sizeof(tmp), "%s/%s", _PATH_MAILDIR, pwd->pw_name);