diff --git a/man/systemd-sysusers.xml b/man/systemd-sysusers.xml
index 73ba4e4a84..7816356889 100644
--- a/man/systemd-sysusers.xml
+++ b/man/systemd-sysusers.xml
@@ -94,6 +94,12 @@
paths.
+
+
+ Treat each positional argument as a separate configuration
+ line instead of a file name.
+
+
diff --git a/src/sysusers/sysusers.c b/src/sysusers/sysusers.c
index 288f6a1665..340e0db798 100644
--- a/src/sysusers/sysusers.c
+++ b/src/sysusers/sysusers.c
@@ -74,6 +74,7 @@ typedef struct Item {
} Item;
static char *arg_root = NULL;
+static bool arg_inline = false;
static const char conf_file_dirs[] = CONF_PATHS_NULSTR("sysusers.d");
@@ -1718,6 +1719,7 @@ static void help(void) {
" -h --help Show this help\n"
" --version Show package version\n"
" --root=PATH Operate on an alternate filesystem root\n"
+ " --inline Treat arguments as configuration lines\n"
, program_invocation_short_name);
}
@@ -1726,12 +1728,14 @@ static int parse_argv(int argc, char *argv[]) {
enum {
ARG_VERSION = 0x100,
ARG_ROOT,
+ ARG_INLINE,
};
static const struct option options[] = {
{ "help", no_argument, NULL, 'h' },
{ "version", no_argument, NULL, ARG_VERSION },
{ "root", required_argument, NULL, ARG_ROOT },
+ { "inline", no_argument, NULL, ARG_INLINE },
{}
};
@@ -1757,6 +1761,10 @@ static int parse_argv(int argc, char *argv[]) {
return r;
break;
+ case ARG_INLINE:
+ arg_inline = true;
+ break;
+
case '?':
return -EINVAL;
@@ -1795,9 +1803,13 @@ int main(int argc, char *argv[]) {
int j;
for (j = optind; j < argc; j++) {
- k = read_config_file(argv[j], false);
- if (k < 0 && r == 0)
- r = k;
+ if (arg_inline)
+ /* Use (argument):n, where n==1 for the first positional arg */
+ r = parse_line("(argument)", j - optind + 1, argv[j]);
+ else
+ r = read_config_file(argv[j], false);
+ if (r < 0)
+ goto finish;
}
} else {
_cleanup_strv_free_ char **files = NULL;