From: Michael Tremer Date: Wed, 3 Aug 2022 10:22:27 +0000 (+0000) Subject: jail: Move pakfire_execute_shell/ldconfig X-Git-Tag: 0.9.28~600 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e43489f7eb2865aa797c91622903b4da916d243f;p=pakfire.git jail: Move pakfire_execute_shell/ldconfig Signed-off-by: Michael Tremer --- diff --git a/src/libpakfire/build.c b/src/libpakfire/build.c index 769dbdee9..afc3cadb5 100644 --- a/src/libpakfire/build.c +++ b/src/libpakfire/build.c @@ -736,7 +736,7 @@ static int pakfire_build_makefile(struct pakfire* pakfire, const char* path, con if (r) { // Drop to a shell for debugging if (pakfire_has_flag(pakfire, PAKFIRE_FLAGS_INTERACTIVE)) - pakfire_execute_shell(pakfire); + pakfire_jail_shell(pakfire); goto ERROR; } @@ -944,7 +944,7 @@ PAKFIRE_EXPORT int pakfire_shell(struct pakfire* pakfire, const char** packages) if (r) return r; - return pakfire_execute_shell(pakfire); + return pakfire_jail_shell(pakfire); } int pakfire_build_clean(struct pakfire* pakfire, int flags) { diff --git a/src/libpakfire/execute.c b/src/libpakfire/execute.c index 20aef735c..b6304d4a0 100644 --- a/src/libpakfire/execute.c +++ b/src/libpakfire/execute.c @@ -29,8 +29,6 @@ #include #include -#define LDCONFIG "/sbin/ldconfig" - PAKFIRE_EXPORT int pakfire_execute(struct pakfire* pakfire, const char* argv[], char* envp[], int flags, pakfire_execute_logging_callback logging_callback, void* data) { struct pakfire_jail* jail = NULL; @@ -63,34 +61,3 @@ ERROR: return r; } -int pakfire_execute_shell(struct pakfire* pakfire) { - const char* argv[] = { - "/bin/bash", "--login", NULL, - }; - - // Execute /bin/bash - return pakfire_jail_run(pakfire, argv, PAKFIRE_JAIL_INTERACTIVE, NULL); -} - -int pakfire_execute_ldconfig(struct pakfire* pakfire) { - char path[PATH_MAX]; - - // Check if ldconfig exists before calling it to avoid overhead - int r = pakfire_make_path(pakfire, path, LDCONFIG); - if (r < 0) - return 1; - - // Check if ldconfig is executable - r = access(path, X_OK); - if (r) { - DEBUG(pakfire, "%s is not executable. Skipping...\n", LDCONFIG); - return 0; - } - - const char* argv[] = { - LDCONFIG, NULL, - }; - - // Run ldconfig - return pakfire_jail_run(pakfire, argv, 0, NULL); -} diff --git a/src/libpakfire/include/pakfire/execute.h b/src/libpakfire/include/pakfire/execute.h index 660c22e15..69ba55819 100644 --- a/src/libpakfire/include/pakfire/execute.h +++ b/src/libpakfire/include/pakfire/execute.h @@ -35,11 +35,4 @@ enum { PAKFIRE_EXECUTE_INTERACTIVE = (1 << 1), }; -#ifdef PAKFIRE_PRIVATE - -int pakfire_execute_shell(struct pakfire* pakfire); -int pakfire_execute_ldconfig(struct pakfire* pakfire); - -#endif - #endif /* PAKFIRE_EXECUTE_H */ diff --git a/src/libpakfire/include/pakfire/jail.h b/src/libpakfire/include/pakfire/jail.h index bda8d91d8..e5060925a 100644 --- a/src/libpakfire/include/pakfire/jail.h +++ b/src/libpakfire/include/pakfire/jail.h @@ -59,6 +59,9 @@ int pakfire_jail_run(struct pakfire* pakfire, const char* argv[], int flags, cha int pakfire_jail_run_script(struct pakfire* pakfire, const char* script, const size_t length, const char* argv[], int flags, char*** output); +int pakfire_jail_shell(struct pakfire* pakfire); +int pakfire_jail_ldconfig(struct pakfire* pakfire); + #endif #endif /* PAKFIRE_JAIL_H */ diff --git a/src/libpakfire/jail.c b/src/libpakfire/jail.c index 39362d477..a5fdee074 100644 --- a/src/libpakfire/jail.c +++ b/src/libpakfire/jail.c @@ -1270,3 +1270,38 @@ ERROR: return r; } + + +int pakfire_jail_shell(struct pakfire* pakfire) { + const char* argv[] = { + "/bin/bash", "--login", NULL, + }; + + // Execute /bin/bash + return pakfire_jail_run(pakfire, argv, PAKFIRE_JAIL_INTERACTIVE, NULL); +} + +int pakfire_jail_ldconfig(struct pakfire* pakfire) { + char path[PATH_MAX]; + + const char* ldconfig = "/sbin/ldconfig"; + + // Check if ldconfig exists before calling it to avoid overhead + int r = pakfire_make_path(pakfire, path, ldconfig); + if (r < 0) + return 1; + + // Check if ldconfig is executable + r = access(path, X_OK); + if (r) { + DEBUG(pakfire, "%s is not executable. Skipping...\n", ldconfig); + return 0; + } + + const char* argv[] = { + ldconfig, NULL, + }; + + // Run ldconfig + return pakfire_jail_run(pakfire, argv, 0, NULL); +} diff --git a/src/libpakfire/transaction.c b/src/libpakfire/transaction.c index 6e8532074..3070088ff 100644 --- a/src/libpakfire/transaction.c +++ b/src/libpakfire/transaction.c @@ -30,10 +30,10 @@ #include #include #include -#include #include #include #include +#include #include #include #include @@ -763,7 +763,7 @@ static int pakfire_transaction_extract(struct pakfire_transaction* transaction, // Update the runtime linker cache if (need_ldconfig) - pakfire_execute_ldconfig(transaction->pakfire); + pakfire_jail_ldconfig(transaction->pakfire); pakfire_filelist_unref(filelist); } @@ -797,7 +797,7 @@ static int pakfire_transaction_erase(struct pakfire_transaction* transaction, } // Update the runtime linker cache after all files have been removed - pakfire_execute_ldconfig(transaction->pakfire); + pakfire_jail_ldconfig(transaction->pakfire); ERROR: if (filelist)