X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fcgroups-agent%2Fcgroups-agent.c;h=9fb7e34dd7560da2fbac627e56fcf51e5f3d009d;hb=243f760626232036dda3483f94152cc5ae63a1a1;hp=cca5cec3df887fb13fbba1bf8b1499a2bce6feee;hpb=b767c85a403ee56b5f87bc9414638b857dabd18d;p=elogind.git diff --git a/src/cgroups-agent/cgroups-agent.c b/src/cgroups-agent/cgroups-agent.c index cca5cec3d..9fb7e34dd 100644 --- a/src/cgroups-agent/cgroups-agent.c +++ b/src/cgroups-agent/cgroups-agent.c @@ -1,5 +1,3 @@ -/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/ - /*** This file is part of systemd. @@ -20,41 +18,52 @@ ***/ #include +#include -#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_flush_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; }