From: Lennart Poettering Date: Sun, 11 Jul 2010 01:49:22 +0000 (+0200) Subject: Merge branch 'master' of ssh://git.freedesktop.org/git/systemd X-Git-Tag: v3~47 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=dce3acd2e2447a9de642768f86e39d7c9d5bee81;hp=17bb73821c750f8df876114e6d5e116537f335e5;p=elogind.git Merge branch 'master' of ssh://git.freedesktop.org/git/systemd --- diff --git a/src/dbus-common.c b/src/dbus-common.c index 11d989d7c..267ab2646 100644 --- a/src/dbus-common.c +++ b/src/dbus-common.c @@ -62,7 +62,7 @@ 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("unix:abstract=/org/freedesktop/systemd1/private", error))) + if (!(bus = dbus_connection_open_private("unix:abstract=/org/freedesktop/systemd1/private", error))) return -EIO; if (bus_check_peercred(bus) < 0) { diff --git a/src/initctl.c b/src/initctl.c index 7241acb8d..83a560a14 100644 --- a/src/initctl.c +++ b/src/initctl.c @@ -232,7 +232,7 @@ static void server_done(Server *s) { close_nointr_nofail(s->epoll_fd); if (s->bus) { - dbus_connection_set_exit_on_disconnect(s->bus, FALSE); + dbus_connection_close(s->bus); dbus_connection_unref(s->bus); } } @@ -297,14 +297,10 @@ static int server_init(Server *s, unsigned n_sockets) { s->n_fifos ++; } - if (!(s->bus = dbus_connection_open("unix:abstract=/org/freedesktop/systemd1/private", &error))) { + if (bus_connect(DBUS_BUS_SYSTEM, &s->bus, NULL, &error) < 0) { log_error("Failed to get D-Bus connection: %s", error.message); goto fail; } - if ((r = bus_check_peercred(s->bus)) < 0) { - log_error("Bus connection failed peer credential check: %s", strerror(-r)); - goto fail; - } return 0; diff --git a/src/manager.c b/src/manager.c index d26541d3e..6dfef713e 100644 --- a/src/manager.c +++ b/src/manager.c @@ -89,7 +89,7 @@ static int manager_setup_notify(Manager *m) { else strncpy(sa.un.sun_path+1, NOTIFY_SOCKET, sizeof(sa.un.sun_path)-1); - if (bind(m->notify_watch.fd, &sa.sa, sizeof(sa)) < 0) { + if (bind(m->notify_watch.fd, &sa.sa, sizeof(sa_family_t) + 1 + strlen(sa.un.sun_path+1)) < 0) { log_error("bind() failed: %m"); return -errno; } diff --git a/src/socket-util.c b/src/socket-util.c index 5463ffbcb..e6e3784bc 100644 --- a/src/socket-util.c +++ b/src/socket-util.c @@ -101,7 +101,7 @@ int socket_address_parse(SocketAddress *a, const char *s) { a->sockaddr.un.sun_family = AF_UNIX; memcpy(a->sockaddr.un.sun_path+1, s+1, l); - a->size = sizeof(struct sockaddr_un); + a->size = sizeof(sa_family_t) + 1 + l; } else { @@ -198,11 +198,7 @@ int socket_address_verify(const SocketAddress *a) { if (a->size > sizeof(sa_family_t)) { - if (a->sockaddr.un.sun_path[0] == 0) { - /* abstract */ - if (a->size != sizeof(struct sockaddr_un)) - return -EINVAL; - } else { + if (a->sockaddr.un.sun_path[0] != 0) { char *e; /* path */ @@ -437,7 +433,7 @@ bool socket_address_equal(const SocketAddress *a, const SocketAddress *b) { if (strncmp(a->sockaddr.un.sun_path, b->sockaddr.un.sun_path, sizeof(a->sockaddr.un.sun_path)) != 0) return false; } else { - if (memcmp(a->sockaddr.un.sun_path, b->sockaddr.un.sun_path, sizeof(a->sockaddr.un.sun_path)) != 0) + if (memcmp(a->sockaddr.un.sun_path, b->sockaddr.un.sun_path, a->size) != 0) return false; } diff --git a/src/systemctl.c b/src/systemctl.c index 666cebfcd..05e6ac914 100644 --- a/src/systemctl.c +++ b/src/systemctl.c @@ -3056,7 +3056,7 @@ static int talk_upstart(void) { if (utmp_get_runlevel(&previous, NULL) < 0) previous = 'N'; - if (!(bus = dbus_connection_open("unix:abstract=/com/ubuntu/upstart", &error))) { + if (!(bus = dbus_connection_open_private("unix:abstract=/com/ubuntu/upstart", &error))) { if (dbus_error_has_name(&error, DBUS_ERROR_NO_SERVER)) { r = 0; goto finish; @@ -3120,8 +3120,10 @@ finish: if (reply) dbus_message_unref(reply); - if (bus) + if (bus) { + dbus_connection_close(bus); dbus_connection_unref(bus); + } dbus_error_free(&error); @@ -3444,8 +3446,10 @@ int main(int argc, char*argv[]) { finish: - if (bus) + if (bus) { + dbus_connection_close(bus); dbus_connection_unref(bus); + } dbus_error_free(&error); diff --git a/src/test-loopback.c b/src/test-loopback.c index 478f2f61e..74449871a 100644 --- a/src/test-loopback.c +++ b/src/test-loopback.c @@ -22,6 +22,7 @@ #include #include #include +#include #include "loopback-setup.h" #include "util.h"