-/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
-
/***
This file is part of systemd.
***/
#include <stdlib.h>
+#include <sys/socket.h>
-#include "sd-bus.h"
+#include "fd-util.h"
#include "log.h"
-#include "bus-util.h"
+#include "socket-util.h"
+
+/// Additional includes needed by elogind
+#include "musl_missing.h"
int main(int argc, char *argv[]) {
- _cleanup_bus_close_unref_ 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.");
return EXIT_FAILURE;
}
+ elogind_set_program_name(argv[0]);
log_set_target(LOG_TARGET_AUTO);
log_parse_environment();
log_open();
- /* Unlike in systemd where this has to use a private socket,
- since logind 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);
- if (r < 0) {
- log_debug_errno(r, "Failed to open system bus: %m");
+ 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/systemd1/agent",
- "org.freedesktop.systemd1.Agent",
- "Released",
- "s", argv[1]);
- if (r < 0) {
- log_debug_errno(r, "Failed to send signal message: %m");
+ if ((size_t) n != l) {
+ log_debug("Datagram size mismatch");
return EXIT_FAILURE;
}