]> git.ipfire.org Git - people/ms/pakfire.git/commitdiff
jail: Add function to import environment
authorMichael Tremer <michael.tremer@ipfire.org>
Tue, 2 Aug 2022 17:40:22 +0000 (17:40 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Tue, 2 Aug 2022 17:40:22 +0000 (17:40 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/libpakfire/include/pakfire/jail.h
src/libpakfire/jail.c

index 25bbdcd2f515c38415905e265b65680428e65ee1..981e5046cfe709d4935b10dd54f2cea847a94487 100644 (file)
@@ -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[]);
index 4058997a6c6a04767a6816463921fd51d4bbf51e..6cccaf08ce394dadecb10e84692a27122aaf3864 100644 (file)
@@ -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,