From: Michael Tremer Date: Sun, 29 Dec 2024 16:15:03 +0000 (+0000) Subject: jail: Add a function to call a custom callback inside the jail X-Git-Tag: 0.9.30~672 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=9d261e127485308b1b9b25b6d6e6fb3e8cb6874e;p=pakfire.git jail: Add a function to call a custom callback inside the jail Signed-off-by: Michael Tremer --- diff --git a/src/libpakfire/jail.c b/src/libpakfire/jail.c index 78a65e2b8..bed5ba6b0 100644 --- a/src/libpakfire/jail.c +++ b/src/libpakfire/jail.c @@ -1553,6 +1553,11 @@ ERROR: return r; } +int pakfire_jail_exec(struct pakfire_jail* jail, + pakfire_jail_callback callback, void* data, int flags) { + return __pakfire_jail_exec(jail, callback, data, flags, NULL, NULL, NULL, NULL, NULL, NULL); +} + int pakfire_jail_exec_command(struct pakfire_jail* jail, const char* argv[], struct pakfire_env* env, int flags) { struct pakfire_jail_command command = { diff --git a/tests/libpakfire/jail.c b/tests/libpakfire/jail.c index b4f8130d7..d7dd1fffb 100644 --- a/tests/libpakfire/jail.c +++ b/tests/libpakfire/jail.c @@ -432,6 +432,37 @@ FAIL: return r; } +static int __callback(struct pakfire_jail* jail, void* data) { + int* i = data; + + // Log a message + //INFO(jail->ctx, "Callback called, returning %d\n", *i); + + return *i; +} + +static int test_callback(const struct test* t) { + struct pakfire_jail* jail = NULL; + int r = EXIT_FAILURE; + + int i = 123; + + // Create a new jail + ASSERT_SUCCESS(pakfire_jail_create(&jail, t->pakfire)); + + // Check if we receive the correct exit code + ASSERT(pakfire_jail_exec(jail, __callback, &i, 0) == 123); + + // Success + r = EXIT_SUCCESS; + +FAIL: + if (jail) + pakfire_jail_unref(jail); + + return r; +} + int main(int argc, const char* argv[]) { testsuite_add_test(test_create, TEST_WANTS_PAKFIRE); testsuite_add_test(test_exit_code, TEST_WANTS_PAKFIRE); @@ -450,6 +481,7 @@ int main(int argc, const char* argv[]) { testsuite_add_test(test_communicate, TEST_WANTS_PAKFIRE); testsuite_add_test(test_send_signal, TEST_WANTS_PAKFIRE); testsuite_add_test(test_timeout, TEST_WANTS_PAKFIRE); + testsuite_add_test(test_callback, TEST_WANTS_PAKFIRE); return testsuite_run(argc, argv); }