From: Michael Tremer Date: Mon, 11 Jan 2021 18:08:54 +0000 (+0000) Subject: libpakfire: execute: Add option to pass environment X-Git-Tag: 0.9.28~1285^2~891 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c38f77e76dddd93429d0be6b16535be55e4bedab;p=pakfire.git libpakfire: execute: Add option to pass environment Signed-off-by: Michael Tremer --- diff --git a/src/_pakfire/pakfire.c b/src/_pakfire/pakfire.c index 3cf085d4a..f2f4990f5 100644 --- a/src/_pakfire/pakfire.c +++ b/src/_pakfire/pakfire.c @@ -425,7 +425,7 @@ static PyObject* Pakfire_execute(PakfireObject* self, PyObject* args, PyObject* envp[environ_length] = NULL; // Execute command - int r = pakfire_execute(self->pakfire, argv[0], argv, 0); + int r = pakfire_execute(self->pakfire, argv[0], argv, (const char**)envp, 0); // Cleanup for (unsigned int i = 0; envp[i]; i++) diff --git a/src/libpakfire/execute.c b/src/libpakfire/execute.c index 59f98743b..d0c0c5572 100644 --- a/src/libpakfire/execute.c +++ b/src/libpakfire/execute.c @@ -37,7 +37,7 @@ struct pakfire_execute_env { const char* root; const char* command; const char** argv; - char* envp[20]; + const char** envp; }; static int pakfire_execute_fork(Pakfire pakfire, struct pakfire_execute_env* env) { @@ -55,13 +55,14 @@ static int pakfire_execute_fork(Pakfire pakfire, struct pakfire_execute_env* env } // exec() command - r = execve(env->command, (char**)env->argv, env->envp); + r = execve(env->command, (char**)env->argv, (char**)env->envp); // We should not get here return errno; } -PAKFIRE_EXPORT int pakfire_execute(Pakfire pakfire, const char* command, const char** argv, int flags) { +PAKFIRE_EXPORT int pakfire_execute(Pakfire pakfire, const char* command, const char** argv, + const char** envp, int flags) { struct pakfire_execute_env env; // Setup environment @@ -70,9 +71,7 @@ PAKFIRE_EXPORT int pakfire_execute(Pakfire pakfire, const char* command, const c env.command = command; env.argv = argv; - - // Reset environnment - env.envp[0] = NULL; + env.envp = envp; // Fork this process pid_t pid = fork(); diff --git a/src/libpakfire/include/pakfire/execute.h b/src/libpakfire/include/pakfire/execute.h index 8f2b46bcc..47f8a1127 100644 --- a/src/libpakfire/include/pakfire/execute.h +++ b/src/libpakfire/include/pakfire/execute.h @@ -23,6 +23,7 @@ #include -int pakfire_execute(Pakfire pakfire, const char* command, const char** argv, int flags); +int pakfire_execute(Pakfire pakfire, const char* command, const char** argv, + const char** envp, int flags); #endif /* PAKFIRE_EXECUTE_H */ diff --git a/src/libpakfire/step.c b/src/libpakfire/step.c index c658df54c..d0461a010 100644 --- a/src/libpakfire/step.c +++ b/src/libpakfire/step.c @@ -363,7 +363,7 @@ static int pakfire_step_run_shell_script(PakfireStep step, const char* data, con command = pakfire_path_relpath(root, path); // Run the script - r = pakfire_execute(step->pakfire, command, NULL, 0); + r = pakfire_execute(step->pakfire, command, NULL, NULL, 0); if (r) { DEBUG(step->pakfire, "Script return code: %d\n", r); } @@ -422,7 +422,7 @@ static int pakfire_run_ldconfig(PakfireStep step) { const char* path = pakfire_get_path(step->pakfire); if (pakfire_access(step->pakfire, path, ldconfig + 1, X_OK) == 0) { - r = pakfire_execute(step->pakfire, ldconfig, NULL, 0); + r = pakfire_execute(step->pakfire, ldconfig, NULL, NULL, 0); DEBUG(step->pakfire, "ldconfig returned %d\n", r); } diff --git a/tests/libpakfire/execute.c b/tests/libpakfire/execute.c index d7baf33ed..0d244f725 100644 --- a/tests/libpakfire/execute.c +++ b/tests/libpakfire/execute.c @@ -28,7 +28,7 @@ int test_does_not_exist(const test_t* t) { const char* cmd = "/usr/bin/does-not-exist"; - int r = pakfire_execute(t->pakfire, cmd, NULL, 0); + int r = pakfire_execute(t->pakfire, cmd, NULL, NULL, 0); assert_return(r != 0, EXIT_FAILURE); return EXIT_SUCCESS;