]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
env: add "overwrite" argument to env_list_setenv()
authorKarel Zak <kzak@redhat.com>
Wed, 4 Sep 2024 10:19:41 +0000 (12:19 +0200)
committerKarel Zak <kzak@redhat.com>
Wed, 4 Sep 2024 11:39:03 +0000 (13:39 +0200)
Signed-off-by: Karel Zak <kzak@redhat.com>
include/env.h
lib/env.c
sys-utils/mount.c
sys-utils/nsenter.c
sys-utils/umount.c

index 5e9198c884f1ae468c3e985e322709aaf16e021b..d4dde7f224234a597cf09003ed67da78b3406cc3 100644 (file)
@@ -17,7 +17,7 @@ extern struct ul_env_list *env_list_add_variable(struct ul_env_list *ls,
                                const char *name, const char *value);
 
 
-extern int env_list_setenv(struct ul_env_list *ls);
+extern int env_list_setenv(struct ul_env_list *ls, int overwrite);
 extern void env_list_free(struct ul_env_list *ls);
 extern struct ul_env_list *env_from_fd(int pid);
 
index bab8822b0ec4b8d0efb51b68027f8da0dd75eb27..cfc5e3c04e8c80d677c45b0ca74368c00279b310 100644 (file)
--- a/lib/env.c
+++ b/lib/env.c
@@ -149,13 +149,13 @@ struct ul_env_list *env_from_fd(int fd)
 /*
  * Use setenv() for all stuff in @ls.
  */
-int env_list_setenv(struct ul_env_list *ls)
+int env_list_setenv(struct ul_env_list *ls, int overwrite)
 {
        int rc = 0;
 
        while (ls && rc == 0) {
                if (ls->name && ls->value)
-                       rc = setenv(ls->name, ls->value, 0);
+                       rc = setenv(ls->name, ls->value, overwrite);
                ls = ls->next;
        }
        return rc;
@@ -273,7 +273,7 @@ int main(void)
        }
 
        /* restore removed */
-       env_list_setenv(removed);
+       env_list_setenv(removed, 0);
 
        /* check restore */
        for (bad = forbid; *bad; bad++) {
index 50e66de586903f0f4bdd0c13504981a1057f80ef..4ec9b50d1e2884068f5b5a00b164f9fc60be37a7 100644 (file)
@@ -58,7 +58,7 @@ static void suid_drop(struct libmnt_context *cxt)
 
        /* restore "bad" environment variables */
        if (envs_removed) {
-               env_list_setenv(envs_removed);
+               env_list_setenv(envs_removed, 0);
                env_list_free(envs_removed);
                envs_removed = NULL;
        }
index 8f7bac922f7e48140191d7d79d4e1736add9c827..d6a50fd95f2aa38fccc4e926bec6250e49cb4353 100644 (file)
@@ -647,7 +647,7 @@ int main(int argc, char *argv[])
                if ((envls = env_from_fd(env_fd)) == NULL)
                        err(EXIT_FAILURE, _("failed to get environment variables"));
                clearenv();
-               if (env_list_setenv(envls) < 0)
+               if (env_list_setenv(envls, 0) < 0)
                        err(EXIT_FAILURE, _("failed to set environment variables"));
                env_list_free(envls);
                close(env_fd);
index 17e668c8b94b9e14eb715eba251f2e9d5e448690..d8ab3f7ca1d3e446d6b6b691c598b589ce60a974 100644 (file)
@@ -129,7 +129,7 @@ static void suid_drop(struct libmnt_context *cxt)
 
        /* restore "bad" environment variables */
        if (envs_removed) {
-               env_list_setenv(envs_removed);
+               env_list_setenv(envs_removed, 0);
                env_list_free(envs_removed);
                envs_removed = NULL;
        }