Commit 91b22f21 authored by Lennart Poettering's avatar Lennart Poettering
Browse files

core: move abstract namespace sockets to /dev/.run

Now that we have /dev/.run there's no need to use abstract namespace
sockets. So, let's move things to /dev/.run, to make things more easily
discoverable and improve compat with chroot() and fs namespacing.
parent 88213476
......@@ -1024,7 +1024,7 @@
<variablelist>
<varlistentry>
<term><filename>@/org/freedesktop/systemd1/notify</filename></term>
<term><filename>/var/run/systemd/notify</filename></term>
<listitem><para>Daemon status
notification socket. This is an AF_UNIX
......@@ -1037,7 +1037,7 @@
</varlistentry>
<varlistentry>
<term><filename>@/org/freedesktop/systemd1/logger</filename></term>
<term><filename>/var/run/systemd/logger</filename></term>
<listitem><para>Used internally by the
<filename>systemd-logger.service</filename>
......@@ -1050,7 +1050,7 @@
</varlistentry>
<varlistentry>
<term><filename>@/org/freedesktop/systemd1/shutdown</filename></term>
<term><filename>/var/run/systemd/shutdownd</filename></term>
<listitem><para>Used internally by the
<citerefentry><refentrytitle>shutdown</refentrytitle><manvolnum>8</manvolnum></citerefentry>
......@@ -1061,7 +1061,7 @@
</varlistentry>
<varlistentry>
<term><filename>@/org/freedesktop/systemd1/private</filename></term>
<term><filename>/var/run/systemd/private</filename></term>
<listitem><para>Used internally as
communication channel between
......
......@@ -49,10 +49,19 @@ int main(int argc, char *argv[]) {
* this to avoid an activation loop when we start dbus when we
* are called when the dbus service is shut down. */
if (!(bus = dbus_connection_open_private("unix:abstract=/org/freedesktop/systemd1/private", &error))) {
log_error("Failed to get D-Bus connection: %s", bus_error_message(&error));
goto finish;
if (!(bus = dbus_connection_open_private("unix:path=/dev/.run/systemd/private", &error))) {
#ifndef LEGACY
dbus_error_free(&error);
/* Retry with the pre v21 socket name, to ease upgrades */
if (!(bus = dbus_connection_open_private("unix:abstract=/org/freedesktop/systemd1/private", &error))) {
#endif
log_error("Failed to get D-Bus connection: %s", bus_error_message(&error));
goto finish;
}
#ifndef LEGACY
}
#endif
if (bus_check_peercred(bus) < 0) {
log_error("Bus owner not root.");
......
......@@ -104,8 +104,16 @@ int bus_connect(DBusBusType t, DBusConnection **_bus, bool *private, DBusError *
/* If we are root, then let's not go via the bus */
if (geteuid() == 0 && t == DBUS_BUS_SYSTEM) {
if (!(bus = dbus_connection_open_private("unix:abstract=/org/freedesktop/systemd1/private", error)))
return -EIO;
if (!(bus = dbus_connection_open_private("unix:path=/dev/.run/systemd/private", error))) {
#ifndef LEGACY
dbus_error_free(error);
/* Retry with the pre v21 socket name, to ease upgrades */
if (!(bus = dbus_connection_open_private("unix:abstract=/org/freedesktop/systemd1/private", error)))
#endif
return -EIO;
}
dbus_connection_set_exit_on_disconnect(bus, FALSE);
......
......@@ -955,7 +955,7 @@ static int bus_init_private(Manager *m) {
if (getpid() != 1)
return 0;
if (!(m->private_bus = dbus_server_listen("unix:abstract=/org/freedesktop/systemd1/private", &error))) {
if (!(m->private_bus = dbus_server_listen("unix:path=/dev/.run/systemd/private", &error))) {
log_error("Failed to create private D-Bus server: %s", error.message);
r = -EIO;
goto fail;
......
......@@ -173,9 +173,9 @@ static int connect_logger_as(const ExecContext *context, ExecOutput output, cons
zero(sa);
sa.sa.sa_family = AF_UNIX;
strncpy(sa.un.sun_path+1, LOGGER_SOCKET, sizeof(sa.un.sun_path)-1);
strncpy(sa.un.sun_path, LOGGER_SOCKET, sizeof(sa.un.sun_path));
if (connect(fd, &sa.sa, offsetof(struct sockaddr_un, sun_path) + 1 + sizeof(LOGGER_SOCKET) - 1) < 0) {
if (connect(fd, &sa.sa, offsetof(struct sockaddr_un, sun_path) + sizeof(LOGGER_SOCKET) - 1) < 0) {
close_nointr_nofail(fd);
return -errno;
}
......
......@@ -40,7 +40,7 @@ struct CGroupBonding;
#include "util.h"
/* Abstract namespace! */
#define LOGGER_SOCKET "/org/freedesktop/systemd1/logger"
#define LOGGER_SOCKET "/dev/.run/systemd/logger"
/* This doesn't really belong here, but I couldn't find a better place to put this. */
#define SIGNALS_CRASH_HANDLER SIGSEGV,SIGILL,SIGFPE,SIGBUS,SIGQUIT,SIGABRT
......
......@@ -66,7 +66,8 @@
#define GC_QUEUE_USEC_MAX (10*USEC_PER_SEC)
/* Where clients shall send notification messages to */
#define NOTIFY_SOCKET "/org/freedesktop/systemd1/notify"
#define NOTIFY_SOCKET_SYSTEM "/dev/.run/systemd/notify"
#define NOTIFY_SOCKET_USER "@/org/freedesktop/systemd1/notify"
static int manager_setup_notify(Manager *m) {
union {
......@@ -88,9 +89,12 @@ static int manager_setup_notify(Manager *m) {
sa.sa.sa_family = AF_UNIX;
if (getpid() != 1)
snprintf(sa.un.sun_path+1, sizeof(sa.un.sun_path)-1, NOTIFY_SOCKET "/%llu", random_ull());
snprintf(sa.un.sun_path, sizeof(sa.un.sun_path), NOTIFY_SOCKET_USER "/%llu", random_ull());
else
strncpy(sa.un.sun_path+1, NOTIFY_SOCKET, sizeof(sa.un.sun_path)-1);
strncpy(sa.un.sun_path, NOTIFY_SOCKET_SYSTEM, sizeof(sa.un.sun_path));
if (sa.un.sun_path[0] == '@')
sa.un.sun_path[0] = 0;
if (bind(m->notify_watch.fd, &sa.sa, offsetof(struct sockaddr_un, sun_path) + 1 + strlen(sa.un.sun_path+1)) < 0) {
log_error("bind() failed: %m");
......@@ -109,7 +113,10 @@ static int manager_setup_notify(Manager *m) {
if (epoll_ctl(m->epoll_fd, EPOLL_CTL_ADD, m->notify_watch.fd, &ev) < 0)
return -errno;
if (!(m->notify_socket = strdup(sa.un.sun_path+1)))
if (sa.un.sun_path[0] == 0)
sa.un.sun_path[0] = '@';
if (!(m->notify_socket = strdup(sa.un.sun_path)))
return -ENOMEM;
log_debug("Using notification socket %s", m->notify_socket);
......
......@@ -1659,7 +1659,7 @@ static int service_spawn(
}
if (set_notify_socket)
if (asprintf(our_env + n_env++, "NOTIFY_SOCKET=@%s", s->meta.manager->notify_socket) < 0) {
if (asprintf(our_env + n_env++, "NOTIFY_SOCKET=%s", s->meta.manager->notify_socket) < 0) {
r = -ENOMEM;
goto fail;
}
......
......@@ -5364,7 +5364,7 @@ static int send_shutdownd(usec_t t, char mode, bool warn, const char *message) {
zero(sockaddr);
sockaddr.sa.sa_family = AF_UNIX;
sockaddr.un.sun_path[0] = 0;
strncpy(sockaddr.un.sun_path+1, "/org/freedesktop/systemd1/shutdownd", sizeof(sockaddr.un.sun_path)-1);
strncpy(sockaddr.un.sun_path, "/dev/.run/systemd/shutdownd", sizeof(sockaddr.un.sun_path));
zero(iovec);
iovec.iov_base = (char*) &c;
......@@ -5372,7 +5372,7 @@ static int send_shutdownd(usec_t t, char mode, bool warn, const char *message) {
zero(msghdr);
msghdr.msg_name = &sockaddr;
msghdr.msg_namelen = offsetof(struct sockaddr_un, sun_path) + 1 + sizeof("/org/freedesktop/systemd1/shutdownd") - 1;
msghdr.msg_namelen = offsetof(struct sockaddr_un, sun_path) + sizeof("/dev/.run/systemd/shutdownd") - 1;
msghdr.msg_iov = &iovec;
msghdr.msg_iovlen = 1;
......
......@@ -13,4 +13,4 @@ DefaultDependencies=no
Before=sockets.target
[Socket]
ListenStream=@/org/freedesktop/systemd1/logger
ListenStream=/dev/.run/systemd/logger
......@@ -13,4 +13,4 @@ DefaultDependencies=no
Before=sockets.target
[Socket]
ListenDatagram=@/org/freedesktop/systemd1/shutdownd
ListenDatagram=/dev/.run/systemd/shutdownd
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment