diff options
author | Umut Tezduyar <umut@tezduyar.com> | 2013-06-09 07:08:46 +0200 |
---|---|---|
committer | Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> | 2013-06-20 16:27:45 -0400 |
commit | 97d0e5f83ba4dd713170f802b90149b7325bc992 (patch) | |
tree | 21bd3c2a72f7d2c352513f1ceaf6ca0505889a4c /src | |
parent | 8c1396b1c2dfecbb59af61064f6a0f624385004d (diff) |
manager: add DefaultEnvironment option
This complements existing functionality of setting variables
through 'systemctl set-environment', the kernel command line,
and through normal environment variables for systemd in session
mode.
Diffstat (limited to 'src')
-rw-r--r-- | src/core/load-fragment.c | 8 | ||||
-rw-r--r-- | src/core/main.c | 5 | ||||
-rw-r--r-- | src/core/manager.c | 12 | ||||
-rw-r--r-- | src/core/manager.h | 1 | ||||
-rw-r--r-- | src/core/system.conf | 1 |
5 files changed, 25 insertions, 2 deletions
diff --git a/src/core/load-fragment.c b/src/core/load-fragment.c index 4a835b6e8b..15fabe860e 100644 --- a/src/core/load-fragment.c +++ b/src/core/load-fragment.c @@ -1564,7 +1564,7 @@ int config_parse_environ(const char *unit, assert(filename); assert(lvalue); assert(rvalue); - assert(u); + assert(data); if (isempty(rvalue)) { /* Empty assignment resets the list */ @@ -1573,7 +1573,11 @@ int config_parse_environ(const char *unit, return 0; } - k = unit_full_printf(u, rvalue); + if (u) + k = unit_full_printf(u, rvalue); + else + k = strdup(rvalue); + if (!k) return log_oom(); diff --git a/src/core/main.c b/src/core/main.c index 26aa561218..470fecf15d 100644 --- a/src/core/main.c +++ b/src/core/main.c @@ -94,6 +94,7 @@ static ExecOutput arg_default_std_output = EXEC_OUTPUT_JOURNAL; static ExecOutput arg_default_std_error = EXEC_OUTPUT_INHERIT; static usec_t arg_runtime_watchdog = 0; static usec_t arg_shutdown_watchdog = 10 * USEC_PER_MINUTE; +static char **arg_default_environment = NULL; static struct rlimit *arg_default_rlimit[RLIMIT_NLIMITS] = {}; static uint64_t arg_capability_bounding_set_drop = 0; static nsec_t arg_timer_slack_nsec = (nsec_t) -1; @@ -646,6 +647,7 @@ static int parse_config_file(void) { { "Manager", "ShutdownWatchdogSec", config_parse_sec, 0, &arg_shutdown_watchdog }, { "Manager", "CapabilityBoundingSet", config_parse_bounding_set, 0, &arg_capability_bounding_set_drop }, { "Manager", "TimerSlackNSec", config_parse_nsec, 0, &arg_timer_slack_nsec }, + { "Manager", "DefaultEnvironment", config_parse_environ, 0, &arg_default_environment }, { "Manager", "DefaultLimitCPU", config_parse_limit, 0, &arg_default_rlimit[RLIMIT_CPU]}, { "Manager", "DefaultLimitFSIZE", config_parse_limit, 0, &arg_default_rlimit[RLIMIT_FSIZE]}, { "Manager", "DefaultLimitDATA", config_parse_limit, 0, &arg_default_rlimit[RLIMIT_DATA]}, @@ -1630,6 +1632,9 @@ int main(int argc, char *argv[]) { if (arg_default_controllers) manager_set_default_controllers(m, arg_default_controllers); + if (arg_default_environment) + manager_set_default_environment(m, arg_default_environment); + manager_set_show_status(m, arg_show_status); /* Remember whether we should queue the default job */ diff --git a/src/core/manager.c b/src/core/manager.c index f16621ac2b..5c3a2c72f3 100644 --- a/src/core/manager.c +++ b/src/core/manager.c @@ -2570,6 +2570,18 @@ void manager_undo_generators(Manager *m) { remove_generator_dir(m, &m->generator_unit_path_late); } +int manager_set_default_environment(Manager *m, char **environment) { + + char **e = NULL; + assert(m); + e = strv_env_merge(2, m->environment, environment); + if (!e) + return -ENOMEM; + strv_free(m->environment); + m->environment = e; + return 0; +} + int manager_set_default_controllers(Manager *m, char **controllers) { char **l; diff --git a/src/core/manager.h b/src/core/manager.h index e21c8f7abf..f0bb2eb035 100644 --- a/src/core/manager.h +++ b/src/core/manager.h @@ -272,6 +272,7 @@ unsigned manager_dispatch_load_queue(Manager *m); unsigned manager_dispatch_run_queue(Manager *m); unsigned manager_dispatch_dbus_queue(Manager *m); +int manager_set_default_environment(Manager *m, char **environment); int manager_set_default_controllers(Manager *m, char **controllers); int manager_set_default_rlimits(Manager *m, struct rlimit **default_rlimit); diff --git a/src/core/system.conf b/src/core/system.conf index 508e0f5fa4..f2817bc507 100644 --- a/src/core/system.conf +++ b/src/core/system.conf @@ -25,6 +25,7 @@ #ShutdownWatchdogSec=10min #CapabilityBoundingSet= #TimerSlackNSec= +#DefaultEnvironment= #DefaultLimitCPU= #DefaultLimitFSIZE= #DefaultLimitDATA= |