X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Fdbus1-generator%2Fdbus1-generator.c;h=1c24b3ad6350c0de95023b55304ad247e5a88086;hp=dd299edc75e8f62c0e7c5f118bd5fb08bab12c09;hb=7a821bfec1bffff043a5bcd82f9cba8927b4b4cb;hpb=c71ecee578fa2d89d13f11edd7b27001f663bbb5 diff --git a/src/dbus1-generator/dbus1-generator.c b/src/dbus1-generator/dbus1-generator.c index dd299edc7..1c24b3ad6 100644 --- a/src/dbus1-generator/dbus1-generator.c +++ b/src/dbus1-generator/dbus1-generator.c @@ -28,7 +28,7 @@ #include "unit-name.h" #include "cgroup-util.h" -static const char *arg_dest = "/tmp"; +static const char *arg_dest_late = "/tmp", *arg_dest = "/tmp"; static int create_dbus_files( const char *path, @@ -52,7 +52,7 @@ static int create_dbus_files( if (!s) return log_oom(); - a = strjoin(arg_dest, "/", s, NULL); + a = strjoin(arg_dest_late, "/", s, NULL); if (!a) return log_oom(); @@ -84,9 +84,10 @@ static int create_dbus_files( fprintf(f, "Environment=DBUS_STARTER_BUS_TYPE=%s\n", type); if (streq(type, "system")) - fprintf(f, "Environment=DBUS_STARTER_ADDRESS=kernel:/dev/kdbus/0-system\n"); + fprintf(f, "Environment=DBUS_STARTER_ADDRESS=kernel:path=/dev/kdbus/0-system\n"); else if (streq(type, "session")) - fprintf(f, "Environment=DBUS_STARTER_ADDRESS=kernel:/dev/kdbus/%lu-user\n", (unsigned long) getuid()); + fprintf(f, "Environment=DBUS_STARTER_ADDRESS=kernel:path=/dev/kdbus/%lu-user;unix:path=/run/user/%lu/bus\n", + (unsigned long) getuid(), (unsigned long) getuid()); } fflush(f); @@ -98,7 +99,7 @@ static int create_dbus_files( service = s; } - b = strjoin(arg_dest, "/", name, ".busname", NULL); + b = strjoin(arg_dest_late, "/", name, ".busname", NULL); if (!b) return log_oom(); @@ -127,7 +128,7 @@ static int create_dbus_files( return -errno; } - lnk = strjoin(arg_dest, "/" SPECIAL_BUSNAMES_TARGET ".wants/", name, ".busname", NULL); + lnk = strjoin(arg_dest_late, "/" SPECIAL_BUSNAMES_TARGET ".wants/", name, ".busname", NULL); if (!lnk) return log_oom(); @@ -190,7 +191,7 @@ static int add_dbus(const char *path, const char *fname, const char *type) { } if (service) { - if (!unit_name_is_valid(service, false)) { + if (!unit_name_is_valid(service, TEMPLATE_INVALID)) { log_warning("Unit name %s is not valid, ignoring.", service); return 0; } @@ -264,6 +265,34 @@ static int link_busnames_target(const char *units) { return 0; } +static int link_compatibility(const char *units) { + const char *f, *t; + + f = strappenda(units, "/systemd-bus-proxyd.socket"); + t = strappenda(arg_dest, "/" SPECIAL_DBUS_SOCKET); + mkdir_parents_label(t, 0755); + if (symlink(f, t) < 0) { + log_error("Failed to create symlink %s: %m", t); + return -errno; + } + + f = strappenda(units, "/systemd-bus-proxyd.socket"); + t = strappenda(arg_dest, "/" SPECIAL_SOCKETS_TARGET ".wants/systemd-bus-proxyd.socket"); + mkdir_parents_label(t, 0755); + if (symlink(f, t) < 0) { + log_error("Failed to create symlink %s: %m", t); + return -errno; + } + + t = strappenda(arg_dest, "/" SPECIAL_DBUS_SERVICE); + if (symlink("/dev/null", t) < 0) { + log_error("Failed to mask %s: %m", t); + return -errno; + } + + return 0; +} + int main(int argc, char *argv[]) { const char *path, *type, *units; int r, q; @@ -273,8 +302,10 @@ int main(int argc, char *argv[]) { return EXIT_FAILURE; } - if (argc > 1) - arg_dest = argv[3]; + if (argc > 1) { + arg_dest = argv[1]; + arg_dest_late = argv[3]; + } log_set_target(LOG_TARGET_SAFE); log_parse_environment(); @@ -306,5 +337,9 @@ int main(int argc, char *argv[]) { if (q < 0) r = q; + q = link_compatibility(units); + if (q < 0) + r = q; + return r < 0 ? EXIT_FAILURE : EXIT_SUCCESS; }