Merge pull request #12733 from keszybz/sd-bus-error-reporting

Bus error reporting improvements
This commit is contained in:
Zbigniew Jędrzejewski-Szmek 2019-06-04 12:01:52 +02:00 committed by GitHub
commit aafec74d04
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 32 additions and 13 deletions

View file

@ -975,7 +975,8 @@ static int introspect(int argc, char **argv, void *userdata) {
r = sd_bus_call_method(bus, argv[1], argv[2], "org.freedesktop.DBus.Properties", "GetAll", &error, &reply, "s", m->interface);
if (r < 0)
return log_error_errno(r, "%s", bus_error_message(&error, r));
return log_error_errno(r, "Failed to get all properties on interface %s: %s",
m->interface, bus_error_message(&error, r));
r = sd_bus_message_enter_container(reply, 'a', "{sv}");
if (r < 0)
@ -1181,7 +1182,12 @@ static int monitor(int argc, char **argv, int (*dump)(sd_bus_message *m, FILE *f
return r;
/* upgrade connection; it's not used for anything else after this call */
r = sd_bus_message_new_method_call(bus, &message, "org.freedesktop.DBus", "/org/freedesktop/DBus", "org.freedesktop.DBus.Monitoring", "BecomeMonitor");
r = sd_bus_message_new_method_call(bus,
&message,
"org.freedesktop.DBus",
"/org/freedesktop/DBus",
"org.freedesktop.DBus.Monitoring",
"BecomeMonitor");
if (r < 0)
return bus_log_create_error(r);
@ -1229,7 +1235,8 @@ static int monitor(int argc, char **argv, int (*dump)(sd_bus_message *m, FILE *f
r = sd_bus_call(bus, message, arg_timeout, &error, NULL);
if (r < 0)
return log_error_errno(r, "%s", bus_error_message(&error, r));
return log_error_errno(r, "Call to org.freedesktop.DBus.Monitoring.BecomeMonitor failed: %s",
bus_error_message(&error, r));
r = sd_bus_get_unique_name(bus, &unique_name);
if (r < 0)
@ -1987,7 +1994,7 @@ static int call(int argc, char **argv, void *userdata) {
r = sd_bus_call(bus, m, arg_timeout, &error, &reply);
if (r < 0)
return log_error_errno(r, "%s", bus_error_message(&error, r));
return log_error_errno(r, "Call failed: %s", bus_error_message(&error, r));
r = sd_bus_message_is_empty(reply);
if (r < 0)
@ -2089,7 +2096,9 @@ static int get_property(int argc, char **argv, void *userdata) {
r = sd_bus_call_method(bus, argv[1], argv[2], "org.freedesktop.DBus.Properties", "Get", &error, &reply, "ss", argv[3], *i);
if (r < 0)
return log_error_errno(r, "%s", bus_error_message(&error, r));
return log_error_errno(r, "Failed to get property %s on interface %s: %s",
*i, argv[3],
bus_error_message(&error, r));
r = sd_bus_message_peek_type(reply, &type, &contents);
if (r < 0)
@ -2173,7 +2182,9 @@ static int set_property(int argc, char **argv, void *userdata) {
r = sd_bus_call(bus, m, arg_timeout, &error, NULL);
if (r < 0)
return log_error_errno(r, "%s", bus_error_message(&error, r));
return log_error_errno(r, "Failed to set property %s on interface %s: %s",
argv[4], argv[3],
bus_error_message(&error, r));
return 0;
}

View file

@ -1437,16 +1437,22 @@ int bus_process_object(sd_bus *bus, sd_bus_message *m) {
return 0;
if (sd_bus_message_is_method_call(m, "org.freedesktop.DBus.Properties", "Get") ||
sd_bus_message_is_method_call(m, "org.freedesktop.DBus.Properties", "Set"))
sd_bus_message_is_method_call(m, "org.freedesktop.DBus.Properties", "Set")) {
const char *interface = NULL, *property = NULL;
(void) sd_bus_message_rewind(m, true);
(void) sd_bus_message_read_basic(m, 's', &interface);
(void) sd_bus_message_read_basic(m, 's', &property);
r = sd_bus_reply_method_errorf(
m,
SD_BUS_ERROR_UNKNOWN_PROPERTY,
"Unknown property or interface.");
else
"Unknown interface %s or property %s.", strnull(interface), strnull(property));
} else
r = sd_bus_reply_method_errorf(
m,
SD_BUS_ERROR_UNKNOWN_METHOD,
"Unknown method '%s' or interface '%s'.", m->member, m->interface);
"Unknown method %s or interface %s.", m->member, m->interface);
if (r < 0)
return r;

View file

@ -222,9 +222,11 @@ static int acquire_link_bitrates(sd_bus *bus, LinkInfo *link) {
"org.freedesktop.network1.Link",
"BitRates");
if (r < 0) {
if (sd_bus_error_has_name(&error, BUS_ERROR_SPEED_METER_INACTIVE))
return 0;
return log_error_errno(r, "%s", bus_error_message(&error, r));
bool quiet = sd_bus_error_has_name(&error, SD_BUS_ERROR_UNKNOWN_PROPERTY) ||
sd_bus_error_has_name(&error, BUS_ERROR_SPEED_METER_INACTIVE);
return log_full_errno(quiet ? LOG_DEBUG : LOG_WARNING,
r, "Failed to query link bit rates: %s", bus_error_message(&error, r));
}
r = sd_bus_message_enter_container(reply, 'v', "(dd)");