tree-wide: make bus_map_all_properties return a proper sd_bus_error
And then show it, to make things a bit friendlier to the user if we fail acquiring some props. In fact, this fixes a number of actual bugs, where we used an error structure for output that we actually never got an error in.
This commit is contained in:
parent
4dae8ae6df
commit
f9e0eefc7c
|
@ -461,6 +461,7 @@ static int acquire_host_info(sd_bus *bus, struct host_info **hi) {
|
|||
"org.freedesktop.hostname1",
|
||||
"/org/freedesktop/hostname1",
|
||||
hostname_map,
|
||||
&error,
|
||||
host);
|
||||
if (r < 0)
|
||||
log_debug_errno(r, "Failed to get host information from systemd-hostnamed: %s", bus_error_message(&error, r));
|
||||
|
@ -469,6 +470,7 @@ static int acquire_host_info(sd_bus *bus, struct host_info **hi) {
|
|||
"org.freedesktop.systemd1",
|
||||
"/org/freedesktop/systemd1",
|
||||
manager_map,
|
||||
&error,
|
||||
host);
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to get host information from systemd: %s", bus_error_message(&error, r));
|
||||
|
|
|
@ -137,10 +137,8 @@ static int show_one_name(sd_bus *bus, const char* attr) {
|
|||
"org.freedesktop.hostname1",
|
||||
attr,
|
||||
&error, &reply, "s");
|
||||
if (r < 0) {
|
||||
log_error("Could not get property: %s", bus_error_message(&error, -r));
|
||||
return r;
|
||||
}
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Could not get property: %s", bus_error_message(&error, r));
|
||||
|
||||
r = sd_bus_message_read(reply, "s", &s);
|
||||
if (r < 0)
|
||||
|
@ -151,7 +149,7 @@ static int show_one_name(sd_bus *bus, const char* attr) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int show_all_names(sd_bus *bus) {
|
||||
static int show_all_names(sd_bus *bus, sd_bus_error *error) {
|
||||
StatusInfo info = {};
|
||||
|
||||
static const struct bus_properties_map hostname_map[] = {
|
||||
|
@ -181,6 +179,7 @@ static int show_all_names(sd_bus *bus) {
|
|||
"org.freedesktop.hostname1",
|
||||
"/org/freedesktop/hostname1",
|
||||
hostname_map,
|
||||
error,
|
||||
&info);
|
||||
if (r < 0)
|
||||
goto fail;
|
||||
|
@ -189,6 +188,7 @@ static int show_all_names(sd_bus *bus) {
|
|||
"org.freedesktop.systemd1",
|
||||
"/org/freedesktop/systemd1",
|
||||
manager_map,
|
||||
error,
|
||||
&info);
|
||||
|
||||
print_status_info(&info);
|
||||
|
@ -212,6 +212,8 @@ fail:
|
|||
}
|
||||
|
||||
static int show_status(sd_bus *bus, char **args, unsigned n) {
|
||||
int r;
|
||||
|
||||
assert(args);
|
||||
|
||||
if (arg_pretty || arg_static || arg_transient) {
|
||||
|
@ -226,8 +228,15 @@ static int show_status(sd_bus *bus, char **args, unsigned n) {
|
|||
arg_static ? "StaticHostname" : "Hostname";
|
||||
|
||||
return show_one_name(bus, attr);
|
||||
} else
|
||||
return show_all_names(bus);
|
||||
} else {
|
||||
_cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
|
||||
|
||||
r = show_all_names(bus, &error);
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to query system properties: %s", bus_error_message(&error, r));
|
||||
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
static int set_simple_string(sd_bus *bus, const char *method, const char *value) {
|
||||
|
|
|
@ -166,6 +166,8 @@ static int show_status(sd_bus *bus, char **args, unsigned n) {
|
|||
{ "Locale", "as", NULL, offsetof(StatusInfo, locale) },
|
||||
{}
|
||||
};
|
||||
|
||||
_cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
|
||||
int r;
|
||||
|
||||
assert(bus);
|
||||
|
@ -174,9 +176,10 @@ static int show_status(sd_bus *bus, char **args, unsigned n) {
|
|||
"org.freedesktop.locale1",
|
||||
"/org/freedesktop/locale1",
|
||||
map,
|
||||
&error,
|
||||
&info);
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Could not get properties: %m");
|
||||
return log_error_errno(r, "Could not get properties: %s", bus_error_message(&error, r));
|
||||
|
||||
print_overridden_variables();
|
||||
print_status_info(&info);
|
||||
|
|
|
@ -482,14 +482,15 @@ static int print_session_status_info(sd_bus *bus, const char *path, bool *new_li
|
|||
{}
|
||||
};
|
||||
|
||||
_cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
|
||||
char since1[FORMAT_TIMESTAMP_RELATIVE_MAX], *s1;
|
||||
char since2[FORMAT_TIMESTAMP_MAX], *s2;
|
||||
_cleanup_(session_status_info_clear) SessionStatusInfo i = {};
|
||||
int r;
|
||||
|
||||
r = bus_map_all_properties(bus, "org.freedesktop.login1", path, map, &i);
|
||||
r = bus_map_all_properties(bus, "org.freedesktop.login1", path, map, &error, &i);
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Could not get properties: %m");
|
||||
return log_error_errno(r, "Could not get properties: %s", bus_error_message(&error, r));
|
||||
|
||||
if (*new_line)
|
||||
printf("\n");
|
||||
|
@ -611,14 +612,15 @@ static int print_user_status_info(sd_bus *bus, const char *path, bool *new_line)
|
|||
{}
|
||||
};
|
||||
|
||||
_cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
|
||||
char since1[FORMAT_TIMESTAMP_RELATIVE_MAX], *s1;
|
||||
char since2[FORMAT_TIMESTAMP_MAX], *s2;
|
||||
_cleanup_(user_status_info_clear) UserStatusInfo i = {};
|
||||
int r;
|
||||
|
||||
r = bus_map_all_properties(bus, "org.freedesktop.login1", path, map, &i);
|
||||
r = bus_map_all_properties(bus, "org.freedesktop.login1", path, map, &error, &i);
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Could not get properties: %m");
|
||||
return log_error_errno(r, "Could not get properties: %s", bus_error_message(&error, r));
|
||||
|
||||
if (*new_line)
|
||||
printf("\n");
|
||||
|
@ -685,12 +687,13 @@ static int print_seat_status_info(sd_bus *bus, const char *path, bool *new_line)
|
|||
{}
|
||||
};
|
||||
|
||||
_cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
|
||||
_cleanup_(seat_status_info_clear) SeatStatusInfo i = {};
|
||||
int r;
|
||||
|
||||
r = bus_map_all_properties(bus, "org.freedesktop.login1", path, map, &i);
|
||||
r = bus_map_all_properties(bus, "org.freedesktop.login1", path, map, &error, &i);
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Could not get properties: %m");
|
||||
return log_error_errno(r, "Could not get properties: %s", bus_error_message(&error, r));
|
||||
|
||||
if (*new_line)
|
||||
printf("\n");
|
||||
|
|
|
@ -772,6 +772,7 @@ static int show_machine_info(const char *verb, sd_bus *bus, const char *path, bo
|
|||
{}
|
||||
};
|
||||
|
||||
_cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
|
||||
_cleanup_(machine_status_info_clear) MachineStatusInfo info = {};
|
||||
int r;
|
||||
|
||||
|
@ -784,9 +785,10 @@ static int show_machine_info(const char *verb, sd_bus *bus, const char *path, bo
|
|||
"org.freedesktop.machine1",
|
||||
path,
|
||||
map,
|
||||
&error,
|
||||
&info);
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Could not get properties: %m");
|
||||
return log_error_errno(r, "Could not get properties: %s", bus_error_message(&error, r));
|
||||
|
||||
if (*new_line)
|
||||
printf("\n");
|
||||
|
@ -962,6 +964,7 @@ static int show_image_info(sd_bus *bus, const char *path, bool *new_line) {
|
|||
{}
|
||||
};
|
||||
|
||||
_cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
|
||||
_cleanup_(image_status_info_clear) ImageStatusInfo info = {};
|
||||
int r;
|
||||
|
||||
|
@ -973,9 +976,10 @@ static int show_image_info(sd_bus *bus, const char *path, bool *new_line) {
|
|||
"org.freedesktop.machine1",
|
||||
path,
|
||||
map,
|
||||
&error,
|
||||
&info);
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Could not get properties: %m");
|
||||
return log_error_errno(r, "Could not get properties: %s", bus_error_message(&error, r));
|
||||
|
||||
if (*new_line)
|
||||
printf("\n");
|
||||
|
@ -1029,6 +1033,8 @@ static int show_pool_info(sd_bus *bus) {
|
|||
.usage = (uint64_t) -1,
|
||||
.limit = (uint64_t) -1,
|
||||
};
|
||||
|
||||
_cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
|
||||
int r;
|
||||
|
||||
assert(bus);
|
||||
|
@ -1037,9 +1043,10 @@ static int show_pool_info(sd_bus *bus) {
|
|||
"org.freedesktop.machine1",
|
||||
"/org/freedesktop/machine1",
|
||||
map,
|
||||
&error,
|
||||
&info);
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Could not get properties: %m");
|
||||
return log_error_errno(r, "Could not get properties: %s", bus_error_message(&error, r));
|
||||
|
||||
print_pool_status_info(bus, &info);
|
||||
|
||||
|
|
|
@ -1186,6 +1186,7 @@ static int status_ifindex(sd_bus *bus, int ifindex, const char *name, bool *empt
|
|||
{}
|
||||
};
|
||||
|
||||
_cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
|
||||
_cleanup_free_ char *ifi = NULL, *p = NULL;
|
||||
char ifname[IF_NAMESIZE] = "";
|
||||
char **i;
|
||||
|
@ -1213,9 +1214,10 @@ static int status_ifindex(sd_bus *bus, int ifindex, const char *name, bool *empt
|
|||
"org.freedesktop.resolve1",
|
||||
p,
|
||||
property_map,
|
||||
&error,
|
||||
&link_info);
|
||||
if (r < 0) {
|
||||
log_error_errno(r, "Failed to get link data for %i: %m", ifindex);
|
||||
log_error_errno(r, "Failed to get link data for %i: %s", ifindex, bus_error_message(&error, r));
|
||||
goto finish;
|
||||
}
|
||||
|
||||
|
@ -1405,6 +1407,7 @@ static int status_global(sd_bus *bus, bool *empty_line) {
|
|||
{}
|
||||
};
|
||||
|
||||
_cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
|
||||
char **i;
|
||||
int r;
|
||||
|
||||
|
@ -1415,9 +1418,10 @@ static int status_global(sd_bus *bus, bool *empty_line) {
|
|||
"org.freedesktop.resolve1",
|
||||
"/org/freedesktop/resolve1",
|
||||
property_map,
|
||||
&error,
|
||||
&global_info);
|
||||
if (r < 0) {
|
||||
log_error_errno(r, "Failed to get global data: %m");
|
||||
log_error_errno(r, "Failed to get global data: %s", bus_error_message(&error, r));
|
||||
goto finish;
|
||||
}
|
||||
|
||||
|
|
|
@ -818,16 +818,18 @@ static int run_context_update(RunContext *c, const char *path) {
|
|||
{}
|
||||
};
|
||||
|
||||
_cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
|
||||
int r;
|
||||
|
||||
r = bus_map_all_properties(c->bus,
|
||||
"org.freedesktop.systemd1",
|
||||
path,
|
||||
map,
|
||||
&error,
|
||||
c);
|
||||
if (r < 0) {
|
||||
sd_event_exit(c->event, EXIT_FAILURE);
|
||||
return log_error_errno(r, "Failed to query unit state: %m");
|
||||
return log_error_errno(r, "Failed to query unit state: %s", bus_error_message(&error, r));
|
||||
}
|
||||
|
||||
run_context_check_done(c);
|
||||
|
|
|
@ -1116,9 +1116,9 @@ static int map_basic(sd_bus *bus, const char *member, sd_bus_message *m, sd_bus_
|
|||
int bus_message_map_all_properties(
|
||||
sd_bus_message *m,
|
||||
const struct bus_properties_map *map,
|
||||
sd_bus_error *error,
|
||||
void *userdata) {
|
||||
|
||||
_cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
|
||||
int r;
|
||||
|
||||
assert(m);
|
||||
|
@ -1156,9 +1156,9 @@ int bus_message_map_all_properties(
|
|||
|
||||
v = (uint8_t *)userdata + prop->offset;
|
||||
if (map[i].set)
|
||||
r = prop->set(sd_bus_message_get_bus(m), member, m, &error, v);
|
||||
r = prop->set(sd_bus_message_get_bus(m), member, m, error, v);
|
||||
else
|
||||
r = map_basic(sd_bus_message_get_bus(m), member, m, &error, v);
|
||||
r = map_basic(sd_bus_message_get_bus(m), member, m, error, v);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
|
@ -1184,6 +1184,7 @@ int bus_message_map_all_properties(
|
|||
int bus_message_map_properties_changed(
|
||||
sd_bus_message *m,
|
||||
const struct bus_properties_map *map,
|
||||
sd_bus_error *error,
|
||||
void *userdata) {
|
||||
|
||||
const char *member;
|
||||
|
@ -1192,7 +1193,7 @@ int bus_message_map_properties_changed(
|
|||
assert(m);
|
||||
assert(map);
|
||||
|
||||
r = bus_message_map_all_properties(m, map, userdata);
|
||||
r = bus_message_map_all_properties(m, map, error, userdata);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
|
@ -1222,10 +1223,10 @@ int bus_map_all_properties(
|
|||
const char *destination,
|
||||
const char *path,
|
||||
const struct bus_properties_map *map,
|
||||
sd_bus_error *error,
|
||||
void *userdata) {
|
||||
|
||||
_cleanup_(sd_bus_message_unrefp) sd_bus_message *m = NULL;
|
||||
_cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
|
||||
int r;
|
||||
|
||||
assert(bus);
|
||||
|
@ -1239,13 +1240,13 @@ int bus_map_all_properties(
|
|||
path,
|
||||
"org.freedesktop.DBus.Properties",
|
||||
"GetAll",
|
||||
&error,
|
||||
error,
|
||||
&m,
|
||||
"s", "");
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
return bus_message_map_all_properties(m, map, userdata);
|
||||
return bus_message_map_all_properties(m, map, error, userdata);
|
||||
}
|
||||
|
||||
int bus_connect_transport(BusTransport transport, const char *host, bool user, sd_bus **ret) {
|
||||
|
|
|
@ -50,9 +50,9 @@ struct bus_properties_map {
|
|||
|
||||
int bus_map_id128(sd_bus *bus, const char *member, sd_bus_message *m, sd_bus_error *error, void *userdata);
|
||||
|
||||
int bus_message_map_all_properties(sd_bus_message *m, const struct bus_properties_map *map, void *userdata);
|
||||
int bus_message_map_properties_changed(sd_bus_message *m, const struct bus_properties_map *map, void *userdata);
|
||||
int bus_map_all_properties(sd_bus *bus, const char *destination, const char *path, const struct bus_properties_map *map, void *userdata);
|
||||
int bus_message_map_all_properties(sd_bus_message *m, const struct bus_properties_map *map, sd_bus_error *error, void *userdata);
|
||||
int bus_message_map_properties_changed(sd_bus_message *m, const struct bus_properties_map *map, sd_bus_error *error, void *userdata);
|
||||
int bus_map_all_properties(sd_bus *bus, const char *destination, const char *path, const struct bus_properties_map *map, sd_bus_error *error, void *userdata);
|
||||
|
||||
int bus_async_unregister_and_exit(sd_event *e, sd_bus *bus, const char *name);
|
||||
|
||||
|
|
|
@ -1922,7 +1922,7 @@ static int get_machine_properties(sd_bus *bus, struct machine_info *mi) {
|
|||
bus = container;
|
||||
}
|
||||
|
||||
r = bus_map_all_properties(bus, "org.freedesktop.systemd1", "/org/freedesktop/systemd1", machine_info_property_map, mi);
|
||||
r = bus_map_all_properties(bus, "org.freedesktop.systemd1", "/org/freedesktop/systemd1", machine_info_property_map, NULL, mi);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
|
@ -1957,7 +1957,7 @@ static int get_machine_list(
|
|||
machine_infos[c].name = hn;
|
||||
hn = NULL;
|
||||
|
||||
get_machine_properties(bus, &machine_infos[c]);
|
||||
(void) get_machine_properties(bus, &machine_infos[c]);
|
||||
c++;
|
||||
}
|
||||
|
||||
|
@ -1987,7 +1987,7 @@ static int get_machine_list(
|
|||
return log_oom();
|
||||
}
|
||||
|
||||
get_machine_properties(NULL, &machine_infos[c]);
|
||||
(void) get_machine_properties(NULL, &machine_infos[c]);
|
||||
c++;
|
||||
}
|
||||
|
||||
|
@ -4953,7 +4953,7 @@ static int show_one(
|
|||
return log_error_errno(r, "Failed to get properties: %s", bus_error_message(&error, r));
|
||||
|
||||
if (unit) {
|
||||
r = bus_message_map_all_properties(reply, property_map, &info);
|
||||
r = bus_message_map_all_properties(reply, property_map, &error, &info);
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to map properties: %s", bus_error_message(&error, r));
|
||||
|
||||
|
@ -5125,8 +5125,9 @@ static int show_all(
|
|||
|
||||
static int show_system_status(sd_bus *bus) {
|
||||
char since1[FORMAT_TIMESTAMP_RELATIVE_MAX], since2[FORMAT_TIMESTAMP_MAX];
|
||||
_cleanup_free_ char *hn = NULL;
|
||||
_cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
|
||||
_cleanup_(machine_info_clear) struct machine_info mi = {};
|
||||
_cleanup_free_ char *hn = NULL;
|
||||
const char *on, *off;
|
||||
int r;
|
||||
|
||||
|
@ -5134,9 +5135,9 @@ static int show_system_status(sd_bus *bus) {
|
|||
if (!hn)
|
||||
return log_oom();
|
||||
|
||||
r = bus_map_all_properties(bus, "org.freedesktop.systemd1", "/org/freedesktop/systemd1", machine_info_property_map, &mi);
|
||||
r = bus_map_all_properties(bus, "org.freedesktop.systemd1", "/org/freedesktop/systemd1", machine_info_property_map, &error, &mi);
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to read server status: %m");
|
||||
return log_error_errno(r, "Failed to read server status: %s", bus_error_message(&error, r));
|
||||
|
||||
if (streq_ptr(mi.state, "degraded")) {
|
||||
on = ansi_highlight_red();
|
||||
|
@ -6028,7 +6029,7 @@ static int unit_exists(const char *unit) {
|
|||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to get properties: %s", bus_error_message(&error, r));
|
||||
|
||||
r = bus_message_map_all_properties(reply, property_map, &info);
|
||||
r = bus_message_map_all_properties(reply, property_map, &error, &info);
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to map properties: %s", bus_error_message(&error, r));
|
||||
|
||||
|
|
|
@ -165,6 +165,8 @@ static int show_status(sd_bus *bus, char **args, unsigned n) {
|
|||
{ "RTCTimeUSec", "t", NULL, offsetof(StatusInfo, rtc_time) },
|
||||
{}
|
||||
};
|
||||
|
||||
_cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
|
||||
int r;
|
||||
|
||||
assert(bus);
|
||||
|
@ -173,9 +175,10 @@ static int show_status(sd_bus *bus, char **args, unsigned n) {
|
|||
"org.freedesktop.timedate1",
|
||||
"/org/freedesktop/timedate1",
|
||||
map,
|
||||
&error,
|
||||
&info);
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to query server: %m");
|
||||
return log_error_errno(r, "Failed to query server: %s", bus_error_message(&error, r));
|
||||
|
||||
print_status_info(&info);
|
||||
|
||||
|
|
Loading…
Reference in a new issue