From: Michael Tremer Date: Tue, 2 Aug 2022 17:40:22 +0000 (+0000) Subject: jail: Add function to import environment X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=939025e747bd8f0b1f1fb62813e3881802829e1f;p=people%2Fstevee%2Fpakfire.git jail: Add function to import environment Signed-off-by: Michael Tremer --- diff --git a/src/libpakfire/include/pakfire/jail.h b/src/libpakfire/include/pakfire/jail.h index 25bbdcd2..981e5046 100644 --- a/src/libpakfire/include/pakfire/jail.h +++ b/src/libpakfire/include/pakfire/jail.h @@ -47,6 +47,7 @@ int pakfire_jail_set_log_callback(struct pakfire_jail* jail, // Environment const char* pakfire_jail_get_env(struct pakfire_jail* jail, const char* key); int pakfire_jail_set_env(struct pakfire_jail* jail, const char* key, const char* value); +int pakfire_jail_import_env(struct pakfire_jail* jail, const char* env[]); // Execute int pakfire_jail_exec(struct pakfire_jail* jail, const char* argv[]); diff --git a/src/libpakfire/jail.c b/src/libpakfire/jail.c index 4058997a..6cccaf08 100644 --- a/src/libpakfire/jail.c +++ b/src/libpakfire/jail.c @@ -285,6 +285,37 @@ int pakfire_jail_set_env(struct pakfire_jail* jail, const char* key, const char* return 0; } +// Imports an environment +int pakfire_jail_import_env(struct pakfire_jail* jail, const char* env[]) { + if (!env) + return 0; + + char* key; + char* val; + int r; + + // Copy environment variables + for (unsigned int i = 0; env[i]; i++) { + r = pakfire_string_partition(env[i], "=", &key, &val); + if (r) + continue; + + // Set value + r = pakfire_jail_set_env(jail, key, val); + + if (key) + free(key); + if (val) + free(val); + + // Break on error + if (r) + return r; + } + + return 0; +} + // Logging int pakfire_jail_set_log_callback(struct pakfire_jail* jail,