]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
libcli/smb: pass smb3_capabilities to smbXcli_conn_create()
authorStefan Metzmacher <metze@samba.org>
Tue, 9 Mar 2021 22:49:19 +0000 (23:49 +0100)
committerJeremy Allison <jra@samba.org>
Wed, 17 Mar 2021 00:49:32 +0000 (00:49 +0000)
Passing NULL means use none.

BUG: https://bugzilla.samba.org/show_bug.cgi?id=14512

Signed-off-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
libcli/smb/smbXcli_base.c
libcli/smb/smbXcli_base.h
source3/libsmb/clientgen.c
source3/torture/torture.c
source4/libcli/raw/clitransport.c
source4/libcli/smb2/transport.c
source4/libcli/smb_composite/connect_nego.c

index 01a8e921156ba28763add6ce5959f1c6e9aa940b..8fa54d02ca9ccb317ef5574bb0f3ceefcd7e4f7f 100644 (file)
@@ -115,6 +115,7 @@ struct smbXcli_conn {
                        uint32_t capabilities;
                        uint16_t security_mode;
                        struct GUID guid;
+                       struct smb311_capabilities smb3_capabilities;
                } client;
 
                struct {
@@ -326,7 +327,8 @@ struct smbXcli_conn *smbXcli_conn_create(TALLOC_CTX *mem_ctx,
                                         enum smb_signing_setting signing_state,
                                         uint32_t smb1_capabilities,
                                         struct GUID *client_guid,
-                                        uint32_t smb2_capabilities)
+                                        uint32_t smb2_capabilities,
+                                        const struct smb311_capabilities *smb3_capabilities)
 {
        struct smbXcli_conn *conn = NULL;
        void *ss = NULL;
@@ -429,6 +431,9 @@ struct smbXcli_conn *smbXcli_conn_create(TALLOC_CTX *mem_ctx,
                conn->smb2.client.guid = *client_guid;
        }
        conn->smb2.client.capabilities = smb2_capabilities;
+       if (smb3_capabilities != NULL) {
+               conn->smb2.client.smb3_capabilities = *smb3_capabilities;
+       }
 
        conn->smb2.cur_credits = 1;
        conn->smb2.max_credits = 0;
index d9c3175bdf5ad8ab130a3cfe6e78c71c8c204ec2..9a8c7272f913797c377690c3c2a9c5d4b62c5793 100644 (file)
@@ -31,6 +31,7 @@ struct GUID;
 struct iovec;
 struct smb2_create_blobs;
 struct smb_create_returns;
+struct smb311_capabilities;
 
 struct smbXcli_conn *smbXcli_conn_create(TALLOC_CTX *mem_ctx,
                                         int fd,
@@ -38,7 +39,8 @@ struct smbXcli_conn *smbXcli_conn_create(TALLOC_CTX *mem_ctx,
                                         enum smb_signing_setting signing_state,
                                         uint32_t smb1_capabilities,
                                         struct GUID *client_guid,
-                                        uint32_t smb2_capabilities);
+                                        uint32_t smb2_capabilities,
+                                        const struct smb311_capabilities *smb3_capabilities);
 
 bool smbXcli_conn_is_connected(struct smbXcli_conn *conn);
 void smbXcli_conn_disconnect(struct smbXcli_conn *conn, NTSTATUS status);
index e86f52dac0d21e3269ca46a569a671605c8f17b7..2ab661b2c79c17df901f5e7b50c64e8c4a8cca5b 100644 (file)
@@ -25,6 +25,7 @@
 #include "../libcli/smb/smb_seal.h"
 #include "async_smb.h"
 #include "../libcli/smb/smbXcli_base.h"
+#include "../libcli/smb/smb2_negotiate_context.h"
 #include "../librpc/ndr/libndr.h"
 #include "../include/client.h"
 
@@ -69,6 +70,7 @@ struct cli_state *cli_state_create(TALLOC_CTX *mem_ctx,
        bool use_level_II_oplocks = false;
        uint32_t smb1_capabilities = 0;
        uint32_t smb2_capabilities = 0;
+       struct smb311_capabilities smb3_capabilities = { };
        struct GUID client_guid;
 
        if (!GUID_all_zero(&cli_state_client_guid)) {
@@ -179,7 +181,8 @@ struct cli_state *cli_state_create(TALLOC_CTX *mem_ctx,
                                        signing_state,
                                        smb1_capabilities,
                                        &client_guid,
-                                       smb2_capabilities);
+                                       smb2_capabilities,
+                                       &smb3_capabilities);
        if (cli->conn == NULL) {
                goto error;
        }
index d1ea9b85a726fba6737fed638266be6928cf8715..add58414f3369d18b46b3c7800cc007fd9d40f7a 100644 (file)
@@ -14572,7 +14572,7 @@ static bool run_ign_bad_negprot(int dummy)
        }
 
        conn = smbXcli_conn_create(talloc_tos(), fd, host, SMB_SIGNING_OFF, 0,
-                                  NULL, 0);
+                                  NULL, 0, NULL);
        if (conn == NULL) {
                d_fprintf(stderr, "smbXcli_conn_create failed\n");
                return false;
index 26e9dee401d6e4204932c84c090dfadc6b21238a..573e98aecf0eccca18cf42bc0a962608062c1d35 100644 (file)
@@ -99,7 +99,8 @@ struct smbcli_transport *smbcli_transport_init(struct smbcli_socket *sock,
                                              options->signing,
                                              smb1_capabilities,
                                              NULL, /* client_guid */
-                                             0); /* smb2_capabilities */
+                                             0, /* smb2_capabilities */
+                                             NULL); /* smb3_ciphers */
        if (transport->conn == NULL) {
                TALLOC_FREE(sock);
                TALLOC_FREE(transport);
index cb626d862159cf234e72520ca90a26f2aa1ec1e3..292ca0f4afd0af3c37daa21dda0996886686979f 100644 (file)
@@ -72,7 +72,8 @@ struct smb2_transport *smb2_transport_init(struct smbcli_socket *sock,
                                              options->signing,
                                              0, /* smb1_capabilities */
                                              &options->client_guid,
-                                             options->smb2_capabilities);
+                                             options->smb2_capabilities,
+                                             &options->smb3_capabilities);
        if (transport->conn == NULL) {
                talloc_free(transport);
                return NULL;
index 39fef7f8f274d3fe5baf3743480302c49a3fb1ee..3bd5dbc59e8e9e153f4e05385f187b9b6c0dca40 100644 (file)
@@ -153,7 +153,8 @@ static void smb_connect_nego_connect_done(struct composite_context *creq)
                                          state->options.signing,
                                          smb1_capabilities,
                                          &state->options.client_guid,
-                                         state->options.smb2_capabilities);
+                                         state->options.smb2_capabilities,
+                                         &state->options.smb3_capabilities);
        if (tevent_req_nomem(state->conn, req)) {
                return;
        }