mirror of
https://github.com/systemd/systemd.git
synced 2024-10-27 18:55:40 +03:00
sd-bus: allow description to be set for system/user busses (#8594)
sd_bus_open/sd_bus_open_system/sd_bus_open_user are convenient, but don't allow the description to be set. After they return, the bus is is already started, and sd_bus_set_description() fails with -EBUSY. It would be possible to allow sd_bus_set_description() to update the description "live", but messages are already emitted from sd_bus_open functions, so it's better to allow the description to be set in sd_bus_open/sd_bus_open_system/sd_bus_open_user. Fixes message like: Bus n/a: changing state UNSET → OPENING
This commit is contained in:
parent
c75436067f
commit
56fbd7187a
@ -895,9 +895,9 @@ int bus_init_api(Manager *m) {
|
||||
bus = sd_bus_ref(m->system_bus);
|
||||
else {
|
||||
if (MANAGER_IS_SYSTEM(m))
|
||||
r = sd_bus_open_system(&bus);
|
||||
r = sd_bus_open_system_with_description(&bus, "bus-api-system");
|
||||
else
|
||||
r = sd_bus_open_user(&bus);
|
||||
r = sd_bus_open_user_with_description(&bus, "bus-api-user");
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to connect to API bus: %m");
|
||||
|
||||
@ -959,7 +959,7 @@ int bus_init_system(Manager *m) {
|
||||
if (MANAGER_IS_SYSTEM(m) && m->api_bus)
|
||||
bus = sd_bus_ref(m->api_bus);
|
||||
else {
|
||||
r = sd_bus_open_system(&bus);
|
||||
r = sd_bus_open_system_with_description(&bus, "bus-system");
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to connect to system bus: %m");
|
||||
|
||||
|
@ -774,7 +774,6 @@ static void set_manager_settings(Manager *m) {
|
||||
}
|
||||
|
||||
static int parse_argv(int argc, char *argv[]) {
|
||||
|
||||
enum {
|
||||
ARG_LOG_LEVEL = 0x100,
|
||||
ARG_LOG_TARGET,
|
||||
|
@ -555,3 +555,10 @@ global:
|
||||
sd_bus_get_n_queued_read;
|
||||
sd_bus_get_n_queued_write;
|
||||
} LIBSYSTEMD_237;
|
||||
|
||||
LIBSYSTEMD_239 {
|
||||
global:
|
||||
sd_bus_open_with_description;
|
||||
sd_bus_open_user_with_description;
|
||||
sd_bus_open_system_with_description;
|
||||
} LIBSYSTEMD_238;
|
||||
|
@ -1220,7 +1220,7 @@ _public_ int sd_bus_start(sd_bus *bus) {
|
||||
return bus_send_hello(bus);
|
||||
}
|
||||
|
||||
_public_ int sd_bus_open(sd_bus **ret) {
|
||||
_public_ int sd_bus_open_with_description(sd_bus **ret, const char *description) {
|
||||
const char *e;
|
||||
sd_bus *b;
|
||||
int r;
|
||||
@ -1234,17 +1234,17 @@ _public_ int sd_bus_open(sd_bus **ret) {
|
||||
e = secure_getenv("DBUS_STARTER_BUS_TYPE");
|
||||
if (e) {
|
||||
if (streq(e, "system"))
|
||||
return sd_bus_open_system(ret);
|
||||
return sd_bus_open_system_with_description(ret, description);
|
||||
else if (STR_IN_SET(e, "session", "user"))
|
||||
return sd_bus_open_user(ret);
|
||||
return sd_bus_open_user_with_description(ret, description);
|
||||
}
|
||||
|
||||
e = secure_getenv("DBUS_STARTER_ADDRESS");
|
||||
if (!e) {
|
||||
if (cg_pid_get_owner_uid(0, NULL) >= 0)
|
||||
return sd_bus_open_user(ret);
|
||||
return sd_bus_open_user_with_description(ret, description);
|
||||
else
|
||||
return sd_bus_open_system(ret);
|
||||
return sd_bus_open_system_with_description(ret, description);
|
||||
}
|
||||
|
||||
r = sd_bus_new(&b);
|
||||
@ -1275,6 +1275,10 @@ fail:
|
||||
return r;
|
||||
}
|
||||
|
||||
_public_ int sd_bus_open(sd_bus **ret) {
|
||||
return sd_bus_open_with_description(ret, NULL);
|
||||
}
|
||||
|
||||
int bus_set_address_system(sd_bus *b) {
|
||||
const char *e;
|
||||
assert(b);
|
||||
@ -1286,7 +1290,7 @@ int bus_set_address_system(sd_bus *b) {
|
||||
return sd_bus_set_address(b, DEFAULT_SYSTEM_BUS_ADDRESS);
|
||||
}
|
||||
|
||||
_public_ int sd_bus_open_system(sd_bus **ret) {
|
||||
_public_ int sd_bus_open_system_with_description(sd_bus **ret, const char *description) {
|
||||
sd_bus *b;
|
||||
int r;
|
||||
|
||||
@ -1296,6 +1300,12 @@ _public_ int sd_bus_open_system(sd_bus **ret) {
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
if (description) {
|
||||
r = sd_bus_set_description(b, description);
|
||||
if (r < 0)
|
||||
goto fail;
|
||||
}
|
||||
|
||||
r = bus_set_address_system(b);
|
||||
if (r < 0)
|
||||
goto fail;
|
||||
@ -1321,6 +1331,10 @@ fail:
|
||||
return r;
|
||||
}
|
||||
|
||||
_public_ int sd_bus_open_system(sd_bus **ret) {
|
||||
return sd_bus_open_system_with_description(ret, NULL);
|
||||
}
|
||||
|
||||
int bus_set_address_user(sd_bus *b) {
|
||||
const char *e;
|
||||
_cleanup_free_ char *ee = NULL, *s = NULL;
|
||||
@ -1347,7 +1361,7 @@ int bus_set_address_user(sd_bus *b) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
_public_ int sd_bus_open_user(sd_bus **ret) {
|
||||
_public_ int sd_bus_open_user_with_description(sd_bus **ret, const char *description) {
|
||||
sd_bus *b;
|
||||
int r;
|
||||
|
||||
@ -1357,6 +1371,12 @@ _public_ int sd_bus_open_user(sd_bus **ret) {
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
if (description) {
|
||||
r = sd_bus_set_description(b, description);
|
||||
if (r < 0)
|
||||
goto fail;
|
||||
}
|
||||
|
||||
r = bus_set_address_user(b);
|
||||
if (r < 0)
|
||||
goto fail;
|
||||
@ -1381,6 +1401,10 @@ fail:
|
||||
return r;
|
||||
}
|
||||
|
||||
_public_ int sd_bus_open_user(sd_bus **ret) {
|
||||
return sd_bus_open_user_with_description(ret, NULL);
|
||||
}
|
||||
|
||||
int bus_set_address_system_remote(sd_bus *b, const char *host) {
|
||||
_cleanup_free_ char *e = NULL;
|
||||
char *m = NULL, *c = NULL, *a;
|
||||
|
@ -64,11 +64,11 @@ static int server_init(sd_bus **_bus) {
|
||||
sd_bus *bus = NULL;
|
||||
sd_id128_t id;
|
||||
int r;
|
||||
const char *unique;
|
||||
const char *unique, *desc;
|
||||
|
||||
assert_se(_bus);
|
||||
|
||||
r = sd_bus_open_user(&bus);
|
||||
r = sd_bus_open_user_with_description(&bus, "my bus!");
|
||||
if (r < 0) {
|
||||
log_error_errno(r, "Failed to connect to user bus: %m");
|
||||
goto fail;
|
||||
@ -86,6 +86,9 @@ static int server_init(sd_bus **_bus) {
|
||||
goto fail;
|
||||
}
|
||||
|
||||
r = sd_bus_get_description(bus, &desc);
|
||||
assert_se(streq(desc, "my bus!"));
|
||||
|
||||
log_info("Peer ID is " SD_ID128_FORMAT_STR ".", SD_ID128_FORMAT_VAL(id));
|
||||
log_info("Unique ID: %s", unique);
|
||||
log_info("Can send file handles: %i", sd_bus_can_send(bus, 'h'));
|
||||
|
@ -122,8 +122,11 @@ int sd_bus_default_user(sd_bus **ret);
|
||||
int sd_bus_default_system(sd_bus **ret);
|
||||
|
||||
int sd_bus_open(sd_bus **ret);
|
||||
int sd_bus_open_with_description(sd_bus **ret, const char *description);
|
||||
int sd_bus_open_user(sd_bus **ret);
|
||||
int sd_bus_open_user_with_description(sd_bus **ret, const char *description);
|
||||
int sd_bus_open_system(sd_bus **ret);
|
||||
int sd_bus_open_system_with_description(sd_bus **ret, const char *description);
|
||||
int sd_bus_open_system_remote(sd_bus **ret, const char *host);
|
||||
int sd_bus_open_system_machine(sd_bus **ret, const char *machine);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user