static bool arg_expect_reply = true;
static bool arg_auto_start = true;
static bool arg_allow_interactive_authorization = true;
+static bool arg_augment_creds = true;
static usec_t arg_timeout = 0;
static void pager_open_if_enabled(void) {
r = sd_bus_list_names(bus, (arg_acquired || arg_unique) ? &acquired : NULL, arg_activatable ? &activatable : NULL);
if (r < 0) {
- log_error("Failed to list names: %s", strerror(-r));
+ log_error_errno(-r, "Failed to list names: %m");
return r;
}
r = hashmap_put(names, *i, NAME_IS_ACQUIRED);
if (r < 0) {
- log_error("Failed to add to hashmap: %s", strerror(-r));
+ log_error_errno(-r, "Failed to add to hashmap: %m");
return r;
}
}
r = hashmap_put(names, *i, NAME_IS_ACTIVATABLE);
if (r < 0 && r != -EEXIST) {
- log_error("Failed to add to hashmap: %s", strerror(-r));
+ log_error_errno(-r, "Failed to add to hashmap: %m");
return r;
}
}
printf("%-*s", (int) max_i, *i);
- r = sd_bus_get_name_creds(bus, *i,
- SD_BUS_CREDS_UID|SD_BUS_CREDS_PID|SD_BUS_CREDS_COMM|
- SD_BUS_CREDS_UNIQUE_NAME|SD_BUS_CREDS_UNIT|SD_BUS_CREDS_SESSION|
- SD_BUS_CREDS_DESCRIPTION, &creds);
+ r = sd_bus_get_name_creds(
+ bus, *i,
+ (arg_augment_creds ? SD_BUS_CREDS_AUGMENT : 0) |
+ SD_BUS_CREDS_UID|SD_BUS_CREDS_PID|SD_BUS_CREDS_COMM|
+ SD_BUS_CREDS_UNIQUE_NAME|SD_BUS_CREDS_UNIT|SD_BUS_CREDS_SESSION|
+ SD_BUS_CREDS_DESCRIPTION, &creds);
if (r >= 0) {
const char *unique, *session, *unit, *cn;
pid_t pid;
r = sd_bus_list_names(bus, &names, NULL);
if (r < 0) {
- log_error("Failed to get name list: %s", strerror(-r));
+ log_error_errno(-r, "Failed to get name list: %m");
return r;
}
r = sd_bus_add_match(bus, NULL, m, NULL, NULL);
if (r < 0) {
- log_error("Failed to add match: %s", strerror(-r));
+ log_error_errno(-r, "Failed to add match: %m");
return r;
}
STRV_FOREACH(i, arg_matches) {
r = sd_bus_add_match(bus, NULL, *i, NULL, NULL);
if (r < 0) {
- log_error("Failed to add match: %s", strerror(-r));
+ log_error_errno(-r, "Failed to add match: %m");
return r;
}
if (!added_something) {
r = sd_bus_add_match(bus, NULL, "", NULL, NULL);
if (r < 0) {
- log_error("Failed to add match: %s", strerror(-r));
+ log_error_errno(-r, "Failed to add match: %m");
return r;
}
}
r = sd_bus_process(bus, &m);
if (r < 0) {
- log_error("Failed to process bus: %s", strerror(-r));
+ log_error_errno(-r, "Failed to process bus: %m");
return r;
}
r = sd_bus_wait(bus, (uint64_t) -1);
if (r < 0) {
- log_error("Failed to wait for bus: %s", strerror(-r));
+ log_error_errno(-r, "Failed to wait for bus: %m");
return r;
}
}
assert(bus);
- if (strv_length(argv) != 2) {
- log_error("Expects one argument.");
+ if (strv_length(argv) > 2) {
+ log_error("Expects no or one argument.");
return -EINVAL;
}
- r = parse_pid(argv[1], &pid);
- if (r < 0)
- r = sd_bus_get_name_creds(bus, argv[1], _SD_BUS_CREDS_ALL, &creds);
- else
- r = sd_bus_creds_new_from_pid(&creds, pid, _SD_BUS_CREDS_ALL);
+ if (argv[1]) {
+ r = parse_pid(argv[1], &pid);
+ if (r < 0)
+ r = sd_bus_get_name_creds(
+ bus,
+ argv[1],
+ (arg_augment_creds ? SD_BUS_CREDS_AUGMENT : 0) | _SD_BUS_CREDS_ALL,
+ &creds);
+ else
+ r = sd_bus_creds_new_from_pid(
+ &creds,
+ pid,
+ _SD_BUS_CREDS_ALL);
+ } else
+ r = sd_bus_get_owner_creds(
+ bus,
+ (arg_augment_creds ? SD_BUS_CREDS_AUGMENT : 0) | _SD_BUS_CREDS_ALL,
+ &creds);
if (r < 0) {
- log_error("Failed to get credentials: %s", strerror(-r));
+ log_error_errno(-r, "Failed to get credentials: %m");
return r;
}
" --auto-start=BOOL Auto-start destination service\n"
" --allow-interactive-authorization=BOOL\n"
" Allow interactive authorization for operation\n"
- " --timeout=SECS Maximum time to wait for method call completion\n\n"
+ " --timeout=SECS Maximum time to wait for method call completion\n"
+ " --augment-creds=BOOL Extend credential data with data read from /proc/$PID\n\n"
"Commands:\n"
" list List bus names\n"
- " status SERVICE Show service name status\n"
+ " status [SERVICE] Show bus service, process or bus owner credentials\n"
" monitor [SERVICE...] Show bus traffic\n"
" capture [SERVICE...] Capture bus traffic as pcap\n"
" tree [SERVICE...] Show object tree of service\n"
ARG_AUTO_START,
ARG_ALLOW_INTERACTIVE_AUTHORIZATION,
ARG_TIMEOUT,
+ ARG_AUGMENT_CREDS,
};
static const struct option options[] = {
{ "auto-start", required_argument, NULL, ARG_AUTO_START },
{ "allow-interactive-authorization", required_argument, NULL, ARG_ALLOW_INTERACTIVE_AUTHORIZATION },
{ "timeout", required_argument, NULL, ARG_TIMEOUT },
+ { "augment-creds",required_argument, NULL, ARG_AUGMENT_CREDS},
{},
};
break;
+ case ARG_AUGMENT_CREDS:
+ r = parse_boolean(optarg);
+ if (r < 0) {
+ log_error("Failed to parse --augment-creds= parameter.");
+ return r;
+ }
+
+ arg_augment_creds = !!r;
+ break;
+
case '?':
return -EINVAL;
r = sd_bus_new(&bus);
if (r < 0) {
- log_error("Failed to allocate bus: %s", strerror(-r));
+ log_error_errno(-r, "Failed to allocate bus: %m");
goto finish;
}
r = sd_bus_set_monitor(bus, true);
if (r < 0) {
- log_error("Failed to set monitor mode: %s", strerror(-r));
+ log_error_errno(-r, "Failed to set monitor mode: %m");
goto finish;
}
- r = sd_bus_negotiate_creds(bus, _SD_BUS_CREDS_ALL);
+ r = sd_bus_negotiate_creds(bus, true, _SD_BUS_CREDS_ALL);
if (r < 0) {
- log_error("Failed to enable credentials: %s", strerror(-r));
+ log_error_errno(-r, "Failed to enable credentials: %m");
goto finish;
}
r = sd_bus_negotiate_timestamp(bus, true);
if (r < 0) {
- log_error("Failed to enable timestamps: %s", strerror(-r));
+ log_error_errno(-r, "Failed to enable timestamps: %m");
goto finish;
}
r = sd_bus_negotiate_fds(bus, true);
if (r < 0) {
- log_error("Failed to enable fds: %s", strerror(-r));
+ log_error_errno(-r, "Failed to enable fds: %m");
goto finish;
}
}
else {
r = sd_bus_set_bus_client(bus, true);
if (r < 0) {
- log_error("Failed to set bus client: %s", strerror(-r));
+ log_error_errno(-r, "Failed to set bus client: %m");
goto finish;
}
}
}
if (r < 0) {
- log_error("Failed to set address: %s", strerror(-r));
+ log_error_errno(-r, "Failed to set address: %m");
goto finish;
}
r = sd_bus_start(bus);
if (r < 0) {
- log_error("Failed to connect to bus: %s", strerror(-r));
+ log_error_errno(-r, "Failed to connect to bus: %m");
goto finish;
}