}
static int bus_socket_setup(sd_bus *b) {
- int one;
+ int enable;
assert(b);
- /* Enable SO_PASSCRED + SO_PASSEC. We try this on any socket,
- * just in case. This is actually irrelavant for */
- one = 1;
- setsockopt(b->fd, SOL_SOCKET, SO_PASSCRED, &one, sizeof(one));
- setsockopt(b->fd, SOL_SOCKET, SO_PASSSEC, &one, sizeof(one));
+ /* Enable SO_PASSCRED + SO_PASSEC. We try this on any
+ * socket, just in case. */
+ enable = !b->bus_client;
+ setsockopt(b->fd, SOL_SOCKET, SO_PASSCRED, &enable, sizeof(enable));
+ setsockopt(b->fd, SOL_SOCKET, SO_PASSSEC, &enable, sizeof(enable));
/* Increase the buffers to a MB */
fd_inc_rcvbuf(b->fd, 1024*1024);
n = (cmsg->cmsg_len - CMSG_LEN(0)) / sizeof(int);
+ if (!bus->can_fds) {
+ /* Whut? We received fds but this
+ * isn't actually enabled? Close them,
+ * and fail */
+
+ close_many((int*) CMSG_DATA(cmsg), n);
+ return -EIO;
+ }
+
f = realloc(bus->fds, sizeof(int) + (bus->n_fds + n));
if (!f) {
close_many((int*) CMSG_DATA(cmsg), n);