misc: always check setenv(3) return value
At least glibc setenv(3) can fail when system runs out of memory. Signed-off-by: Sami Kerola <kerolasa@iki.fi>
This commit is contained in:
parent
8c4ae2fd48
commit
984a60965a
|
@ -9,7 +9,7 @@ extern char *safe_getenv(const char *arg);
|
|||
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(EXIT_FAILURE, _("failed to set the %s environment variable"), name);
|
||||
}
|
||||
|
||||
#endif /* UTIL_LINUX_ENV_H */
|
||||
|
|
|
@ -138,7 +138,8 @@ static void pager_preexec(void)
|
|||
FD_SET(STDIN_FILENO, &in);
|
||||
select(1, &in, NULL, &in, NULL);
|
||||
|
||||
setenv("LESS", "FRSX", 0);
|
||||
if (setenv("LESS", "FRSX", 0) != 0)
|
||||
warn(_("failed to set the %s environment variable"), "LESS");
|
||||
}
|
||||
|
||||
static void wait_for_pager(void)
|
||||
|
|
|
@ -69,6 +69,7 @@
|
|||
#include "pathnames.h"
|
||||
#include "strutils.h"
|
||||
#include "nls.h"
|
||||
#include "env.h"
|
||||
#include "xalloc.h"
|
||||
#include "all-io.h"
|
||||
#include "fileutils.h"
|
||||
|
@ -1040,27 +1041,29 @@ static void init_environ(struct login_context *cxt)
|
|||
memset(environ, 0, sizeof(char *));
|
||||
}
|
||||
|
||||
setenv("HOME", pwd->pw_dir, 0); /* legal to override */
|
||||
setenv("USER", pwd->pw_name, 1);
|
||||
setenv("SHELL", pwd->pw_shell, 1);
|
||||
setenv("TERM", termenv ? termenv : "dumb", 1);
|
||||
xsetenv("HOME", pwd->pw_dir, 0); /* legal to override */
|
||||
xsetenv("USER", pwd->pw_name, 1);
|
||||
xsetenv("SHELL", pwd->pw_shell, 1);
|
||||
xsetenv("TERM", termenv ? termenv : "dumb", 1);
|
||||
free(termenv);
|
||||
|
||||
if (pwd->pw_uid)
|
||||
logindefs_setenv("PATH", "ENV_PATH", _PATH_DEFPATH);
|
||||
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)
|
||||
logindefs_setenv("PATH", "ENV_SUPATH", _PATH_DEFPATH_ROOT);
|
||||
if (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);
|
||||
if (len > 0 && (size_t) len < sizeof(tmp))
|
||||
setenv("MAIL", tmp, 0);
|
||||
xsetenv("MAIL", tmp, 0);
|
||||
|
||||
/* LOGNAME is not documented in login(1) but HP-UX 6.5 does it. We'll
|
||||
* not allow modifying it.
|
||||
*/
|
||||
setenv("LOGNAME", pwd->pw_name, 1);
|
||||
xsetenv("LOGNAME", pwd->pw_name, 1);
|
||||
|
||||
env = pam_getenvlist(cxt->pamh);
|
||||
for (i = 0; env && env[i]; i++)
|
||||
|
|
|
@ -520,7 +520,7 @@ set_path(const struct passwd* pw)
|
|||
r = logindefs_setenv("PATH", "ENV_SUPATH", _PATH_DEFPATH_ROOT);
|
||||
|
||||
if (r != 0)
|
||||
err (EXIT_FAILURE, _("failed to set PATH"));
|
||||
err (EXIT_FAILURE, _("failed to set the %s environment variable"), "PATH");
|
||||
}
|
||||
|
||||
/* Update `environ' for the new shell based on PW, with SHELL being
|
||||
|
|
|
@ -56,6 +56,7 @@
|
|||
|
||||
#include "c.h"
|
||||
#include "closestream.h"
|
||||
#include "env.h"
|
||||
#include "nls.h"
|
||||
#include "pathnames.h"
|
||||
#ifdef USE_PLYMOUTH_SUPPORT
|
||||
|
@ -219,18 +220,18 @@ static void tcfinal(struct console *con)
|
|||
int fd;
|
||||
|
||||
if ((con->flags & CON_SERIAL) == 0) {
|
||||
setenv("TERM", "linux", 1);
|
||||
xsetenv("TERM", "linux", 1);
|
||||
return;
|
||||
}
|
||||
if (con->flags & CON_NOTTY) {
|
||||
setenv("TERM", "dumb", 1);
|
||||
xsetenv("TERM", "dumb", 1);
|
||||
return;
|
||||
}
|
||||
|
||||
#if defined (__s390__) || defined (__s390x__)
|
||||
setenv("TERM", "dumb", 1);
|
||||
xsetenv("TERM", "dumb", 1);
|
||||
#else
|
||||
setenv("TERM", "vt102", 1);
|
||||
xsetenv("TERM", "vt102", 1);
|
||||
#endif
|
||||
tio = &con->tio;
|
||||
fd = con->fd;
|
||||
|
@ -759,16 +760,16 @@ static void sushell(struct passwd *pwd)
|
|||
if (getcwd(home, sizeof(home)) == NULL)
|
||||
strcpy(home, "/");
|
||||
|
||||
setenv("HOME", home, 1);
|
||||
setenv("LOGNAME", "root", 1);
|
||||
setenv("USER", "root", 1);
|
||||
xsetenv("HOME", home, 1);
|
||||
xsetenv("LOGNAME", "root", 1);
|
||||
xsetenv("USER", "root", 1);
|
||||
if (!profile)
|
||||
setenv("SHLVL","0",1);
|
||||
xsetenv("SHLVL","0",1);
|
||||
|
||||
/*
|
||||
* Try to execute a shell.
|
||||
*/
|
||||
setenv("SHELL", su_shell, 1);
|
||||
xsetenv("SHELL", su_shell, 1);
|
||||
unmask_signal(SIGINT, &saved_sigint);
|
||||
unmask_signal(SIGTSTP, &saved_sigtstp);
|
||||
unmask_signal(SIGQUIT, &saved_sigquit);
|
||||
|
@ -793,7 +794,7 @@ static void sushell(struct passwd *pwd)
|
|||
execl(su_shell, shell, NULL);
|
||||
warn(_("failed to execute %s"), su_shell);
|
||||
|
||||
setenv("SHELL", "/bin/sh", 1);
|
||||
xsetenv("SHELL", "/bin/sh", 1);
|
||||
execl("/bin/sh", profile ? "-sh" : "sh", NULL);
|
||||
warn(_("failed to execute %s"), "/bin/sh");
|
||||
}
|
||||
|
|
|
@ -81,6 +81,7 @@
|
|||
#include "strutils.h"
|
||||
#include "hwclock.h"
|
||||
#include "timeutils.h"
|
||||
#include "env.h"
|
||||
|
||||
#ifdef HAVE_LIBAUDIT
|
||||
#include <libaudit.h>
|
||||
|
@ -399,7 +400,7 @@ mktime_tz(struct tm tm, const bool universal,
|
|||
zone = getenv("TZ"); /* remember original time zone */
|
||||
if (universal) {
|
||||
/* Set timezone to UTC */
|
||||
setenv("TZ", "", TRUE);
|
||||
xsetenv("TZ", "", TRUE);
|
||||
/*
|
||||
* Note: tzset() gets called implicitly by the time code,
|
||||
* but only the first time. When changing the environment
|
||||
|
@ -434,7 +435,7 @@ mktime_tz(struct tm tm, const bool universal,
|
|||
}
|
||||
/* now put back the original zone. */
|
||||
if (zone)
|
||||
setenv("TZ", zone, TRUE);
|
||||
xsetenv("TZ", zone, TRUE);
|
||||
else
|
||||
unsetenv("TZ");
|
||||
tzset();
|
||||
|
|
|
@ -34,6 +34,7 @@
|
|||
|
||||
#include "c.h"
|
||||
#include "closestream.h"
|
||||
#include "env.h"
|
||||
#include "nls.h"
|
||||
#include "optutils.h"
|
||||
#include "pathnames.h"
|
||||
|
@ -157,7 +158,7 @@ static int get_basetimes(struct rtcwake_control *ctl, int fd)
|
|||
* with the system clock (which always uses UTC).
|
||||
*/
|
||||
if (ctl->clock_mode == CM_UTC)
|
||||
setenv("TZ", "UTC", 1);
|
||||
xsetenv("TZ", "UTC", 1);
|
||||
tzset();
|
||||
/* Read rtc and system clocks "at the same time", or as
|
||||
* precisely (+/- a second) as we can read them.
|
||||
|
|
|
@ -45,6 +45,7 @@
|
|||
#include "widechar.h"
|
||||
#include "ttyutils.h"
|
||||
#include "color-names.h"
|
||||
#include "env.h"
|
||||
|
||||
#ifdef USE_PLYMOUTH_SUPPORT
|
||||
# include "plymouth-ctrl.h"
|
||||
|
@ -1155,7 +1156,8 @@ static void open_tty(char *tty, struct termios *tp, struct options *op)
|
|||
op->term = DEFAULT_STERM;
|
||||
}
|
||||
|
||||
setenv("TERM", op->term, 1);
|
||||
if (setenv("TERM", op->term, 1) != 0)
|
||||
log_err(_("failed to set the %s environment variable"), "TERM");
|
||||
}
|
||||
|
||||
/* Initialize termios settings. */
|
||||
|
|
Loading…
Reference in New Issue