From cdbc38538c660d2c23a495981fdc4f46e7ee0d6e Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Tue, 25 Nov 2014 17:43:25 -0800 Subject: [PATCH] libcli: SMB2: Pure SMB2-only negprot fix to make us behave as a Windows client does. Required as some servers return zero when asked for zero credits in an initial SMB2-only negprot. Signed-off-by: Jeremy Allison --- libcli/smb/smb2_negotiate_context.h | 1 + libcli/smb/smbXcli_base.c | 10 ++++++++++ 2 files changed, 11 insertions(+) diff --git a/libcli/smb/smb2_negotiate_context.h b/libcli/smb/smb2_negotiate_context.h index d98104a..55aa032 100644 --- a/libcli/smb/smb2_negotiate_context.h +++ b/libcli/smb/smb2_negotiate_context.h @@ -50,5 +50,6 @@ NTSTATUS smb2_negotiate_context_add(TALLOC_CTX *mem_ctx, struct smb2_negotiate_c */ struct smb2_negotiate_context *smb2_negotiate_context_find(const struct smb2_negotiate_contexts *b, uint16_t type); +#define WINDOWS_CLIENT_PURE_SMB2_NEGPROT_INITIAL_CREDIT_ASK 31 #endif /* _LIBCLI_SMB_SMB2_NEGOTIATE_BLOB_H_ */ diff --git a/libcli/smb/smbXcli_base.c b/libcli/smb/smbXcli_base.c index 61ac6f0..a3a7ecb 100644 --- a/libcli/smb/smbXcli_base.c +++ b/libcli/smb/smbXcli_base.c @@ -3864,6 +3864,16 @@ struct tevent_req *smbXcli_negprot_send(TALLOC_CTX *mem_ctx, */ conn->dispatch_incoming = smb2cli_conn_dispatch_incoming; + /* + * As we're starting with an SMB2 negprot, emulate Windows + * and ask for 31 credits in the initial SMB2 negprot. + * If we don't and leave requested credits at + * zero, MacOSX servers return zero credits on + * the negprot reply and we fail to connect. + */ + smb2cli_conn_set_max_credits(conn, + WINDOWS_CLIENT_PURE_SMB2_NEGPROT_INITIAL_CREDIT_ASK); + subreq = smbXcli_negprot_smb2_subreq(state); if (tevent_req_nomem(subreq, req)) { return tevent_req_post(req, ev); -- 1.9.1