Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
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
int status = 0;
int r;
+ // Check if argv is valid
+ if (!argv || !argv[0]) {
+ errno = EINVAL;
+ return -1;
+ }
+
DEBUG(jail->pakfire, "Executing jail...\n");
/*
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));