s3:libsmb: cli_smb2_list() can sometimes fail initially on a connection
[samba.git] / source3 / libsmb / cli_smb2_fnum.c
index 6cba4422634495d11bfa4e31b1b2f95e4bcccde8..3a64438a5b998d3f6d0806326722ed5f72079c70 100644 (file)
@@ -919,7 +919,9 @@ NTSTATUS cli_smb2_list(struct cli_state *cli,
        TALLOC_CTX *frame = talloc_stackframe();
        TALLOC_CTX *subframe = NULL;
        bool mask_has_wild;
-       uint32_t max_trans = smb2cli_conn_max_trans_size(cli->conn);
+       uint32_t max_trans;
+       uint32_t max_avail_len;
+       bool ok;
 
        if (smbXcli_conn_has_async_calls(cli->conn)) {
                /*
@@ -968,6 +970,16 @@ NTSTATUS cli_smb2_list(struct cli_state *cli,
                goto fail;
        }
 
+       /*
+        * ideally, use the max transaction size, but don't send a request
+        * bigger than we have credits available for
+        */
+       max_trans = smb2cli_conn_max_trans_size(cli->conn);
+       ok = smb2cli_conn_req_possible(cli->conn, &max_avail_len);
+       if (ok) {
+               max_trans = MIN(max_trans, max_avail_len);
+       }
+
        do {
                uint8_t *dir_data = NULL;
                uint32_t dir_data_length = 0;