X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fload-fragment.c;h=44b2cf06c115f88adb2e9d93052fed934ac93963;hb=ba035df230e41bf9d70ebb47915c9472b7884412;hp=9b39d9161af1efbf0504587cad0496b674117de8;hpb=f90cf44c02ac09469279126e2863a1e71358ee11;p=elogind.git diff --git a/src/load-fragment.c b/src/load-fragment.c index 9b39d9161..44b2cf06c 100644 --- a/src/load-fragment.c +++ b/src/load-fragment.c @@ -1348,19 +1348,31 @@ static int config_parse_env_file( FILE *f; int r; char ***env = data; + bool ignore = false; assert(filename); assert(lvalue); assert(rvalue); assert(data); + if (rvalue[0] == '-') { + ignore = true; + rvalue++; + } + + if (!path_is_absolute(rvalue)) { + log_error("[%s:%u] Path '%s' is not absolute, ignoring.", filename, line, rvalue); + return 0; + } + if (!(f = fopen(rvalue, "re"))) { - log_error("[%s:%u] Failed to open environment file '%s', ignoring: %m", filename, line, rvalue); + if (!ignore) + log_error("[%s:%u] Failed to open environment file '%s', ignoring: %m", filename, line, rvalue); return 0; } while (!feof(f)) { - char l[LINE_MAX], *p; + char l[LINE_MAX], *p, *u; char **t; if (!fgets(l, sizeof(l), f)) { @@ -1381,7 +1393,21 @@ static int config_parse_env_file( if (strchr(COMMENTS, *p)) continue; - t = strv_env_set(*env, p); + if (!(u = normalize_env_assignment(p))) { + log_error("Out of memory"); + r = -ENOMEM; + goto finish; + } + + t = strv_append(*env, u); + free(u); + + if (!t) { + log_error("Out of memory"); + r = -ENOMEM; + goto finish; + } + strv_free(*env); *env = t; } @@ -1448,7 +1474,8 @@ static int config_parse_condition_path( return 0; } - if (!(c = condition_new(CONDITION_PATH_EXISTS, rvalue, negate))) + if (!(c = condition_new(streq(lvalue, "ConditionPathExists") ? CONDITION_PATH_EXISTS : CONDITION_DIRECTORY_NOT_EMPTY, + rvalue, negate))) return -ENOMEM; LIST_PREPEND(Condition, conditions, u->meta.conditions, c); @@ -1793,6 +1820,7 @@ static int load_from_path(Unit *u, const char *path) { { "PAMName", config_parse_string_printf, &(context).pam_name, section }, \ { "KillMode", config_parse_kill_mode, &(context).kill_mode, section }, \ { "KillSignal", config_parse_kill_signal, &(context).kill_signal, section }, \ + { "SendSIGKILL", config_parse_bool, &(context).send_sigkill, section }, \ { "UtmpIdentifier", config_parse_string_printf, &(context).utmp_id, section } const ConfigItem items[] = { @@ -1815,6 +1843,7 @@ static int load_from_path(Unit *u, const char *path) { { "DefaultDependencies", config_parse_bool, &u->meta.default_dependencies, "Unit" }, { "JobTimeoutSec", config_parse_usec, &u->meta.job_timeout, "Unit" }, { "ConditionPathExists", config_parse_condition_path, u, "Unit" }, + { "ConditionDirectoryNotEmpty", config_parse_condition_path, u, "Unit" }, { "ConditionKernelCommandLine", config_parse_condition_kernel, u, "Unit" }, { "ConditionNull", config_parse_condition_null, u, "Unit" }, @@ -1886,6 +1915,8 @@ static int load_from_path(Unit *u, const char *path) { { "What", config_parse_path, &u->swap.parameters_fragment.what, "Swap" }, { "Priority", config_parse_int, &u->swap.parameters_fragment.priority, "Swap" }, + { "TimeoutSec", config_parse_usec, &u->swap.timeout_usec, "Swap" }, + EXEC_CONTEXT_CONFIG_ITEMS(u->swap.exec_context, "Swap"), { "OnActiveSec", config_parse_timer, &u->timer, "Timer" }, { "OnBootSec", config_parse_timer, &u->timer, "Timer" },