diff options
-rw-r--r-- | man/systemd-sysusers.xml | 5 | ||||
-rw-r--r-- | src/sysusers/sysusers.c | 21 |
2 files changed, 18 insertions, 8 deletions
diff --git a/man/systemd-sysusers.xml b/man/systemd-sysusers.xml index 4de1973dc6..68710603ad 100644 --- a/man/systemd-sysusers.xml +++ b/man/systemd-sysusers.xml @@ -75,7 +75,10 @@ basename of a file is specified, all directories as specified in <citerefentry><refentrytitle>sysusers.d</refentrytitle><manvolnum>5</manvolnum></citerefentry> - are searched for a matching file.</para> + are searched for a matching file. If the string + <filename>-</filename> is specified as filenames + entries from the standard input of the process are + read.</para> </refsect1> <refsect1> diff --git a/src/sysusers/sysusers.c b/src/sysusers/sysusers.c index 7daea28073..f78fb4fff3 100644 --- a/src/sysusers/sysusers.c +++ b/src/sysusers/sysusers.c @@ -1573,20 +1573,27 @@ static int parse_line(const char *fname, unsigned line, const char *buffer) { } static int read_config_file(const char *fn, bool ignore_enoent) { - _cleanup_fclose_ FILE *f = NULL; + _cleanup_fclose_ FILE *rf = NULL; + FILE *f = NULL; char line[LINE_MAX]; unsigned v = 0; int r; assert(fn); - r = search_and_fopen_nulstr(fn, "re", arg_root, conf_file_dirs, &f); - if (r < 0) { - if (ignore_enoent && r == -ENOENT) - return 0; + if (streq(fn, "-")) + f = stdin; + else { + r = search_and_fopen_nulstr(fn, "re", arg_root, conf_file_dirs, &rf); + if (r < 0) { + if (ignore_enoent && r == -ENOENT) + return 0; - log_error("Failed to open '%s', ignoring: %s", fn, strerror(-r)); - return r; + log_error("Failed to open '%s', ignoring: %s", fn, strerror(-r)); + return r; + } + + f = rf; } FOREACH_LINE(line, f, break) { |