tree-wide: unsetenv cannot fail

... when called with a valid environment variable name. This means that
any time we call it with a fixed string, it is guaranteed to return 0.
(Also when the variable is not present in the environment block.)
This commit is contained in:
Zbigniew Jędrzejewski-Szmek 2020-11-10 12:14:28 +01:00
parent 063f9f0da9
commit 44ee03d111
8 changed files with 22 additions and 32 deletions

View File

@ -1418,9 +1418,8 @@ static int fixup_environment(void) {
return -errno; return -errno;
/* The kernels sets HOME=/ for init. Let's undo this. */ /* The kernels sets HOME=/ for init. Let's undo this. */
if (path_equal_ptr(getenv("HOME"), "/") && if (path_equal_ptr(getenv("HOME"), "/"))
unsetenv("HOME") < 0) assert_se(unsetenv("HOME") == 0);
log_warning_errno(errno, "Failed to unset $HOME: %m");
return 0; return 0;
} }

View File

@ -215,9 +215,7 @@ static int acquire_existing_password(const char *user_name, UserRecord *hr, bool
return log_error_errno(r, "Failed to store password: %m"); return log_error_errno(r, "Failed to store password: %m");
string_erase(e); string_erase(e);
assert_se(unsetenv("PASSWORD") == 0);
if (unsetenv("PASSWORD") < 0)
return log_error_errno(errno, "Failed to unset $PASSWORD: %m");
return 0; return 0;
} }
@ -255,9 +253,7 @@ static int acquire_token_pin(const char *user_name, UserRecord *hr) {
return log_error_errno(r, "Failed to store token PIN: %m"); return log_error_errno(r, "Failed to store token PIN: %m");
string_erase(e); string_erase(e);
assert_se(unsetenv("PIN") == 0);
if (unsetenv("PIN") < 0)
return log_error_errno(errno, "Failed to unset $PIN: %m");
return 0; return 0;
} }
@ -997,9 +993,7 @@ static int acquire_new_password(
return log_error_errno(r, "Failed to store password: %m"); return log_error_errno(r, "Failed to store password: %m");
string_erase(e); string_erase(e);
assert_se(unsetenv("NEWPASSWORD") == 0);
if (unsetenv("NEWPASSWORD") < 0)
return log_error_errno(errno, "Failed to unset $NEWPASSWORD: %m");
if (ret) if (ret)
*ret = TAKE_PTR(copy); *ret = TAKE_PTR(copy);

View File

@ -30,13 +30,12 @@
#define SNDBUF_SIZE (8*1024*1024) #define SNDBUF_SIZE (8*1024*1024)
static void unsetenv_all(bool unset_environment) { static void unsetenv_all(bool unset_environment) {
if (!unset_environment) if (!unset_environment)
return; return;
unsetenv("LISTEN_PID"); assert_se(unsetenv("LISTEN_PID") == 0);
unsetenv("LISTEN_FDS"); assert_se(unsetenv("LISTEN_FDS") == 0);
unsetenv("LISTEN_FDNAMES"); assert_se(unsetenv("LISTEN_FDNAMES") == 0);
} }
_public_ int sd_listen_fds(int unset_environment) { _public_ int sd_listen_fds(int unset_environment) {
@ -548,7 +547,7 @@ _public_ int sd_pid_notify_with_fds(
finish: finish:
if (unset_environment) if (unset_environment)
unsetenv("NOTIFY_SOCKET"); assert_se(unsetenv("NOTIFY_SOCKET") == 0);
return r; return r;
} }
@ -672,9 +671,9 @@ _public_ int sd_watchdog_enabled(int unset_environment, uint64_t *usec) {
finish: finish:
if (unset_environment && s) if (unset_environment && s)
unsetenv("WATCHDOG_USEC"); assert_se(unsetenv("WATCHDOG_USEC") == 0);
if (unset_environment && p) if (unset_environment && p)
unsetenv("WATCHDOG_PID"); assert_se(unsetenv("WATCHDOG_PID") == 0);
return r; return r;
} }

View File

@ -898,11 +898,11 @@ int main(int argc, char *argv[]) {
} }
#endif #endif
(void) unsetenv("USER"); assert_se(unsetenv("USER") == 0);
(void) unsetenv("LOGNAME"); assert_se(unsetenv("LOGNAME") == 0);
(void) unsetenv("SHELL"); assert_se(unsetenv("SHELL") == 0);
(void) unsetenv("HOME"); assert_se(unsetenv("HOME") == 0);
(void) unsetenv("TMPDIR"); assert_se(unsetenv("TMPDIR") == 0);
can_unshare = have_namespaces(); can_unshare = have_namespaces();

View File

@ -184,7 +184,7 @@ static void test_find_executable_full(void) {
if (p) if (p)
assert_se(oldpath = strdup(p)); assert_se(oldpath = strdup(p));
assert_se(unsetenv("PATH") >= 0); assert_se(unsetenv("PATH") == 0);
assert_se(find_executable_full("sh", true, &p) == 0); assert_se(find_executable_full("sh", true, &p) == 0);
puts(p); puts(p);
@ -347,7 +347,7 @@ static void test_fsck_exists(void) {
log_info("/* %s */", __func__); log_info("/* %s */", __func__);
/* Ensure we use a sane default for PATH. */ /* Ensure we use a sane default for PATH. */
unsetenv("PATH"); assert_se(unsetenv("PATH") == 0);
/* fsck.minix is provided by util-linux and will probably exist. */ /* fsck.minix is provided by util-linux and will probably exist. */
assert_se(fsck_exists("minix") == 1); assert_se(fsck_exists("minix") == 1);

View File

@ -480,7 +480,7 @@ static void test_in_utc_timezone(void) {
assert_se(streq(tzname[0], "CET")); assert_se(streq(tzname[0], "CET"));
assert_se(streq(tzname[1], "CEST")); assert_se(streq(tzname[1], "CEST"));
assert_se(unsetenv("TZ") >= 0); assert_se(unsetenv("TZ") == 0);
} }
static void test_map_clock_usec(void) { static void test_map_clock_usec(void) {

View File

@ -565,7 +565,7 @@ static int worker_main(Manager *_manager, sd_device_monitor *monitor, sd_device
assert(monitor); assert(monitor);
assert(dev); assert(dev);
unsetenv("NOTIFY_SOCKET"); assert_se(unsetenv("NOTIFY_SOCKET") == 0);
assert_se(sigprocmask_many(SIG_BLOCK, NULL, SIGTERM, -1) >= 0); assert_se(sigprocmask_many(SIG_BLOCK, NULL, SIGTERM, -1) >= 0);

View File

@ -780,10 +780,8 @@ static int run(int argc, char *argv[]) {
return log_error_errno(r, "Failed to set $SYSTEMD_ONLY_USERDB: %m"); return log_error_errno(r, "Failed to set $SYSTEMD_ONLY_USERDB: %m");
log_info("Enabled services: %s", e); log_info("Enabled services: %s", e);
} else { } else
if (unsetenv("SYSTEMD_ONLY_USERDB") < 0) assert_se(unsetenv("SYSTEMD_ONLY_USERDB") == 0);
return log_error_errno(r, "Failed to unset $SYSTEMD_ONLY_USERDB: %m");
}
return dispatch_verb(argc, argv, verbs, NULL); return dispatch_verb(argc, argv, verbs, NULL);
} }