]> git.ipfire.org Git - pakfire.git/commitdiff
jail: Execute command
authorMichael Tremer <michael.tremer@ipfire.org>
Tue, 2 Aug 2022 14:44:38 +0000 (14:44 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Tue, 2 Aug 2022 14:44:38 +0000 (14:44 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/libpakfire/jail.c
tests/libpakfire/jail.c

index 16539d1216739967d9301e0b8d27d2c5db011454..457baed56c640a46afff98c3399426da6b73acdd 100644 (file)
@@ -586,7 +586,23 @@ static int pakfire_jail_child(struct pakfire_jail* jail, const char* argv[], int
        if (r)
                return r;
 
-       return 0;
+       // exec() command
+       r = execvpe(argv[0], (char**)argv, jail->env);
+       if (r < 0)
+               ERROR(jail->pakfire, "Could not execve(): %m\n");
+
+       // Translate errno into regular exit code
+       switch (errno) {
+               case ENOENT:
+                       r = 127;
+                       break;
+
+               default:
+                       r = 1;
+       }
+
+       // We should not get here
+       return r;
 }
 
 // Run a command in the jail
@@ -595,6 +611,12 @@ int pakfire_jail_exec(struct pakfire_jail* jail, const char* argv[]) {
        int status = 0;
        int r;
 
+       // Check if argv is valid
+       if (!argv || !argv[0]) {
+               errno = EINVAL;
+               return -1;
+       }
+
        DEBUG(jail->pakfire, "Executing jail...\n");
 
        /*
index ec8987393a6663a36740caa0c2e49ac651ebd163..ec7a6b65baf44ee1cfc536fe400f1a223b20d24f 100644 (file)
@@ -87,7 +87,7 @@ static int test_exec(const struct test* t) {
        ASSERT_SUCCESS(pakfire_jail_create(&jail, t->pakfire, 0));
 
        // Try to execute something
-       ASSERT_SUCCESS(pakfire_jail_exec(jail, argv));
+       ASSERT(pakfire_jail_exec(jail, argv) == 127);
 
        // Destroy it
        ASSERT_NULL(pakfire_jail_unref(jail));