From: Michael Tremer Date: Tue, 2 Aug 2022 08:55:09 +0000 (+0000) Subject: jail: Set some default environment variables X-Git-Tag: 0.9.28~644 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=d5bc8fe027105d3b5f277ef6edac49261ad22147;p=pakfire.git jail: Set some default environment variables Signed-off-by: Michael Tremer --- diff --git a/src/libpakfire/jail.c b/src/libpakfire/jail.c index 8ac6c3287..b296aa194 100644 --- a/src/libpakfire/jail.c +++ b/src/libpakfire/jail.c @@ -28,6 +28,16 @@ #define ENVIRON_SIZE 128 +// The default environment that will be set for every command +static const struct environ { + const char* key; + const char* val; +} ENV[] = { + { "LANG", "en_US.utf-8" }, + { "TERM", "vt100" }, + { NULL, NULL }, +}; + struct pakfire_jail { struct pakfire* pakfire; int nrefs; @@ -36,7 +46,21 @@ struct pakfire_jail { char* env[ENVIRON_SIZE]; }; +static void pakfire_jail_free(struct pakfire_jail* jail) { + DEBUG(jail->pakfire, "Freeing jail at %p\n", jail); + + // Free environment + for (unsigned int i = 0; jail->env[i]; i++) + free(jail->env[i]); + + pakfire_unref(jail->pakfire); + free(jail); +} + int pakfire_jail_create(struct pakfire_jail** jail, struct pakfire* pakfire) { + int r; + + // Allocate a new jail struct pakfire_jail* j = calloc(1, sizeof(*j)); if (!j) return 1; @@ -49,20 +73,21 @@ int pakfire_jail_create(struct pakfire_jail** jail, struct pakfire* pakfire) { DEBUG(j->pakfire, "Allocated new jail at %p\n", j); + // Set default environment + for (const struct environ* e = ENV; e->key; e++) { + r = pakfire_jail_set_env(j, e->key, e->val); + if (r) + goto ERROR; + } + // Done *jail = j; return 0; -} - -static void pakfire_jail_free(struct pakfire_jail* jail) { - DEBUG(jail->pakfire, "Freeing jail at %p\n", jail); - // Free environment - for (unsigned int i = 0; jail->env[i]; i++) - free(jail->env[i]); +ERROR: + pakfire_jail_free(j); - pakfire_unref(jail->pakfire); - free(jail); + return r; } struct pakfire_jail* pakfire_jail_ref(struct pakfire_jail* jail) { diff --git a/tests/libpakfire/jail.c b/tests/libpakfire/jail.c index af8c42ba5..f9dfe4028 100644 --- a/tests/libpakfire/jail.c +++ b/tests/libpakfire/jail.c @@ -47,6 +47,10 @@ static int test_env(const struct test* t) { // Create a new jail ASSERT_SUCCESS(pakfire_jail_create(&jail, t->pakfire)); + // Check if the default variables are set + ASSERT(pakfire_jail_get_env(jail, "LANG")); + ASSERT(pakfire_jail_get_env(jail, "TERM")); + // Fetch a non-existing environment variable ASSERT_NULL(pakfire_jail_get_env(jail, "VARIABLE"));