return sd_bus_message_exit_container(m);
}
-static int print_session_status_info(sd_bus *bus, const char *path) {
+static int print_session_status_info(sd_bus *bus, const char *path, bool *new_line) {
static const struct bus_properties_map map[] = {
{ "Id", "s", NULL, offsetof(SessionStatusInfo, id) },
int r;
r = bus_map_all_properties(bus, "org.freedesktop.login1", path, map, &i);
- if (r < 0)
+ if (r < 0) {
+ log_error("Could not get properties: %s", strerror(-r));
return r;
+ }
+
+ if (*new_line)
+ printf("\n");
+
+ *new_line = true;
printf("%s - ", strna(i.id));
return 0;
}
-static int print_user_status_info(sd_bus *bus, const char *path) {
+static int print_user_status_info(sd_bus *bus, const char *path, bool *new_line) {
static const struct bus_properties_map map[] = {
{ "Name", "s", NULL, offsetof(UserStatusInfo, name) },
int r;
r = bus_map_all_properties(bus, "org.freedesktop.login1", path, map, &i);
- if (r < 0)
+ if (r < 0) {
+ log_error("Could not get properties: %s", strerror(-r));
goto finish;
+ }
+
+ if (*new_line)
+ printf("\n");
+
+ *new_line = true;
if (i.name)
printf("%s (%u)\n", i.name, (unsigned) i.uid);
finish:
strv_free(i.sessions);
- return 0;
+ return r;
}
-static int print_seat_status_info(sd_bus *bus, const char *path) {
+static int print_seat_status_info(sd_bus *bus, const char *path, bool *new_line) {
static const struct bus_properties_map map[] = {
{ "Id", "s", NULL, offsetof(SeatStatusInfo, id) },
int r;
r = bus_map_all_properties(bus, "org.freedesktop.login1", path, map, &i);
- if (r < 0)
+ if (r < 0) {
+ log_error("Could not get properties: %s", strerror(-r));
goto finish;
+ }
+
+ if (*new_line)
+ printf("\n");
+
+ *new_line = true;
printf("%s\n", strna(i.id));
finish:
strv_free(i.sessions);
- return 0;
+ return r;
+}
+
+static int show_properties(sd_bus *bus, const char *path, bool *new_line) {
+ int r;
+
+ if (*new_line)
+ printf("\n");
+
+ *new_line = true;
+
+ r = bus_print_all_properties(bus, "org.freedesktop.login1", path, arg_property, arg_all);
+ if (r < 0)
+ log_error("Could not get properties: %s", strerror(-r));
+
+ return r;
}
static int show_session(sd_bus *bus, char **args, unsigned n) {
- bool show_properties;
+ bool properties, new_line = false;
unsigned i;
int r;
assert(bus);
assert(args);
- show_properties = !strstr(args[0], "status");
+ properties = !strstr(args[0], "status");
pager_open_if_enabled();
- if (show_properties && n <= 1) {
+ if (properties && n <= 1) {
/* If not argument is specified inspect the manager
* itself */
- r = bus_print_all_properties(bus, "org.freedesktop.login1", "/org/freedesktop/login1", NULL, arg_all);
- if (r < 0)
- log_error("Failed to query login manager.");
-
- return r;
+ return show_properties(bus, "/org/freedesktop/login1", &new_line);
}
for (i = 1; i < n; i++) {
_cleanup_bus_message_unref_ sd_bus_message * reply = NULL;
const char *path = NULL;
- if (i != 1)
- printf("\n");
-
r = sd_bus_call_method(
bus,
"org.freedesktop.login1",
if (r < 0)
return bus_log_parse_error(r);
- if (show_properties)
- r = bus_print_all_properties(bus, "org.freedesktop.login1", path, NULL, arg_all);
+ if (properties)
+ r = show_properties(bus, path, &new_line);
else
- r = print_session_status_info(bus, path);
- if (r < 0) {
- log_error("Failed to query session: %s", strerror(-r));
+ r = print_session_status_info(bus, path, &new_line);
+
+ if (r < 0)
return r;
- }
}
return 0;
}
static int show_user(sd_bus *bus, char **args, unsigned n) {
- bool show_properties;
+ bool properties, new_line = false;
unsigned i;
int r;
assert(bus);
assert(args);
- show_properties = !strstr(args[0], "status");
+ properties = !strstr(args[0], "status");
pager_open_if_enabled();
- if (show_properties && n <= 1) {
+ if (properties && n <= 1) {
/* If not argument is specified inspect the manager
* itself */
- r = bus_print_all_properties(bus, "org.freedesktop.login1", "/org/freedesktop/login1", NULL, arg_all);
- if (r < 0)
- log_error("Failed to query login manager.");
-
- return r;
+ return show_properties(bus, "/org/freedesktop/login1", &new_line);
}
for (i = 1; i < n; i++) {
const char *path = NULL;
uid_t uid;
- if (i != 1)
- printf("\n");
-
r = get_user_creds((const char**) (args+i), &uid, NULL, NULL, NULL);
if (r < 0) {
log_error("Failed to look up user %s: %s", args[i], strerror(-r));
if (r < 0)
return bus_log_parse_error(r);
- if (show_properties)
- r = bus_print_all_properties(bus, "org.freedesktop.login1", path, NULL, arg_all);
+ if (properties)
+ r = show_properties(bus, path, &new_line);
else
- r = print_user_status_info(bus, path);
- if (r < 0) {
- log_error("Failed to query user: %s", strerror(-r));
+ r = print_user_status_info(bus, path, &new_line);
+
+ if (r < 0)
return r;
- }
}
return 0;
}
static int show_seat(sd_bus *bus, char **args, unsigned n) {
- bool show_properties;
+ bool properties, new_line = false;
unsigned i;
int r;
assert(bus);
assert(args);
- show_properties = !strstr(args[0], "status");
+ properties = !strstr(args[0], "status");
pager_open_if_enabled();
- if (show_properties && n <= 1) {
+ if (properties && n <= 1) {
/* If not argument is specified inspect the manager
* itself */
- r = bus_print_all_properties(bus, "org.freedesktop.login1", "/org/freedesktop/login1", NULL, arg_all);
- if (r < 0)
- log_error("Failed to query login manager.");
-
- return r;
+ return show_properties(bus, "/org/freedesktop/login1", &new_line);
}
for (i = 1; i < n; i++) {
_cleanup_bus_message_unref_ sd_bus_message * reply = NULL;
const char *path = NULL;
- if (i != 1)
- printf("\n");
-
r = sd_bus_call_method(
bus,
"org.freedesktop.login1",
if (r < 0)
return bus_log_parse_error(r);
- if (show_properties)
- r = bus_print_all_properties(bus, "org.freedesktop.login1", path, NULL, arg_all);
+ if (properties)
+ r = show_properties(bus, path, &new_line);
else
- r = print_seat_status_info(bus, path);
- if (r < 0) {
- log_error("Failed to query seat: %s", strerror(-r));
+ r = print_seat_status_info(bus, path, &new_line);
+
+ if (r < 0)
return r;
- }
}
return 0;
{}
};
- int c;
+ int c, r;
assert(argc >= 0);
assert(argv);
return 0;
case 'p': {
- char **l;
-
- l = strv_append(arg_property, optarg);
- if (!l)
- return -ENOMEM;
-
- strv_free(arg_property);
- arg_property = l;
+ r = strv_extend(&arg_property, optarg);
+ if (r < 0)
+ return log_oom();
/* If the user asked for a particular
* property, show it to him, even if it is