]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
s4:libcli: simplify struct smbcli_socket
authorStefan Metzmacher <metze@samba.org>
Tue, 8 Apr 2025 14:21:04 +0000 (16:21 +0200)
committerStefan Metzmacher <metze@samba.org>
Fri, 18 Apr 2025 10:17:30 +0000 (10:17 +0000)
Signed-off-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Volker Lendecke <vl@samba.org>
source4/libcli/raw/clisocket.c
source4/libcli/raw/clitransport.c
source4/libcli/raw/libcliraw.h
source4/libcli/smb2/transport.c
source4/libcli/smb_composite/connect_nego.c

index f2a1aaaec0ca86a8a9ecf490419d90d1deedca82..dc04a829bab8510c34ca070d8bb340ea9beac7eb 100644 (file)
@@ -406,6 +406,16 @@ failed:
        return NULL;
 }
 
+static int smbcli_socket_destructor(struct smbcli_socket *sock)
+{
+       if (sock->sockfd != -1) {
+               close(sock->sockfd);
+               sock->sockfd = -1;
+       }
+
+       return 0;
+}
+
 static void smbcli_sock_connect_recv_conn(struct composite_context *ctx)
 {
        struct sock_connect_state *state =
@@ -426,10 +436,13 @@ static void smbcli_sock_connect_recv_conn(struct composite_context *ctx)
        state->result = talloc_zero(state, struct smbcli_socket);
        if (composite_nomem(state->result, state->ctx)) return;
 
-       state->result->sock = talloc_steal(state->result, sock);
-       state->result->port = port;
+       state->result->sockfd = sock->fd;
+       sock->fd = -1;
+       TALLOC_FREE(sock);
        state->result->hostname = talloc_steal(state->result, state->host_name);
 
+       talloc_set_destructor(state->result, smbcli_socket_destructor);
+
        state->result->event.ctx = state->ctx->event_ctx;
        if (composite_nomem(state->result->event.ctx, state->ctx)) return;
 
index 04761d62cf2cdeb2cd542f95f0a08f4dcf0acecd..99c7897650784d5a437960b76b8481f8e5185bd8 100644 (file)
@@ -66,9 +66,6 @@ struct smbcli_transport *smbcli_transport_init(struct smbcli_socket *sock,
                transport->options.max_protocol = PROTOCOL_NT1;
        }
 
-       TALLOC_FREE(sock->event.fde);
-       TALLOC_FREE(sock->event.te);
-
        smb1_capabilities = 0;
        smb1_capabilities |= CAP_LARGE_FILES;
        smb1_capabilities |= CAP_NT_SMBS | CAP_RPC_REMOTE_APIS;
@@ -94,7 +91,7 @@ struct smbcli_transport *smbcli_transport_init(struct smbcli_socket *sock,
        }
 
        transport->conn = smbXcli_conn_create(transport,
-                                             sock->sock->fd,
+                                             sock->sockfd,
                                              sock->hostname,
                                              options->signing,
                                              smb1_capabilities,
@@ -106,7 +103,7 @@ struct smbcli_transport *smbcli_transport_init(struct smbcli_socket *sock,
                TALLOC_FREE(transport);
                return NULL;
        }
-       sock->sock->fd = -1;
+       sock->sockfd = -1;
        TALLOC_FREE(sock);
 
        talloc_set_destructor(transport, transport_destructor);
index ff4f1796f6d590c6a8d02e1f6e6f4ef00e1ffcc8..a8c2891b08c206c150c93534102e48678b7fd022 100644 (file)
@@ -70,10 +70,7 @@ struct smbcli_negotiate {
        
 /* this is the context for a SMB socket associated with the socket itself */
 struct smbcli_socket {
-       struct socket_context *sock;
-
-       /* what port we ended up connected to */
-       int port;
+       int sockfd;
 
        /* the hostname we connected to */
        const char *hostname;
@@ -81,8 +78,6 @@ struct smbcli_socket {
        /* the event handle for waiting for socket IO */
        struct {
                struct tevent_context *ctx;
-               struct tevent_fd *fde;
-               struct tevent_timer *te;
        } event;
 };
 
index 292ca0f4afd0af3c37daa21dda0996886686979f..15d173c6c4d53ec638c651bef024b8f020c4ac2f 100644 (file)
@@ -63,11 +63,8 @@ struct smb2_transport *smb2_transport_init(struct smbcli_socket *sock,
                transport->options.max_protocol = PROTOCOL_LATEST;
        }
 
-       TALLOC_FREE(sock->event.fde);
-       TALLOC_FREE(sock->event.te);
-
        transport->conn = smbXcli_conn_create(transport,
-                                             sock->sock->fd,
+                                             sock->sockfd,
                                              sock->hostname,
                                              options->signing,
                                              0, /* smb1_capabilities */
@@ -78,7 +75,7 @@ struct smb2_transport *smb2_transport_init(struct smbcli_socket *sock,
                talloc_free(transport);
                return NULL;
        }
-       sock->sock->fd = -1;
+       sock->sockfd = -1;
        TALLOC_FREE(sock);
 
        talloc_set_destructor(transport, transport_destructor);
index 47109ae7314a05f4ba5776950a54ef2cdbf61399..f146f37c53478b460eafff9c469074c820c67dc3 100644 (file)
@@ -117,9 +117,6 @@ static void smb_connect_nego_connect_done(struct composite_context *creq)
                return;
        }
 
-       TALLOC_FREE(sock->event.fde);
-       TALLOC_FREE(sock->event.te);
-
        smb1_capabilities = 0;
        smb1_capabilities |= CAP_LARGE_FILES;
        smb1_capabilities |= CAP_NT_SMBS | CAP_RPC_REMOTE_APIS;
@@ -145,7 +142,7 @@ static void smb_connect_nego_connect_done(struct composite_context *creq)
        }
 
        state->conn = smbXcli_conn_create(state,
-                                         sock->sock->fd,
+                                         sock->sockfd,
                                          state->target_hostname,
                                          state->options.signing,
                                          smb1_capabilities,
@@ -155,7 +152,7 @@ static void smb_connect_nego_connect_done(struct composite_context *creq)
        if (tevent_req_nomem(state->conn, req)) {
                return;
        }
-       sock->sock->fd = -1;
+       sock->sockfd = -1;
        TALLOC_FREE(sock);
 
        subreq = smbXcli_negprot_send(state,