tmpfiles: interpret "-" as stdin

This commit is contained in:
Zbigniew Jędrzejewski-Szmek 2016-04-19 22:34:04 -04:00
parent d5ca5e1324
commit f7ac1ed2ca
2 changed files with 22 additions and 14 deletions

View file

@ -75,11 +75,11 @@
<citerefentry><refentrytitle>tmpfiles.d</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
</para>
<para>If invoked with no arguments, it applies all directives from
all configuration files. If one or more absolute filenames are passed on
the command line, only the directives in these files are applied.
If only the basename of a configuration file is specified, all
configuration directories as specified in
<para>If invoked with no arguments, it applies all directives from all configuration
files. If one or more absolute filenames are passed on the command line, only the
directives in these files are applied. If <literal>-</literal> is specified instead
of a filename, directives are read from standard input. If only the basename of a
configuration file is specified, all configuration directories as specified in
<citerefentry><refentrytitle>tmpfiles.d</refentrytitle><manvolnum>5</manvolnum></citerefentry>
are searched for a matching file.</para>
</refsect1>

View file

@ -2198,7 +2198,8 @@ static int parse_argv(int argc, char *argv[]) {
}
static int read_config_file(const char *fn, bool ignore_enoent) {
_cleanup_fclose_ FILE *f = NULL;
_cleanup_fclose_ FILE *_f = NULL;
FILE *f;
char line[LINE_MAX];
Iterator iterator;
unsigned v = 0;
@ -2207,16 +2208,23 @@ static int read_config_file(const char *fn, bool ignore_enoent) {
assert(fn);
r = search_and_fopen_nulstr(fn, "re", arg_root, conf_file_dirs, &f);
if (r < 0) {
if (ignore_enoent && r == -ENOENT) {
log_debug_errno(r, "Failed to open \"%s\": %m", fn);
return 0;
}
if (streq(fn, "-")) {
log_debug("Reading config from stdin.");
fn = "<stdin>";
f = stdin;
} else {
r = search_and_fopen_nulstr(fn, "re", arg_root, conf_file_dirs, &_f);
if (r < 0) {
if (ignore_enoent && r == -ENOENT) {
log_debug_errno(r, "Failed to open \"%s\", ignoring: %m", fn);
return 0;
}
return log_error_errno(r, "Failed to open '%s', ignoring: %m", fn);
return log_error_errno(r, "Failed to open '%s': %m", fn);
}
log_debug("Reading config file \"%s\".", fn);
f = _f;
}
log_debug("Reading config file \"%s\".", fn);
FOREACH_LINE(line, f, break) {
char *l;