]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
udevadm-control: check if control command really specified
authorYu Watanabe <watanabe.yu+github@gmail.com>
Thu, 4 Apr 2024 17:51:34 +0000 (02:51 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Tue, 16 Apr 2024 00:42:20 +0000 (09:42 +0900)
Previously, 'udevadm control' only checked the number of the arguments.
So, if only `--timeout` is specified, it spuriously did nothing and succeeded.
This makes the command request at least one control command.

src/udev/udevadm-control.c
test/units/testsuite-17.10.sh

index b8215ddd1fc3dbb2f30e9b2c75457a5d403e7ee7..530dca8a5f0ccd86da1d5711f2286c877c74c88c 100644 (file)
@@ -29,6 +29,17 @@ static int arg_start_exec_queue = -1;
 
 STATIC_DESTRUCTOR_REGISTER(arg_env, strv_freep);
 
+static bool arg_has_control_commands(void) {
+        return
+                arg_exit ||
+                arg_log_level >= 0 ||
+                arg_start_exec_queue >= 0 ||
+                arg_reload ||
+                !strv_isempty(arg_env) ||
+                arg_max_children >= 0 ||
+                arg_ping;
+}
+
 static int help(void) {
         printf("%s control OPTION\n\n"
                "Control the udev daemon.\n\n"
@@ -76,10 +87,6 @@ static int parse_argv(int argc, char *argv[]) {
         assert(argc >= 0);
         assert(argv);
 
-        if (argc <= 1)
-                return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
-                                       "This command expects one or more options.");
-
         while ((c = getopt_long(argc, argv, "el:sSRp:m:t:Vh", options, NULL)) >= 0)
                 switch (c) {
 
@@ -147,6 +154,10 @@ static int parse_argv(int argc, char *argv[]) {
                         assert_not_reached();
                 }
 
+        if (!arg_has_control_commands())
+                return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
+                                       "No control command option is specified.");
+
         if (optind < argc)
                 return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
                                        "Extraneous argument: %s", argv[optind]);
index f229dcf25f080bbdad323efb47a566d727830025..f643b0d6b421e90e39fe7ef947f7868f7cb2e1c3 100755 (executable)
@@ -45,8 +45,7 @@ udevadm control -S
 udevadm control -R
 udevadm control -p HELLO=world
 udevadm control -m 42
-udevadm control --ping
-udevadm control -t 5
+udevadm control --ping -t 5
 udevadm control -h
 
 udevadm info /dev/null