]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
lib: Make accept_recv() return struct samba_sockaddr
authorVolker Lendecke <vl@samba.org>
Mon, 11 Jan 2021 14:58:58 +0000 (15:58 +0100)
committerJeremy Allison <jra@samba.org>
Fri, 22 Jan 2021 19:54:38 +0000 (19:54 +0000)
Avoid casting problems by using the samba_sockaddr union

Signed-off-by: Volker Lendecke <vl@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
ctdb/common/sock_daemon.c
ctdb/tests/src/comm_server_test.c
ctdb/tests/src/fake_ctdbd.c
lib/async_req/async_sock.c
lib/async_req/async_sock.h

index 6298653f4ec9dcb07855d217d5a3c0d1fb2dd44d..7d026515d687ca5a2ecc796b8b572f1e9084314a 100644 (file)
@@ -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");
index 86b5658b949f79b672021f2e72d580d96defd4a1..721aa679b635405b1f00a608a2284d2226cb0d9f 100644 (file)
@@ -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++;
index 146b7da344c62fd41da11e21ba67d23a0fcc81cf..2b2ed066f75d44fe0f9e9125cea43079f404223f 100644 (file)
@@ -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);
index 85ec148191eff39396bbc577ec96b544d648a6cb..1a39c98ab384a900e1dcfa7f569cc90df7a2bd5c 100644 (file)
@@ -28,6 +28,7 @@
 #include <tevent.h>
 #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;
 }
index 9cc052e253b3d3222c256938a6035651d9aa556c..6952345df0c8f44aafadee8c4f2c92768d4e7337 100644 (file)
@@ -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