diff options
author | Rodrigo Moya <rodrigo.moya@collabora.co.uk> | 2012-06-06 16:05:13 +0200 |
---|---|---|
committer | Rodrigo Moya <rodrigo@gnome-db.org> | 2012-06-06 16:05:13 +0200 |
commit | 12aabb859e7814502ea26f8e537b6a5f13ffdaa6 (patch) | |
tree | 2c1c8a0908a0cc283706cb4b0691237055af261b | |
parent | 7b326031a11eecb56ba0cb6ef72fdb78609a27e7 (diff) | |
download | dbus-12aabb859e7814502ea26f8e537b6a5f13ffdaa6.tar.gz |
Assign an address on RequestName for AF_BUS peers
-rw-r--r-- | bus/driver-afbus.c | 32 | ||||
-rw-r--r-- | bus/driver-afbus.h | 7 | ||||
-rw-r--r-- | bus/driver.c | 7 |
3 files changed, 46 insertions, 0 deletions
diff --git a/bus/driver-afbus.c b/bus/driver-afbus.c index bf18781f..507a19a6 100644 --- a/bus/driver-afbus.c +++ b/bus/driver-afbus.c @@ -283,3 +283,35 @@ bus_driver_afbus_emit_forwarded (BusTransaction *transaction, return result; } + +dbus_bool_t +bus_driver_afbus_assign_address (DBusConnection *connection) +{ + struct sockaddr_bus address; + long len = sizeof (address); + int fd; + static unsigned long long next_address = 0x1111000000000001; + + memset (&address, 0, sizeof (address)); + if (!dbus_connection_get_peer_address (connection, &address, &len) || + ((struct sockaddr *) &address)->sa_family != AF_BUS) + { + /* Don't return an error if it is not a AF_BUS socket */ + return TRUE; + } + + if (!dbus_connection_get_unix_fd (connection, &fd)) + { + return FALSE; + } + + address.sbus_addr.s_addr = next_address; + if (setsockopt (fd, SOL_BUS, BUS_ADD_ADDR, &address, sizeof (address)) != 0) + { + return FALSE; + } + + next_address++; + + return TRUE; +} diff --git a/bus/driver-afbus.h b/bus/driver-afbus.h index e5d67e97..e179537e 100644 --- a/bus/driver-afbus.h +++ b/bus/driver-afbus.h @@ -41,6 +41,7 @@ dbus_bool_t bus_driver_afbus_emit_forwarded (BusTransaction *transaction, DBusConnection *connection, DBusConnection *addressed_recipient, const char *service_name); +dbus_bool_t bus_driver_afbus_assign_address (DBusConnection *connection); #else static inline dbus_bool_t bus_driver_afbus_add_match_rule (DBusConnection *connection, @@ -74,6 +75,12 @@ dbus_bool_t bus_driver_afbus_emit_forwarded (BusTransaction *transaction, return TRUE; } +static inline +dbus_bool_t bus_driver_afbus_assign_address (DBusConnection *connection) +{ + return TRUE; +} + #endif #endif /* BUS_DRIVER_AFBUS_H */ diff --git a/bus/driver.c b/bus/driver.c index 740d8963..d776e2cc 100644 --- a/bus/driver.c +++ b/bus/driver.c @@ -616,6 +616,13 @@ bus_driver_handle_acquire_service (DBusConnection *connection, goto out; } + /* If using AF_BUS, assign an address to this peer */ + if (!bus_driver_afbus_assign_address (connection)) + { + BUS_SET_OOM (error); + goto out; + } + retval = TRUE; out: |