X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Flibsystemd%2Fsd-bus%2Fbus-message.c;h=1362a60f0869cb49a6f0fa16166a12b792f73571;hb=53a83f4bc037379b48a078b748287d333569ccfb;hp=bfb14fcce613d409f3fe375381bde3cabb91ac9a;hpb=fd989a0bc999d79719408ac28b126d9c9016bcb5;p=elogind.git diff --git a/src/libsystemd/sd-bus/bus-message.c b/src/libsystemd/sd-bus/bus-message.c index bfb14fcce..1362a60f0 100644 --- a/src/libsystemd/sd-bus/bus-message.c +++ b/src/libsystemd/sd-bus/bus-message.c @@ -128,10 +128,11 @@ static void message_free(sd_bus_message *m) { message_reset_parts(m); if (m->release_kdbus) { - uint64_t off; + struct kdbus_cmd_free cmd_free; - off = (uint8_t *)m->kdbus - (uint8_t *)m->bus->kdbus_buffer; - ioctl(m->bus->input_fd, KDBUS_CMD_FREE, &off); + cmd_free.flags = 0; + cmd_free.offset = (uint8_t *)m->kdbus - (uint8_t *)m->bus->kdbus_buffer; + (void) ioctl(m->bus->input_fd, KDBUS_CMD_FREE, &cmd_free); } if (m->free_kdbus) @@ -848,6 +849,13 @@ _public_ int sd_bus_message_get_auto_start(sd_bus_message *m) { return !(m->header->flags & BUS_MESSAGE_NO_AUTO_START); } +_public_ int sd_bus_message_get_allow_interactive_authorization(sd_bus_message *m) { + assert_return(m, -EINVAL); + + return m->header->type == SD_BUS_MESSAGE_METHOD_CALL && + (m->header->flags & BUS_MESSAGE_ALLOW_INTERACTIVE_AUTHORIZATION); +} + _public_ const char *sd_bus_message_get_path(sd_bus_message *m) { assert_return(m, NULL); @@ -998,6 +1006,18 @@ _public_ int sd_bus_message_set_auto_start(sd_bus_message *m, int b) { return 0; } +_public_ int sd_bus_message_set_allow_interactive_authorization(sd_bus_message *m, int b) { + assert_return(m, -EINVAL); + assert_return(!m->sealed, -EPERM); + + if (b) + m->header->flags |= BUS_MESSAGE_ALLOW_INTERACTIVE_AUTHORIZATION; + else + m->header->flags &= ~BUS_MESSAGE_ALLOW_INTERACTIVE_AUTHORIZATION; + + return 0; +} + static struct bus_container *message_get_container(sd_bus_message *m) { assert(m); @@ -5337,7 +5357,7 @@ int bus_header_message_size(struct bus_header *h, size_t *sum) { } _public_ int sd_bus_message_get_errno(sd_bus_message *m) { - assert_return(m, -EINVAL); + assert_return(m, EINVAL); if (m->header->type != SD_BUS_MESSAGE_METHOD_ERROR) return 0;