summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--TODO4
-rw-r--r--man/systemd.exec.xml9
-rw-r--r--src/load-fragment.c14
3 files changed, 22 insertions, 5 deletions
diff --git a/TODO b/TODO
index fb23de9096..7f3ae5fabe 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 b24792b0a0..d6ac5aed89 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.</para></listitem>
+ 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.</para></listitem>
</varlistentry>
<varlistentry>
diff --git a/src/load-fragment.c b/src/load-fragment.c
index 281863264e..334dd68146 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;
}