diff options
author | Simon McVittie <smcv@collabora.com> | 2018-03-08 14:37:39 +0000 |
---|---|---|
committer | Ralf Habacker <ralf.habacker@freenet.de> | 2018-03-10 12:14:52 +0100 |
commit | 6c5be2e14687914724ef9f6faef1cc4c41f2dee0 (patch) | |
tree | acdf9bc1b5799927b8d1f55a50d799d60eccf4bf /dbus/dbus-sysdeps-unix.c | |
parent | 23fb28014351fb40952593ca4c518704953c28e4 (diff) | |
download | dbus-6c5be2e14687914724ef9f6faef1cc4c41f2dee0.tar.gz |
Unix _dbus_connect_tcp_socket_with_nonce: Combine all connect() errors
Previously, we took the errno from the most recent connect() error,
and used a more generic diagnostic message.
Reviewed-by: Ralf Habacker <ralf.habacker@freenet.de>
Signed-off-by: Simon McVittie <smcv@collabora.com>
https://bugs.freedesktop.org/show_bug.cgi?id=61922
Diffstat (limited to 'dbus/dbus-sysdeps-unix.c')
-rw-r--r-- | dbus/dbus-sysdeps-unix.c | 37 |
1 files changed, 33 insertions, 4 deletions
diff --git a/dbus/dbus-sysdeps-unix.c b/dbus/dbus-sysdeps-unix.c index 55c91026..73c59acb 100644 --- a/dbus/dbus-sysdeps-unix.c +++ b/dbus/dbus-sysdeps-unix.c @@ -1355,10 +1355,12 @@ _dbus_connect_tcp_socket_with_nonce (const char *host, DBusError *error) { int saved_errno = 0; + DBusList *connect_errors = NULL; DBusSocket fd = DBUS_SOCKET_INIT; int res; struct addrinfo hints; struct addrinfo *ai, *tmp; + DBusError *connect_error; _DBUS_ASSERT_ERROR_IS_CLEAR(error); @@ -1408,6 +1410,29 @@ _dbus_connect_tcp_socket_with_nonce (const char *host, saved_errno = errno; _dbus_close (fd.fd, NULL); _dbus_socket_invalidate (&fd); + + connect_error = dbus_new0 (DBusError, 1); + + if (connect_error == NULL) + { + _DBUS_SET_OOM (error); + goto out; + } + + dbus_error_init (connect_error); + _dbus_set_error_with_inet_sockaddr (connect_error, + tmp->ai_addr, tmp->ai_addrlen, + "Failed to connect to socket", + saved_errno); + + if (!_dbus_list_append (&connect_errors, connect_error)) + { + dbus_error_free (connect_error); + dbus_free (connect_error); + _DBUS_SET_OOM (error); + goto out; + } + tmp = tmp->ai_next; continue; } @@ -1418,10 +1443,8 @@ _dbus_connect_tcp_socket_with_nonce (const char *host, if (!_dbus_socket_is_valid (fd)) { - dbus_set_error (error, - _dbus_error_from_errno (saved_errno), - "Failed to connect to socket \"%s:%s\" %s", - host, port, _dbus_strerror(saved_errno)); + _dbus_combine_tcp_errors (&connect_errors, "Failed to connect", + host, port, error); goto out; } @@ -1449,6 +1472,12 @@ _dbus_connect_tcp_socket_with_nonce (const char *host, } out: + while ((connect_error = _dbus_list_pop_first (&connect_errors))) + { + dbus_error_free (connect_error); + dbus_free (connect_error); + } + return fd; } |