]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
lib/async_req: let async_connect_send() pass the fd to {before,after}_connect hooks
authorStefan Metzmacher <metze@samba.org>
Thu, 18 Dec 2025 11:47:15 +0000 (12:47 +0100)
committerVolker Lendecke <vl@samba.org>
Tue, 13 Jan 2026 07:10:33 +0000 (07:10 +0000)
This will be useful for IPPROTO_SMBDIRECT sockets to setup things
between the socket() and connect() syscalls.

Signed-off-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Volker Lendecke <vl@samba.org>
lib/async_req/async_sock.c
lib/async_req/async_sock.h
source3/rpc_client/local_np.c

index b25d4cc373157e8a3f8204ee3a533f13a6dfca29..3c66b39c55df0b7fde8e578b58dc7b91f44fd8e6 100644 (file)
@@ -141,8 +141,8 @@ struct async_connect_state {
        socklen_t address_len;
        struct sockaddr_storage address;
 
-       void (*before_connect)(void *private_data);
-       void (*after_connect)(void *private_data);
+       void (*before_connect)(int fd, void *private_data);
+       void (*after_connect)(int fd, void *private_data);
        void *private_data;
 };
 
@@ -168,8 +168,8 @@ static void async_connect_connected(struct tevent_context *ev,
 struct tevent_req *async_connect_send(
        TALLOC_CTX *mem_ctx, struct tevent_context *ev, int fd,
        const struct sockaddr *address, socklen_t address_len,
-       void (*before_connect)(void *private_data),
-       void (*after_connect)(void *private_data),
+       void (*before_connect)(int fd, void *private_data),
+       void (*after_connect)(int fd, void *private_data),
        void *private_data)
 {
        struct tevent_req *req;
@@ -213,13 +213,13 @@ struct tevent_req *async_connect_send(
        }
 
        if (state->before_connect != NULL) {
-               state->before_connect(state->private_data);
+               state->before_connect(fd, state->private_data);
        }
 
        state->result = connect(fd, address, address_len);
 
        if (state->after_connect != NULL) {
-               state->after_connect(state->private_data);
+               state->after_connect(fd, state->private_data);
        }
 
        if (state->result == 0) {
index 743f72607877c6886b066b0bde83510b0d03e36a..3e601166ba170d2d2cda35c0cefd9d89289fb02a 100644 (file)
@@ -45,8 +45,8 @@ int samba_socket_poll_or_sock_error(int fd);
 struct tevent_req *async_connect_send(
        TALLOC_CTX *mem_ctx, struct tevent_context *ev, int fd,
        const struct sockaddr *address, socklen_t address_len,
-       void (*before_connect)(void *private_data),
-       void (*after_connect)(void *private_data),
+       void (*before_connect)(int fd, void *private_data),
+       void (*after_connect)(int fd, void *private_data),
        void *private_data);
 int async_connect_recv(struct tevent_req *req, int *perrno);
 
index 10c6434e397c1ce101b81d01f4d7840e2ca90db2..e66e375f484f6121c1503f8f25a9f13b3afd7755 100644 (file)
@@ -55,8 +55,8 @@ struct np_sock_connect_state {
 
 static void np_sock_connect_cleanup(
        struct tevent_req *req, enum tevent_req_state req_state);
-static void np_sock_connect_before(void *private_data);
-static void np_sock_connect_after(void *private_data);
+static void np_sock_connect_before(int fd, void *private_data);
+static void np_sock_connect_after(int fd, void *private_data);
 static void np_sock_connect_connected(struct tevent_req *subreq);
 static void np_sock_connect_written(struct tevent_req *subreq);
 static void np_sock_connect_read_done(struct tevent_req *subreq);
@@ -147,12 +147,12 @@ static void np_sock_connect_cleanup(
        }
 }
 
-static void np_sock_connect_before(void *private_data)
+static void np_sock_connect_before(int fd, void *private_data)
 {
        become_root();
 }
 
-static void np_sock_connect_after(void *private_data)
+static void np_sock_connect_after(int fd, void *private_data)
 {
        unbecome_root();
 }