]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
libcli/smb: let smbXcli_transport_bsd() take an fd by reference
authorStefan Metzmacher <metze@samba.org>
Wed, 21 May 2025 13:25:26 +0000 (15:25 +0200)
committerStefan Metzmacher <metze@samba.org>
Wed, 18 Jun 2025 17:52:37 +0000 (17:52 +0000)
This allows it to set the callers value to -1 when it was moved.

Signed-off-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Volker Lendecke <vl@samba.org>
libcli/smb/smbXcli_base.c
libcli/smb/smbXcli_base.h
source3/libsmb/smbsock_connect.c
source3/torture/torture.c
source4/torture/smb2/multichannel.c

index 326e52c83e0224aa1f3a0751fb45bc1e0684636b..2d49bb1294b08e5e3550bb447ba72f76a28b26e2 100644 (file)
@@ -328,10 +328,11 @@ static int smbXcli_transport_destructor(struct smbXcli_transport *xtp)
 }
 
 struct smbXcli_transport *smbXcli_transport_bsd(TALLOC_CTX *mem_ctx,
-                                               int fd,
+                                               int *_fd,
                                                const struct smb_transport *tp)
 {
        struct smbXcli_transport *xtp = NULL;
+       int fd = *_fd;
        int ret;
 
        xtp = talloc_zero(mem_ctx, struct smbXcli_transport);
@@ -362,6 +363,7 @@ struct smbXcli_transport *smbXcli_transport_bsd(TALLOC_CTX *mem_ctx,
                return NULL;
        }
 
+       *_fd = -1;
        talloc_set_destructor(xtp, smbXcli_transport_destructor);
        return xtp;
 }
index fa351ee60bdacdb09bedba0ae26500378c2ffac4..ec173ae7533a6a6291634df96e520104f36441f5 100644 (file)
@@ -43,7 +43,7 @@ struct smb_transport;
 struct smb311_capabilities;
 
 struct smbXcli_transport *smbXcli_transport_bsd(TALLOC_CTX *mem_ctx,
-                                               int fd,
+                                               int *_fd,
                                                const struct smb_transport *tp);
 
 struct smbXcli_conn *smbXcli_conn_create(TALLOC_CTX *mem_ctx,
index 22723edac06aa2df8d7a8bb692496684f63e9831..681a069717b81bb4374ae095f90605d69ca8a29d 100644 (file)
@@ -647,12 +647,11 @@ static void smbsock_connect_nbt_connected(struct tevent_req *subreq)
                 */
                set_socket_options(s->sockfd, lp_socket_options());
                state->transport = smbXcli_transport_bsd(state,
-                                                        s->sockfd,
+                                                        &s->sockfd,
                                                         &s->transport);
                if (tevent_req_nomem(state->transport, req)) {
                        return;
                }
-               s->sockfd = -1;
                tevent_req_done(req);
                return;
        }
@@ -710,12 +709,11 @@ static void smbsock_connect_tcp_connected(struct tevent_req *subreq)
                 */
                set_socket_options(s->sockfd, lp_socket_options());
                state->transport = smbXcli_transport_bsd(state,
-                                                        s->sockfd,
+                                                        &s->sockfd,
                                                         &s->transport);
                if (tevent_req_nomem(state->transport, req)) {
                        return;
                }
-               s->sockfd = -1;
                tevent_req_done(req);
                return;
        }
index 90a2054e87ad6d0301ff80283f9feaf241fecb63..e735eb8247daa9d4cf9f6c344dadbfc93b7756eb 100644 (file)
@@ -15030,7 +15030,7 @@ static bool run_smb1_truncated_sesssetup(int dummy)
                return false;
        }
 
-       xtp = smbXcli_transport_bsd(talloc_tos(), fd, &tp);
+       xtp = smbXcli_transport_bsd(talloc_tos(), &fd, &tp);
        if (xtp == NULL) {
                d_fprintf(stderr, "smbXcli_transport_bsd failed\n");
                return false;
@@ -15230,7 +15230,7 @@ static bool run_smb1_negotiate_exit(int dummy)
                return false;
        }
 
-       xtp = smbXcli_transport_bsd(talloc_tos(), fd, &tp);
+       xtp = smbXcli_transport_bsd(talloc_tos(), &fd, &tp);
        if (xtp == NULL) {
                d_fprintf(stderr, "smbXcli_transport_bsd failed\n");
                return false;
@@ -15352,7 +15352,7 @@ static bool run_ign_bad_negprot(int dummy)
                return false;
        }
 
-       xtp = smbXcli_transport_bsd(talloc_tos(), fd, &tp);
+       xtp = smbXcli_transport_bsd(talloc_tos(), &fd, &tp);
        if (xtp == NULL) {
                d_fprintf(stderr, "smbXcli_transport_bsd failed\n");
                return false;
index 4c7d77642f5d6aa5cd6651cb7201b4e2abb388f0..76684e142ba8f5051b1eefa7c5766823181dedfa 100644 (file)
@@ -2568,10 +2568,9 @@ static bool test_multichannel_bug_15346(struct torture_context *tctx,
                torture_assert_ntstatus_ok_goto(tctx, status, ret, done,
                                                "socket_connect_multi failed");
 
-               xtp = smbXcli_transport_bsd(state->conns, sock->fd, &tp);
+               xtp = smbXcli_transport_bsd(state->conns, &sock->fd, &tp);
                torture_assert_goto(tctx, xtp != NULL, ret, done,
                                    "smbXcli_transport_bsd failed");
-               sock->fd = -1;
                TALLOC_FREE(sock);
 
                conn->smbXcli = smbXcli_conn_create(state->conns,