]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
misc: always check setenv(3) return value
authorSami Kerola <kerolasa@iki.fi>
Sun, 7 Aug 2016 06:27:21 +0000 (07:27 +0100)
committerSami Kerola <kerolasa@iki.fi>
Fri, 12 Aug 2016 20:25:36 +0000 (21:25 +0100)
At least glibc setenv(3) can fail when system runs out of memory.

Signed-off-by: Sami Kerola <kerolasa@iki.fi>
include/env.h
lib/pager.c
login-utils/login.c
login-utils/su-common.c
login-utils/sulogin.c
sys-utils/hwclock.c
sys-utils/rtcwake.c
term-utils/agetty.c

index a53d3102722021be543dde43d1044f9258285f45..ff5fc796e3e3cc3a800f7032e8788aa0b01aacae 100644 (file)
@@ -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 */
index 330659edacda2a7d96b8b70eaad113410f78c2ff..e8cf10913fc96e599507e6aa68b36da2020e4b51 100644 (file)
@@ -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)
index 7501f6d696edb152c9b6700a1ad9d43d5926d039..1de24a8b895a85b7b2948b249ffaecf727a91141 100644 (file)
@@ -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++)
index 1776b6b795aed915ca4960c00aa62b536826df6f..ff20a2f47878772a8b44fd88ef02440c1c3bb5ce 100644 (file)
@@ -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
index fdbda7c8772a7bf53000e892bbea6f250fc3fbae..1c4313af4647b7b1c67d9deda9210b70874a5745 100644 (file)
@@ -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");
 }
index e98c2c00faa95d88319c25c9bd29917a978e3326..21caeb21b47f38e7c569b45d5959df51f1531ed4 100644 (file)
@@ -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();
index 536c5bf5c28397c73810792b1f8f800dfbb58149..f4e630a33794dae934ddd4550a664f25c4e0d8ed 100644 (file)
@@ -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.
index d5dc0182f711660f31fdc9d01b0b98a48d67a20e..d6cec8f20270c94a6d6670fa47d31405aa7f5219 100644 (file)
@@ -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. */