s3:libsmb: cli_smb2_list() can sometimes fail initially on a connection
authorTim Beale <timbeale@catalyst.net.nz>
Mon, 7 Jan 2019 02:28:12 +0000 (15:28 +1300)
committerKarolin Seeger <kseeger@samba.org>
Fri, 1 Feb 2019 10:34:10 +0000 (11:34 +0100)
commit3b19257a7d31e525c2246c6c8c158d86cccb99a5
tree6e38d78dfd5be3969cdb48899862192a12f21a38
parent5cbce550a7683ad8d62ab0029e283ede5650a3d2
s3:libsmb: cli_smb2_list() can sometimes fail initially on a connection

cli_smb2_list() appears to be a slightly unique SMB operation in that it
specifies the max transaction size for the response buffer size. The
Python bindings highlighted a problem where if cli_smb2_list() were one
of the first operations performed on the SMBv2 connection, it would fail
due to insufficient credits. Because the response buffer size is
(potentially) so much larger, it requires more credits (128) compared
with other SMB operations.

When talking to a samba DC, the connection credits seem to start off at
1, then increase by 32 for every SMB reply we receive back from the
server. After cli_full_connection(), the connection has 65 credits. The
cli_smb2_create_fnum() in cli_smb2_list() adds another 32 credits, but
this is still less than the 128 that smb2cli_query_directory() requires.

This problem doesn't happen for smbclient because the cli_cm_open() API
it uses ends up sending more messages, and so the connection has more
credits.

This patch changes cli_smb2_list(), so it requests a smaller response
buffer size if it doesn't have enough credits available for the max
transaction size. smb2cli_query_directory() is already in a loop, so it
can span multiple SMB messages if for some reason the transaction size
isn't big enough for the listings.

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

Signed-off-by: Tim Beale <timbeale@catalyst.net.nz>
Reviewed-by: Stefan Metzmacher <metze@samba.org>
Autobuild-User(master): Stefan Metzmacher <metze@samba.org>
Autobuild-Date(master): Thu Jan 10 02:40:16 CET 2019 on sn-devel-144

(cherry picked from commit fd355dff906f5f4832901bce76544f1a4e50c33d)
source3/libsmb/cli_smb2_fnum.c