X-Git-Url: http://git.meshlink.io/?a=blobdiff_plain;f=avahi-daemon%2Fdbus-protocol.c;h=022187be5b07646d132938672aab3e5b6048cd48;hb=298a8cdb7b369d80a1d8bad2bd315d2a38c5a38f;hp=772756b8a3ede585bc1e06cb57a561e1b2fa472c;hpb=ee4cc41fafaac0a2d76c1c791f6d43a6b6d937a7;p=catta diff --git a/avahi-daemon/dbus-protocol.c b/avahi-daemon/dbus-protocol.c index 772756b..022187b 100644 --- a/avahi-daemon/dbus-protocol.c +++ b/avahi-daemon/dbus-protocol.c @@ -36,10 +36,13 @@ #include +#include #include #include #include #include +#include +#include #include #include @@ -328,40 +331,10 @@ static Client *client_get(const char *name, int create) { static DBusHandlerResult respond_error(DBusConnection *c, DBusMessage *m, int error, const char *text) { DBusMessage *reply; - const char * const table[- AVAHI_ERR_MAX] = { - NULL, /* OK */ - AVAHI_DBUS_ERR_FAILURE, - AVAHI_DBUS_ERR_BAD_STATE, - AVAHI_DBUS_ERR_INVALID_HOST_NAME, - AVAHI_DBUS_ERR_INVALID_DOMAIN_NAME, - AVAHI_DBUS_ERR_NO_NETWORK, - AVAHI_DBUS_ERR_INVALID_TTL, - AVAHI_DBUS_ERR_IS_PATTERN, - AVAHI_DBUS_ERR_LOCAL_COLLISION, - AVAHI_DBUS_ERR_INVALID_RECORD, - AVAHI_DBUS_ERR_INVALID_SERVICE_NAME, - AVAHI_DBUS_ERR_INVALID_SERVICE_TYPE, - AVAHI_DBUS_ERR_INVALID_PORT, - AVAHI_DBUS_ERR_INVALID_KEY, - AVAHI_DBUS_ERR_INVALID_ADDRESS, - AVAHI_DBUS_ERR_TIMEOUT, - AVAHI_DBUS_ERR_TOO_MANY_CLIENTS, - AVAHI_DBUS_ERR_TOO_MANY_OBJECTS, - AVAHI_DBUS_ERR_TOO_MANY_ENTRIES, - AVAHI_DBUS_ERR_OS, - AVAHI_DBUS_ERR_ACCESS_DENIED, - AVAHI_DBUS_ERR_INVALID_OPERATION, - AVAHI_DBUS_ERR_DBUS_ERROR, - AVAHI_DBUS_ERR_NOT_CONNECTED, - AVAHI_DBUS_ERR_NO_MEMORY, - AVAHI_DBUS_ERR_INVALID_OBJECT, - AVAHI_DBUS_ERR_NO_DAEMON - }; - assert(-error > -AVAHI_OK); assert(-error < -AVAHI_ERR_MAX); - reply = dbus_message_new_error(m, table[-error], text ? text : avahi_strerror(error)); + reply = dbus_message_new_error(m, avahi_error_number_to_dbus (error), text ? text : avahi_strerror(error)); dbus_connection_send(c, reply, NULL); dbus_message_unref(reply); @@ -1665,7 +1638,6 @@ int dbus_protocol_setup(const AvahiPoll *poll_api) { NULL }; - dbus_error_init(&error); server = avahi_new(Server, 1); @@ -1673,23 +1645,43 @@ int dbus_protocol_setup(const AvahiPoll *poll_api) { server->current_id = 0; server->n_clients = 0; - server->bus = dbus_bus_get(DBUS_BUS_SYSTEM, &error); - if (dbus_error_is_set(&error)) { - avahi_log_warn("dbus_bus_get(): %s", error.message); + if (!(server->bus = dbus_bus_get(DBUS_BUS_SYSTEM, &error))) { + assert(dbus_error_is_set(&error)); + avahi_log_error("dbus_bus_get(): %s", error.message); goto fail; } - avahi_dbus_connection_glue(server->bus, poll_api); + if (avahi_dbus_connection_glue(server->bus, poll_api) < 0) { + avahi_log_error("avahi_dbus_connection_glue() failed"); + goto fail; + } - dbus_bus_request_name(server->bus, AVAHI_DBUS_NAME, 0, &error); - if (dbus_error_is_set(&error)) { - avahi_log_warn("dbus_bus_request_name(): %s", error.message); + if (dbus_bus_request_name(server->bus, AVAHI_DBUS_NAME, DBUS_NAME_FLAG_PROHIBIT_REPLACEMENT, &error) != DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER) { + if (dbus_error_is_set(&error)) { + avahi_log_error("dbus_bus_request_name(): %s", error.message); + goto fail; + } + + avahi_log_error("Failed to acquire DBUS name '"AVAHI_DBUS_NAME"'"); goto fail; } - dbus_connection_add_filter(server->bus, msg_signal_filter_impl, (void*) poll_api, NULL); + if (!(dbus_connection_add_filter(server->bus, msg_signal_filter_impl, (void*) poll_api, NULL))) { + avahi_log_error("dbus_connection_add_filter() failed"); + goto fail; + } + dbus_bus_add_match(server->bus, "type='signal',""interface='" DBUS_INTERFACE_DBUS "'", &error); - dbus_connection_register_object_path(server->bus, AVAHI_DBUS_PATH_SERVER, &server_vtable, NULL); + + if (dbus_error_is_set(&error)) { + avahi_log_error("dbus_bus_add_match(): %s", error.message); + goto fail; + } + + if (!(dbus_connection_register_object_path(server->bus, AVAHI_DBUS_PATH_SERVER, &server_vtable, NULL))) { + avahi_log_error("dbus_connection_register_object_path() failed"); + goto fail; + } return 0; @@ -1698,8 +1690,10 @@ fail: dbus_connection_disconnect(server->bus); dbus_connection_unref(server->bus); } - - dbus_error_free (&error); + + if (dbus_error_is_set(&error)) + dbus_error_free(&error); + avahi_free(server); server = NULL; return -1;