summaryrefslogtreecommitdiff
path: root/src/cgroups-agent
diff options
context:
space:
mode:
Diffstat (limited to 'src/cgroups-agent')
-rw-r--r--src/cgroups-agent/cgroups-agent.c66
1 files changed, 25 insertions, 41 deletions
diff --git a/src/cgroups-agent/cgroups-agent.c b/src/cgroups-agent/cgroups-agent.c
index 0b0f4db56..d5f971b18 100644
--- a/src/cgroups-agent/cgroups-agent.c
+++ b/src/cgroups-agent/cgroups-agent.c
@@ -18,15 +18,23 @@
***/
#include <stdlib.h>
+#include <sys/socket.h>
-#include "sd-bus.h"
-#include "bus-util.h"
+#include "fd-util.h"
#include "musl_missing.h"
#include "log.h"
+#include "socket-util.h"
int main(int argc, char *argv[]) {
- _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
- int r;
+
+ static const union sockaddr_union sa = {
+ .un.sun_family = AF_UNIX,
+ .un.sun_path = "/run/systemd/cgroups-agent",
+ };
+
+ _cleanup_close_ int fd = -1;
+ ssize_t n;
+ size_t l;
if (argc != 2) {
log_error("Incorrect number of arguments.");
@@ -38,46 +46,22 @@ int main(int argc, char *argv[]) {
log_parse_environment();
log_open();
-#if 0
- /* We send this event to the private D-Bus socket and then the
- * system instance will forward this to the system bus. We do
- * this to avoid an activation loop when we start dbus when we
- * are called when the dbus service is shut down. */
-
- r = bus_connect_system_systemd(&bus);
-#else
- /* Unlike in systemd where this has to use a private socket,
- since elogind doesn't associate control groups with services
- and doesn't manage the dbus service, we can just use the
- system bus. */
- r = sd_bus_open_system(&bus);
-#endif // 0
-
- if (r < 0) {
-#if 0
- /* If we couldn't connect we assume this was triggered
- * while systemd got restarted/transitioned from
- * initrd to the system, so let's ignore this */
- log_debug_errno(r, "Failed to get D-Bus connection: %m");
-#else
- /* If dbus isn't running or responding, there is nothing
- * we can do about it. */
- log_debug_errno(r, "Failed to open system bus: %m");
-#endif // 0
+ fd = socket(AF_UNIX, SOCK_DGRAM|SOCK_CLOEXEC, 0);
+ if (fd < 0) {
+ log_debug_errno(errno, "Failed to allocate socket: %m");
+ return EXIT_FAILURE;
+ }
+
+ l = strlen(argv[1]);
+
+ n = sendto(fd, argv[1], l, 0, &sa.sa, SOCKADDR_UN_LEN(sa.un));
+ if (n < 0) {
+ log_debug_errno(errno, "Failed to send cgroups agent message: %m");
return EXIT_FAILURE;
}
- r = sd_bus_emit_signal(bus,
- "/org/freedesktop/elogind/agent",
- "org.freedesktop.elogind.Agent",
- "Released",
- "s", argv[1]);
- if (r < 0) {
-#if 0
- log_debug_errno(r, "Failed to send signal message on private connection: %m");
-#else
- log_debug_errno(r, "Failed to send signal message: %m");
-#endif // 0
+ if ((size_t) n != l) {
+ log_debug("Datagram size mismatch");
return EXIT_FAILURE;
}