From: Volker Lendecke Date: Mon, 11 Jan 2021 14:58:58 +0000 (+0100) Subject: lib: Make accept_recv() return struct samba_sockaddr X-Git-Tag: tevent-0.11.0~2008 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=40e4958953c8518fa779286fd96ebf36517a5bdb;p=thirdparty%2Fsamba.git lib: Make accept_recv() return struct samba_sockaddr Avoid casting problems by using the samba_sockaddr union Signed-off-by: Volker Lendecke Reviewed-by: Jeremy Allison --- diff --git a/ctdb/common/sock_daemon.c b/ctdb/common/sock_daemon.c index 6298653f4ec..7d026515d68 100644 --- a/ctdb/common/sock_daemon.c +++ b/ctdb/common/sock_daemon.c @@ -371,7 +371,7 @@ static void sock_socket_start_new_client(struct tevent_req *subreq) struct sock_client *client; int client_fd, ret; - client_fd = accept_recv(subreq, NULL, NULL, &ret); + client_fd = accept_recv(subreq, NULL, &ret); TALLOC_FREE(subreq); if (client_fd == -1) { D_ERR("failed to accept new connection\n"); diff --git a/ctdb/tests/src/comm_server_test.c b/ctdb/tests/src/comm_server_test.c index 86b5658b949..721aa679b63 100644 --- a/ctdb/tests/src/comm_server_test.c +++ b/ctdb/tests/src/comm_server_test.c @@ -175,7 +175,7 @@ static void socket_process_client(struct tevent_req *subreq) int client_fd; int err = 0; - client_fd = accept_recv(subreq, NULL, NULL, &err); + client_fd = accept_recv(subreq, NULL, &err); TALLOC_FREE(subreq); state->num_clients++; diff --git a/ctdb/tests/src/fake_ctdbd.c b/ctdb/tests/src/fake_ctdbd.c index 146b7da344c..2b2ed066f75 100644 --- a/ctdb/tests/src/fake_ctdbd.c +++ b/ctdb/tests/src/fake_ctdbd.c @@ -4284,7 +4284,7 @@ static void server_new_client(struct tevent_req *subreq) int client_fd; int ret = 0; - client_fd = accept_recv(subreq, NULL, NULL, &ret); + client_fd = accept_recv(subreq, NULL, &ret); TALLOC_FREE(subreq); if (client_fd == -1) { tevent_req_error(req, ret); diff --git a/lib/async_req/async_sock.c b/lib/async_req/async_sock.c index 85ec148191e..1a39c98ab38 100644 --- a/lib/async_req/async_sock.c +++ b/lib/async_req/async_sock.c @@ -28,6 +28,7 @@ #include #include "lib/async_req/async_sock.h" #include "lib/util/iov_buf.h" +#include "lib/util/util_net.h" /* Note: lib/util/ is currently GPL */ #include "lib/util/tevent_unix.h" @@ -704,8 +705,7 @@ bool wait_for_read_recv(struct tevent_req *req, int *perr) struct accept_state { struct tevent_fd *fde; int listen_sock; - socklen_t addrlen; - struct sockaddr_storage addr; + struct samba_sockaddr addr; int sock; }; @@ -747,10 +747,12 @@ static void accept_handler(struct tevent_context *ev, struct tevent_fd *fde, tevent_req_error(req, EIO); return; } - state->addrlen = sizeof(state->addr); - ret = accept(state->listen_sock, (struct sockaddr *)&state->addr, - &state->addrlen); + state->addr.sa_socklen = sizeof(state->addr.u); + + ret = accept(state->listen_sock, + &state->addr.u.sa, + &state->addr.sa_socklen); if ((ret == -1) && (errno == EINTR)) { /* retry */ return; @@ -764,8 +766,9 @@ static void accept_handler(struct tevent_context *ev, struct tevent_fd *fde, tevent_req_done(req); } -int accept_recv(struct tevent_req *req, struct sockaddr_storage *paddr, - socklen_t *paddrlen, int *perr) +int accept_recv(struct tevent_req *req, + struct samba_sockaddr *paddr, + int *perr) { struct accept_state *state = tevent_req_data(req, struct accept_state); int err; @@ -777,10 +780,7 @@ int accept_recv(struct tevent_req *req, struct sockaddr_storage *paddr, return -1; } if (paddr != NULL) { - memcpy(paddr, &state->addr, state->addrlen); - } - if (paddrlen != NULL) { - *paddrlen = state->addrlen; + *paddr = state->addr; } return state->sock; } diff --git a/lib/async_req/async_sock.h b/lib/async_req/async_sock.h index 9cc052e253b..6952345df0c 100644 --- a/lib/async_req/async_sock.h +++ b/lib/async_req/async_sock.h @@ -57,9 +57,11 @@ struct tevent_req *wait_for_read_send(TALLOC_CTX *mem_ctx, bool check_errors); bool wait_for_read_recv(struct tevent_req *req, int *perr); +struct samba_sockaddr; struct tevent_req *accept_send(TALLOC_CTX *mem_ctx, struct tevent_context *ev, int listen_sock); -int accept_recv(struct tevent_req *req, struct sockaddr_storage *paddr, - socklen_t *paddrlen, int *perr); +int accept_recv(struct tevent_req *req, + struct samba_sockaddr *paddr, + int *perr); #endif