From 7049ba4cbfe495aac8b20a87e969a8247dd36964 Mon Sep 17 00:00:00 2001 From: Simon McVittie Date: Thu, 12 Mar 2015 18:35:48 +0000 Subject: [PATCH 09/11] Convert miscellaneous socket APIs to DBusSocket --- dbus/dbus-nonce.c | 14 +++++++------ dbus/dbus-nonce.h | 2 +- dbus/dbus-server-debug-pipe.c | 4 ++-- dbus/dbus-server-socket.c | 9 ++++---- dbus/dbus-server-unix.c | 3 ++- dbus/dbus-sysdeps-unix.c | 49 +++++++++++++++++++++++-------------------- dbus/dbus-sysdeps-unix.h | 6 +++--- dbus/dbus-sysdeps-win.c | 4 ++-- dbus/dbus-sysdeps.h | 18 ++++++++-------- 9 files changed, 58 insertions(+), 51 deletions(-) diff --git a/dbus/dbus-nonce.c b/dbus/dbus-nonce.c index 280abb2..893f9dc 100644 --- a/dbus/dbus-nonce.c +++ b/dbus/dbus-nonce.c @@ -31,7 +31,7 @@ #include static dbus_bool_t -do_check_nonce (int fd, const DBusString *nonce, DBusError *error) +do_check_nonce (DBusSocket fd, const DBusString *nonce, DBusError *error) { DBusString buffer; DBusString p; @@ -150,17 +150,17 @@ _dbus_accept_with_noncefile (DBusSocket listen_fd, const DBusNonceFile *noncefil _dbus_assert (noncefile != NULL); if (!_dbus_string_init (&nonce)) - return -1; + return _dbus_socket_get_invalid (); //PENDING(kdab): set better errors if (_dbus_read_nonce (_dbus_noncefile_get_path(noncefile), &nonce, NULL) != TRUE) - return -1; + return _dbus_socket_get_invalid (); fd = _dbus_accept (listen_fd); - if (_dbus_socket_is_invalid (fd)) + if (!DBUS_SOCKET_IS_VALID (fd)) return fd; if (do_check_nonce(fd, &nonce, NULL) != TRUE) { _dbus_verbose ("nonce check failed. Closing socket.\n"); _dbus_close_socket(fd, NULL); - return -1; + return _dbus_socket_get_invalid (); } return fd; @@ -204,7 +204,9 @@ generate_and_write_nonce (const DBusString *filename, DBusError *error) * indicate whether the server accepted the nonce. */ dbus_bool_t -_dbus_send_nonce (int fd, const DBusString *noncefile, DBusError *error) +_dbus_send_nonce (DBusSocket fd, + const DBusString *noncefile, + DBusError *error) { dbus_bool_t read_result; int send_result; diff --git a/dbus/dbus-nonce.h b/dbus/dbus-nonce.h index 26308fd..99366fd 100644 --- a/dbus/dbus-nonce.h +++ b/dbus/dbus-nonce.h @@ -64,7 +64,7 @@ dbus_bool_t _dbus_read_nonce (const DBusString *fname, // client -dbus_bool_t _dbus_send_nonce (int fd, +dbus_bool_t _dbus_send_nonce (DBusSocket fd, const DBusString *noncefile, DBusError *error); diff --git a/dbus/dbus-server-debug-pipe.c b/dbus/dbus-server-debug-pipe.c index 0c86d14..b0f8f33 100644 --- a/dbus/dbus-server-debug-pipe.c +++ b/dbus/dbus-server-debug-pipe.c @@ -267,7 +267,7 @@ _dbus_transport_debug_pipe_new (const char *server_name, _dbus_string_free (&address); - client_fd = -1; + DBUS_SOCKET_INVALIDATE (client_fd); server_transport = _dbus_transport_new_for_socket (server_fd, &server->guid_hex, NULL); @@ -279,7 +279,7 @@ _dbus_transport_debug_pipe_new (const char *server_name, return NULL; } - server_fd = -1; + DBUS_SOCKET_INVALIDATE (server_fd); if (!_dbus_transport_set_auth_mechanisms (server_transport, (const char**) server->auth_mechanisms)) diff --git a/dbus/dbus-server-socket.c b/dbus/dbus-server-socket.c index 73ddfe3..0363296 100644 --- a/dbus/dbus-server-socket.c +++ b/dbus/dbus-server-socket.c @@ -84,14 +84,15 @@ socket_finalize (DBusServer *server) /* Return value is just for memory, not other failures. */ static dbus_bool_t handle_new_client_fd_and_unlock (DBusServer *server, - int client_fd) + DBusSocket client_fd) { DBusConnection *connection; DBusTransport *transport; DBusNewConnectionFunction new_connection_function; void *new_connection_data; - _dbus_verbose ("Creating new client connection with fd %d\n", client_fd); + _dbus_verbose ("Creating new client connection with fd %" DBUS_SOCKET_FORMAT "\n", + DBUS_SOCKET_PRINTABLE (client_fd)); HAVE_LOCK_CHECK (server); @@ -195,7 +196,7 @@ socket_handle_watch (DBusWatch *watch, saved_errno = _dbus_save_socket_errno (); - if (client_fd == DBUS_SOCKET_INVALID) + if (!DBUS_SOCKET_IS_VALID (client_fd)) { /* EINTR handled for us */ @@ -243,7 +244,7 @@ socket_disconnect (DBusServer *server) } _dbus_close_socket (socket_server->fds[i], NULL); - socket_server->fds[i] = DBUS_SOCKET_INVALID; + DBUS_SOCKET_INVALIDATE (socket_server->fds[i]); } if (socket_server->socket_name != NULL) diff --git a/dbus/dbus-server-unix.c b/dbus/dbus-server-unix.c index e94bc2e..7616033 100644 --- a/dbus/dbus-server-unix.c +++ b/dbus/dbus-server-unix.c @@ -199,7 +199,8 @@ _dbus_server_listen_platform_specific (DBusAddressEntry *entry, } else if (strcmp (method, "systemd") == 0) { - int i, n, *fds; + int i, n; + DBusSocket *fds; DBusString address; n = _dbus_listen_systemd_sockets (&fds, error); diff --git a/dbus/dbus-sysdeps-unix.c b/dbus/dbus-sysdeps-unix.c index c0679d9..38a803b 100644 --- a/dbus/dbus-sysdeps-unix.c +++ b/dbus/dbus-sysdeps-unix.c @@ -205,7 +205,7 @@ _dbus_open_unix_socket (int *fd, * @returns #FALSE if error is set */ dbus_bool_t -_dbus_close_socket (int fd, +_dbus_close_socket (DBusSocket fd, DBusError *error) { return _dbus_close (fd, error); @@ -221,7 +221,7 @@ _dbus_close_socket (int fd, * @returns number of bytes appended to the string */ int -_dbus_read_socket (int fd, +_dbus_read_socket (DBusSocket fd, DBusString *buffer, int count) { @@ -239,7 +239,7 @@ _dbus_read_socket (int fd, * @returns the number of bytes written or -1 on error */ int -_dbus_write_socket (int fd, +_dbus_write_socket (DBusSocket fd, const DBusString *buffer, int start, int len) @@ -437,7 +437,7 @@ _dbus_read_socket_with_unix_fds (DBusSocket fd, } int -_dbus_write_socket_with_unix_fds(int fd, +_dbus_write_socket_with_unix_fds(DBusSocket fd, const DBusString *buffer, int start, int len, @@ -458,7 +458,7 @@ _dbus_write_socket_with_unix_fds(int fd, } int -_dbus_write_socket_with_unix_fds_two(int fd, +_dbus_write_socket_with_unix_fds_two(DBusSocket fd, const DBusString *buffer1, int start1, int len1, @@ -550,7 +550,7 @@ _dbus_write_socket_with_unix_fds_two(int fd, * @returns total bytes written from both buffers, or -1 on error */ int -_dbus_write_socket_two (int fd, +_dbus_write_socket_two (DBusSocket fd, const DBusString *buffer1, int start1, int len1, @@ -1163,13 +1163,13 @@ _dbus_listen_unix_socket (const char *path, * @returns the number of file descriptors */ int -_dbus_listen_systemd_sockets (int **fds, - DBusError *error) +_dbus_listen_systemd_sockets (DBusSocket **fds, + DBusError *error) { #ifdef HAVE_SYSTEMD int r, n; int fd; - int *new_fds; + DBusSocket *new_fds; _DBUS_ASSERT_ERROR_IS_CLEAR (error); @@ -1211,7 +1211,7 @@ _dbus_listen_systemd_sockets (int **fds, /* OK, the file descriptors are all good, so let's take posession of them then. */ - new_fds = dbus_new (int, n); + new_fds = dbus_new (DBusSocket, n); if (!new_fds) { dbus_set_error (error, DBUS_ERROR_NO_MEMORY, @@ -1262,7 +1262,7 @@ _dbus_listen_systemd_sockets (int **fds, * @param error return location for error code * @returns connection file descriptor or -1 on error */ -int +DBusSocket _dbus_connect_tcp_socket (const char *host, const char *port, const char *family, @@ -1271,7 +1271,7 @@ _dbus_connect_tcp_socket (const char *host, return _dbus_connect_tcp_socket_with_nonce (host, port, family, (const char*)NULL, error); } -int +DBusSocket _dbus_connect_tcp_socket_with_nonce (const char *host, const char *port, const char *family, @@ -1391,11 +1391,12 @@ _dbus_listen_tcp_socket (const char *host, const char *port, const char *family, DBusString *retport, - int **fds_p, + DBusSocket **fds_p, DBusError *error) { int saved_errno; - int nlisten_fd = 0, *listen_fd = NULL, res, i; + int nlisten_fd = 0, res, i; + DBusSocket *listen_fd = NULL; struct addrinfo hints; struct addrinfo *ai, *tmp; unsigned int reuseaddr; @@ -1437,7 +1438,9 @@ _dbus_listen_tcp_socket (const char *host, tmp = ai; while (tmp) { - int fd = -1, *newlisten_fd, tcp_nodelay_on; + int fd = -1, tcp_nodelay_on; + DBusSocket *newlisten_fd; + if (!_dbus_open_socket (&fd, tmp->ai_family, SOCK_STREAM, 0, error)) { _DBUS_ASSERT_ERROR_IS_SET(error); @@ -1498,7 +1501,7 @@ _dbus_listen_tcp_socket (const char *host, goto failed; } - newlisten_fd = dbus_realloc(listen_fd, sizeof(int)*(nlisten_fd+1)); + newlisten_fd = dbus_realloc(listen_fd, sizeof(DBusSocket)*(nlisten_fd+1)); if (!newlisten_fd) { saved_errno = errno; @@ -2123,7 +2126,7 @@ _dbus_read_credentials_socket (DBusSocket client_fd, * @returns #TRUE if the byte was sent */ dbus_bool_t -_dbus_send_credentials_socket (int server_fd, +_dbus_send_credentials_socket (DBusSocket server_fd, DBusError *error) { _DBUS_ASSERT_ERROR_IS_CLEAR (error); @@ -2143,10 +2146,10 @@ _dbus_send_credentials_socket (int server_fd, * @param listen_fd the listen file descriptor * @returns the connection fd of the client, or -1 on error */ -int -_dbus_accept (int listen_fd) +DBusSocket +_dbus_accept (DBusSocket listen_fd) { - int client_fd; + DBusSocket client_fd; struct sockaddr addr; socklen_t addrlen; #ifdef HAVE_ACCEPT4 @@ -4233,8 +4236,8 @@ _dbus_delete_directory (const DBusString *filename, * */ dbus_bool_t -_dbus_socket_can_pass_unix_fd(int fd) { - +_dbus_socket_can_pass_unix_fd (DBusSocket fd) +{ #ifdef SCM_RIGHTS union { struct sockaddr sa; @@ -4385,7 +4388,7 @@ _dbus_check_setuid (void) * @param error return location for error code */ dbus_bool_t -_dbus_append_address_from_socket (int fd, +_dbus_append_address_from_socket (DBusSocket fd, DBusString *address, DBusError *error) { diff --git a/dbus/dbus-sysdeps-unix.h b/dbus/dbus-sysdeps-unix.h index 333f5ee..0932129 100644 --- a/dbus/dbus-sysdeps-unix.h +++ b/dbus/dbus-sysdeps-unix.h @@ -77,8 +77,8 @@ int _dbus_connect_exec (const char *path, char *const argv[], DBusError *error); -int _dbus_listen_systemd_sockets (int **fd, - DBusError *error); +int _dbus_listen_systemd_sockets (DBusSocket **fd, + DBusError *error); dbus_bool_t _dbus_read_credentials (int client_fd, DBusCredentials *credentials, @@ -148,7 +148,7 @@ dbus_bool_t _dbus_parse_uid (const DBusString *uid_str, DBUS_PRIVATE_EXPORT void _dbus_close_all (void); -dbus_bool_t _dbus_append_address_from_socket (int fd, +dbus_bool_t _dbus_append_address_from_socket (DBusSocket fd, DBusString *address, DBusError *error); diff --git a/dbus/dbus-sysdeps-win.c b/dbus/dbus-sysdeps-win.c index e45f780..560aca9 100644 --- a/dbus/dbus-sysdeps-win.c +++ b/dbus/dbus-sysdeps-win.c @@ -1490,7 +1490,7 @@ _dbus_exit (int code) * @param error return location for error code * @returns connection file descriptor or -1 on error */ -int +DBusSocket _dbus_connect_tcp_socket (const char *host, const char *port, const char *family, @@ -1499,7 +1499,7 @@ _dbus_connect_tcp_socket (const char *host, return _dbus_connect_tcp_socket_with_nonce (host, port, family, (const char*)NULL, error); } -int +DBusSocket _dbus_connect_tcp_socket_with_nonce (const char *host, const char *port, const char *family, diff --git a/dbus/dbus-sysdeps.h b/dbus/dbus-sysdeps.h index 4a13716..44f0e49 100644 --- a/dbus/dbus-sysdeps.h +++ b/dbus/dbus-sysdeps.h @@ -211,15 +211,15 @@ int _dbus_write_socket_with_unix_fds_two (DBusSocket fd, dbus_bool_t _dbus_socket_is_invalid (DBusSocket fd); -int _dbus_connect_tcp_socket (const char *host, - const char *port, - const char *family, - DBusError *error); -int _dbus_connect_tcp_socket_with_nonce (const char *host, - const char *port, - const char *family, - const char *noncefile, - DBusError *error); +DBusSocket _dbus_connect_tcp_socket (const char *host, + const char *port, + const char *family, + DBusError *error); +DBusSocket _dbus_connect_tcp_socket_with_nonce (const char *host, + const char *port, + const char *family, + const char *noncefile, + DBusError *error); int _dbus_listen_tcp_socket (const char *host, const char *port, const char *family, -- 2.1.4