]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
systemd-udev-settle.service: emit deprecation notice 12267/head
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Wed, 10 Apr 2019 09:52:47 +0000 (11:52 +0200)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Wed, 10 Apr 2019 13:58:14 +0000 (15:58 +0200)
src/udev/udevadm-settle.c

index 9cf88b245c8265472ee1052f778737a1ae5c907c..1524808ffe27a142bd6cef539d0e72051bf9ebc0 100644 (file)
 #include <string.h>
 #include <unistd.h>
 
+#include "sd-bus.h"
+#include "sd-login.h"
+
 #include "libudev-util.h"
+#include "string-util.h"
+#include "strv.h"
 #include "time-util.h"
-#include "udevadm.h"
 #include "udev-ctrl.h"
+#include "udevadm.h"
+#include "unit-def.h"
 #include "util.h"
 #include "virt.h"
 
@@ -79,6 +85,61 @@ static int parse_argv(int argc, char *argv[]) {
         return 1;
 }
 
+static int emit_deprecation_warning(void) {
+        _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
+        _cleanup_free_ char *unit = NULL, *unit_path = NULL;
+        _cleanup_strv_free_ char **a = NULL, **b = NULL;
+        int r;
+
+        r = sd_pid_get_unit(0, &unit);
+        if (r < 0 || !streq(unit, "systemd-udev-settle.service"))
+                return 0;
+
+        log_notice("systemd-udev-settle.service is deprecated.");
+
+        r = sd_bus_open_system(&bus);
+        if (r < 0)
+                return log_debug_errno(r, "Failed to open system bus, skipping dependency queries: %m");
+
+        unit_path = unit_dbus_path_from_name("systemd-udev-settle.service");
+        if (!unit_path)
+                return -ENOMEM;
+
+        (void) sd_bus_get_property_strv(
+                        bus,
+                        "org.freedesktop.systemd1",
+                        unit_path,
+                        "org.freedesktop.systemd1.Unit",
+                        "WantedBy",
+                        NULL,
+                        &a);
+
+        (void) sd_bus_get_property_strv(
+                        bus,
+                        "org.freedesktop.systemd1",
+                        unit_path,
+                        "org.freedesktop.systemd1.Unit",
+                        "RequiredBy",
+                        NULL,
+                        &b);
+
+        r = strv_extend_strv(&a, b, true);
+        if (r < 0)
+                return r;
+
+        if (!strv_isempty(a)) {
+                _cleanup_free_ char *t = NULL;
+
+                t = strv_join(a, ", ");
+                if (!t)
+                        return -ENOMEM;
+
+                log_notice("Hint: please fix %s not to pull it in.", t);
+        }
+
+        return 0;
+}
+
 int settle_main(int argc, char *argv[], void *userdata) {
         _cleanup_(udev_queue_unrefp) struct udev_queue *queue = NULL;
         struct pollfd pfd;
@@ -128,6 +189,8 @@ int settle_main(int argc, char *argv[], void *userdata) {
                 .fd = r,
         };
 
+        (void) emit_deprecation_warning();
+
         for (;;) {
                 if (arg_exists && access(arg_exists, F_OK) >= 0)
                         return 0;