]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
udev: do not propagate error in executing PROGRAM and IMPORT{program}
authorYu Watanabe <watanabe.yu+github@gmail.com>
Mon, 18 Nov 2019 11:56:33 +0000 (20:56 +0900)
committerLennart Poettering <lennart@poettering.net>
Tue, 19 Nov 2019 19:20:46 +0000 (20:20 +0100)
Also, this adds more logs.

Fixes #14027.

src/udev/udev-event.c
src/udev/udev-rules.c

index bff75ed5219e6010e99355a2f27d10f57a3baa9f..58d484280aa5afcbc756b29b675111fbf4bb28b7 100644 (file)
@@ -1014,7 +1014,9 @@ void udev_event_execute_run(UdevEvent *event, usec_t timeout_usec) {
 
                         log_device_debug(event->dev, "Running command \"%s\"", command);
                         r = udev_event_spawn(event, timeout_usec, false, command, NULL, 0);
-                        if (r > 0) /* returned value is positive when program fails */
+                        if (r < 0)
+                                log_device_warning_errno(event->dev, r, "Failed to execute '%s', ignoring: %m", command);
+                        else if (r > 0) /* returned value is positive when program fails */
                                 log_device_debug(event->dev, "Command \"%s\" returned %d (error), ignoring.", command, r);
                 }
         }
index d215db8c57ec9c1a15b46a3b53ceed081abbf03f..6168b332d3b23f8801dbc2db4952d72329c5716e 100644 (file)
@@ -1665,10 +1665,13 @@ static int udev_rule_apply_token_to_event(
                 log_rule_debug(dev, rules, "Running PROGRAM '%s'", buf);
 
                 r = udev_event_spawn(event, timeout_usec, true, buf, result, sizeof(result));
-                if (r < 0)
-                        return log_rule_error_errno(dev, rules, r, "Failed to execute '%s': %m", buf);
-                if (r > 0)
+                if (r != 0) {
+                        if (r < 0)
+                                log_rule_warning_errno(dev, rules, r, "Failed to execute '%s', ignoring: %m", buf);
+                        else /* returned value is positive when program fails */
+                                log_rule_debug(dev, rules, "Command \"%s\" returned %d (error), ignoring", buf, r);
                         return token->op == OP_NOMATCH;
+                }
 
                 delete_trailing_chars(result, "\n");
                 count = util_replace_chars(result, UDEV_ALLOWED_CHARS_INPUT);
@@ -1732,10 +1735,11 @@ static int udev_rule_apply_token_to_event(
                 log_rule_debug(dev, rules, "Importing properties from results of '%s'", buf);
 
                 r = udev_event_spawn(event, timeout_usec, true, buf, result, sizeof result);
-                if (r < 0)
-                        return log_rule_error_errno(dev, rules, r, "Failed to execute '%s': %m", buf);
-                if (r > 0) {
-                        log_rule_debug(dev, rules, "Command \"%s\" returned %d (error), ignoring", buf, r);
+                if (r != 0) {
+                        if (r < 0)
+                                log_rule_warning_errno(dev, rules, r, "Failed to execute '%s', ignoring: %m", buf);
+                        else /* returned value is positive when program fails */
+                                log_rule_debug(dev, rules, "Command \"%s\" returned %d (error), ignoring", buf, r);
                         return token->op == OP_NOMATCH;
                 }