X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;ds=sidebyside;f=src%2Flibsystemd%2Fsd-bus%2Fbusctl.c;h=4e396f20c1e9c3cb697b68ba55d2fbfa0b3f600d;hb=3d94f76c99da13e5603831d0b278f8c8c21bcb02;hp=a59b8eab4fa9f04ab9b7217ccbaf62dc8efee258;hpb=17d47d8d2dee22ee4f0a7319b9603d3e33a0b28a;p=elogind.git diff --git a/src/libsystemd/sd-bus/busctl.c b/src/libsystemd/sd-bus/busctl.c index a59b8eab4..4e396f20c 100644 --- a/src/libsystemd/sd-bus/busctl.c +++ b/src/libsystemd/sd-bus/busctl.c @@ -308,7 +308,7 @@ static int status(sd_bus *bus, char *argv[]) { if (r < 0) r = sd_bus_get_owner(bus, argv[1], _SD_BUS_CREDS_ALL, &creds); else - r = sd_bus_creds_new_from_pid(pid, _SD_BUS_CREDS_ALL, &creds); + r = sd_bus_creds_new_from_pid(&creds, pid, _SD_BUS_CREDS_ALL); if (r < 0) { log_error("Failed to get credentials: %s", strerror(-r)); @@ -494,29 +494,75 @@ int main(int argc, char *argv[]) { if (r <= 0) goto finish; - if (arg_address) { - r = sd_bus_new(&bus); + r = sd_bus_new(&bus); + if (r < 0) { + log_error("Failed to allocate bus: %s", strerror(-r)); + goto finish; + } + + if (streq_ptr(argv[optind], "monitor")) { + + r = sd_bus_set_monitor(bus, true); if (r < 0) { - log_error("Failed to allocate bus: %s", strerror(-r)); + log_error("Failed to set monitor mode: %s", strerror(-r)); goto finish; } - r = sd_bus_set_address(bus, arg_address); + r = sd_bus_negotiate_creds(bus, _SD_BUS_CREDS_ALL); if (r < 0) { - log_error("Failed to set address: %s", strerror(-r)); + log_error("Failed to enable credentials: %s", strerror(-r)); goto finish; } - r = sd_bus_set_bus_client(bus, true); + r = sd_bus_negotiate_timestamp(bus, true); if (r < 0) { - log_error("Failed to set bus client: %s", strerror(-r)); + log_error("Failed to enable timestamps: %s", strerror(-r)); goto finish; } - r = sd_bus_start(bus); - } else - r = bus_open_transport(arg_transport, arg_host, arg_user, &bus); + r = sd_bus_negotiate_fds(bus, true); + if (r < 0) { + log_error("Failed to enable fds: %s", strerror(-r)); + goto finish; + } + } + + if (arg_address) + r = sd_bus_set_address(bus, arg_address); + else { + switch (arg_transport) { + + case BUS_TRANSPORT_LOCAL: + if (arg_user) + r = bus_set_address_user(bus); + else + r = bus_set_address_system(bus); + break; + + case BUS_TRANSPORT_REMOTE: + r = bus_set_address_system_remote(bus, arg_host); + break; + + case BUS_TRANSPORT_CONTAINER: + r = bus_set_address_system_container(bus, arg_host); + break; + + default: + assert_not_reached("Hmm, unknown transport type."); + } + } + if (r < 0) { + log_error("Failed to set address: %s", strerror(-r)); + goto finish; + } + + r = sd_bus_set_bus_client(bus, true); + if (r < 0) { + log_error("Failed to set bus client: %s", strerror(-r)); + goto finish; + } + r = sd_bus_start(bus); if (r < 0) { log_error("Failed to connect to bus: %s", strerror(-r)); goto finish;