X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Flibsystemd%2Fsd-bus%2Fsd-bus.c;h=a8295b2778b7b78b86b70abf407fd063af8b09ea;hp=2c458f311c0912aaef1e85e15d89256376cf8624;hb=5972fe953ec56c77936a1e612ca87d8a0e6c0c64;hpb=069f5e61eb128aa08b6fdff12fc6ac71c3897b48 diff --git a/src/libsystemd/sd-bus/sd-bus.c b/src/libsystemd/sd-bus/sd-bus.c index 2c458f311..a8295b277 100644 --- a/src/libsystemd/sd-bus/sd-bus.c +++ b/src/libsystemd/sd-bus/sd-bus.c @@ -144,6 +144,7 @@ static void bus_free(sd_bus *b) { free(b->machine); free(b->fake_label); free(b->cgroup_root); + free(b->connection_name); free(b->exec_path); strv_free(b->exec_argv); @@ -284,7 +285,7 @@ _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) { +_public_ int sd_bus_negotiate_timestamp(sd_bus *bus, int b) { assert_return(bus, -EINVAL); assert_return(bus->state == BUS_UNSET, -EPERM); assert_return(!bus_pid_changed(bus), -ECHILD); @@ -293,7 +294,7 @@ _public_ int sd_bus_negotiate_attach_timestamp(sd_bus *bus, int b) { return 0; } -_public_ int sd_bus_negotiate_attach_creds(sd_bus *bus, uint64_t mask) { +_public_ int sd_bus_negotiate_creds(sd_bus *bus, uint64_t mask) { assert_return(bus, -EINVAL); assert_return(mask <= _SD_BUS_CREDS_ALL, -EINVAL); assert_return(bus->state == BUS_UNSET, -EPERM); @@ -334,6 +335,24 @@ _public_ int sd_bus_set_trusted(sd_bus *bus, int b) { return 0; } +_public_ int sd_bus_set_name(sd_bus *bus, const char *name) { + char *n; + + assert_return(bus, -EINVAL); + assert_return(name, -EINVAL); + assert_return(bus->state == BUS_UNSET, -EPERM); + assert_return(!bus_pid_changed(bus), -ECHILD); + + n = strdup(name); + if (!n) + return -ENOMEM; + + free(bus->connection_name); + bus->connection_name = n; + + return 0; +} + static int hello_callback(sd_bus *bus, sd_bus_message *reply, void *userdata, sd_bus_error *error) { const char *s; int r; @@ -1053,6 +1072,7 @@ _public_ int sd_bus_open_system(sd_bus **ret) { goto fail; b->bus_client = true; + b->is_system = true; /* Let's do per-method access control on the system bus. We * need the caller's UID and capability set for that. */ @@ -1118,6 +1138,7 @@ _public_ int sd_bus_open_user(sd_bus **ret) { } b->bus_client = true; + b->is_user = true; /* We don't do any per-method access control on the user * bus. */ @@ -3034,3 +3055,12 @@ _public_ int sd_bus_try_close(sd_bus *bus) { sd_bus_close(bus); return 0; } + +_public_ int sd_bus_get_name(sd_bus *bus, const char **name) { + assert_return(bus, -EINVAL); + assert_return(name, -EINVAL); + assert_return(!bus_pid_changed(bus), -ECHILD); + + *name = bus->connection_name; + return 0; +}