]> git.ipfire.org Git - pakfire.git/commitdiff
libpakfire: execute: Add option to pass environment
authorMichael Tremer <michael.tremer@ipfire.org>
Mon, 11 Jan 2021 18:08:54 +0000 (18:08 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Mon, 11 Jan 2021 18:08:54 +0000 (18:08 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/_pakfire/pakfire.c
src/libpakfire/execute.c
src/libpakfire/include/pakfire/execute.h
src/libpakfire/step.c
tests/libpakfire/execute.c

index 3cf085d4a2a177e64513804ecec65008263e61da..f2f4990f5045c6a51c471376b0818f034d6e1359 100644 (file)
@@ -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++)
index 59f98743bd9119ce28805457c1bf1c694d1e3618..d0c0c5572a20c8810a5f105f6e760fb5f75f79d3 100644 (file)
@@ -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();
index 8f2b46bcc4d88b03085f55c9934c4df0642a4a7c..47f8a11277e020ece3789ee445ea6a7898c9f089 100644 (file)
@@ -23,6 +23,7 @@
 
 #include <pakfire/types.h>
 
-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 */
index c658df54c74459b805d347e4ad6f180e6b95ed6a..d0461a0107f8f3213ee8472530c102149a7150b5 100644 (file)
@@ -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);
        }
index d7baf33eda0adc8f9487d6d8bc68079aa958dd7b..0d244f725d03326de3d91c6ee31dd1e67698cc25 100644 (file)
@@ -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;