X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Flibsystemd-bus%2Fsd-bus.c;h=0be5a29f367fbe4e53bd2ef6a849feb55a8a1169;hp=95469d8263ff52ccd7fdbaf8b5a1e7bf46562f47;hb=aea93debfa1281a7d5f1523225b043955c1c2472;hpb=0927756b8d2d8040e5ac69f3bb05182b69939dc2 diff --git a/src/libsystemd-bus/sd-bus.c b/src/libsystemd-bus/sd-bus.c index 95469d826..0be5a29f3 100644 --- a/src/libsystemd-bus/sd-bus.c +++ b/src/libsystemd-bus/sd-bus.c @@ -264,6 +264,24 @@ _public_ int sd_bus_negotiate_fds(sd_bus *bus, int b) { return 0; } +_public_ int sd_bus_negotiate_attach_timestamp(sd_bus *bus, int b) { + assert_return(bus, -EINVAL); + assert_return(bus->state == BUS_UNSET, -EPERM); + assert_return(!bus_pid_changed(bus), -ECHILD); + + SET_FLAG(bus->hello_flags, KDBUS_HELLO_ATTACH_TIMESTAMP, b); + return 0; +} + +_public_ int sd_bus_negotiate_attach_creds(sd_bus *bus, int b) { + assert_return(bus, -EINVAL); + assert_return(bus->state == BUS_UNSET, -EPERM); + assert_return(!bus_pid_changed(bus), -ECHILD); + + SET_FLAG(bus->hello_flags, KDBUS_HELLO_ATTACH_CREDS, b); + return 0; +} + _public_ int sd_bus_negotiate_attach_comm(sd_bus *bus, int b) { assert_return(bus, -EINVAL); assert_return(bus->state == BUS_UNSET, -EPERM); @@ -1253,8 +1271,13 @@ static int bus_seal_message(sd_bus *b, sd_bus_message *m) { if (m->header->version > b->message_version) return -EPERM; - if (m->sealed) + if (m->sealed) { + /* If we copy the same message to multiple + * destinations, avoid using the same serial + * numbers. */ + b->serial = MAX(b->serial, BUS_MESSAGE_SERIAL(m)); return 0; + } return bus_message_seal(m, ++b->serial); }