From: Lennart Poettering Date: Thu, 6 Jan 2011 00:39:08 +0000 (+0100) Subject: fragment: allow prefixing of the EnvironmentFile= path with - to ignore errors X-Git-Tag: v16~12 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=commitdiff_plain;h=afe4bfe2c1ed28a3e75c627edf458d2f40ff16f8 fragment: allow prefixing of the EnvironmentFile= path with - to ignore errors --- diff --git a/TODO b/TODO index fb23de909..7f3ae5fab 100644 --- a/TODO +++ b/TODO @@ -1,3 +1,5 @@ +* dbus should run with oom adjust set + * support caching password questions in plymouth and on the console https://bugzilla.redhat.com/show_bug.cgi?id=655538 @@ -119,8 +121,6 @@ * global defaults for StandardOuput=xxx -* Make EnvironmentFile=-/fooobar/waldo ingnore errors while reading /foobar/waldo - * mkswap/mke2fs is called on wrong devices in crypto devices. Fedora: diff --git a/man/systemd.exec.xml b/man/systemd.exec.xml index b24792b0a..d6ac5aed8 100644 --- a/man/systemd.exec.xml +++ b/man/systemd.exec.xml @@ -275,8 +275,13 @@ contain new-line separated variable assignments. Empty lines and lines starting with ; or # will be ignored, - which may be used for - commenting. + which may be used for commenting. The + argument passed should be an absolute + file name, optionally prefixed with + "-", which indicates that if the file + does not exist it won't be read and no + error or warning message is + logged. diff --git a/src/load-fragment.c b/src/load-fragment.c index 281863264..334dd6814 100644 --- a/src/load-fragment.c +++ b/src/load-fragment.c @@ -1348,14 +1348,26 @@ 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; }