diff --git a/src/core/main.c b/src/core/main.c index 8c7bcc2d3d..690bc53d85 100644 --- a/src/core/main.c +++ b/src/core/main.c @@ -821,6 +821,7 @@ static int parse_argv(int argc, char *argv[]) { }; int c, r; + bool user_arg_seen = false; assert(argc >= 1); assert(argv); @@ -910,6 +911,7 @@ static int parse_argv(int argc, char *argv[]) { case ARG_USER: arg_system = false; + user_arg_seen = true; break; case ARG_TEST: @@ -1066,10 +1068,12 @@ static int parse_argv(int argc, char *argv[]) { } if (optind < argc && getpid_cached() != 1) - /* Hmm, when we aren't run as init system - * let's complain about excess arguments */ + /* Hmm, when we aren't run as init system let's complain about excess arguments */ + return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Excess arguments."); + + if (arg_action == ACTION_RUN && !arg_system && !user_arg_seen) return log_error_errno(SYNTHETIC_ERRNO(EINVAL), - "Excess arguments."); + "Explicit --user argument required to run as user manager."); return 0; }