mirror of
https://github.com/samba-team/samba.git
synced 2025-08-12 01:49:28 +03:00
libcli/smb: add max_credits arg to smbXcli_negprot_send()
This allows source4/torture code to set the option for tests by preparing a struct smbcli_options with max_credits set to some value and pass that to a torture_smb2_connection_ext(). This will be used in subsequent smbtorture test for SMB2 creditting. Behaviour of existing upper layers is unchanged, they simply pass the wanted max credits value to smbXcli_negprot_send() instead of retrofitting it with a call to smb2cli_conn_set_max_credits(). Signed-off-by: Ralph Boehme <slow@samba.org> Reviewed-by: Jeremy Allison <jra@samba.org>
This commit is contained in:
committed by
Jeremy Allison
parent
ac71bb3eb4
commit
8cbdc6a6df
@ -4092,7 +4092,8 @@ struct tevent_req *smbXcli_negprot_send(TALLOC_CTX *mem_ctx,
|
||||
struct smbXcli_conn *conn,
|
||||
uint32_t timeout_msec,
|
||||
enum protocol_types min_protocol,
|
||||
enum protocol_types max_protocol)
|
||||
enum protocol_types max_protocol,
|
||||
uint16_t max_credits)
|
||||
{
|
||||
struct tevent_req *req, *subreq;
|
||||
struct smbXcli_negprot_state *state;
|
||||
@ -4125,6 +4126,10 @@ struct tevent_req *smbXcli_negprot_send(TALLOC_CTX *mem_ctx,
|
||||
conn->max_protocol = max_protocol;
|
||||
conn->protocol = PROTOCOL_NONE;
|
||||
|
||||
if (max_protocol >= PROTOCOL_SMB2_02) {
|
||||
conn->smb2.max_credits = max_credits;
|
||||
}
|
||||
|
||||
if ((min_protocol < PROTOCOL_SMB2_02) &&
|
||||
(max_protocol < PROTOCOL_SMB2_02)) {
|
||||
/*
|
||||
@ -4147,16 +4152,6 @@ 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);
|
||||
@ -5137,7 +5132,8 @@ NTSTATUS smbXcli_negprot(struct smbXcli_conn *conn,
|
||||
goto fail;
|
||||
}
|
||||
req = smbXcli_negprot_send(frame, ev, conn, timeout_msec,
|
||||
min_protocol, max_protocol);
|
||||
min_protocol, max_protocol,
|
||||
WINDOWS_CLIENT_PURE_SMB2_NEGPROT_INITIAL_CREDIT_ASK);
|
||||
if (req == NULL) {
|
||||
goto fail;
|
||||
}
|
||||
|
@ -436,7 +436,8 @@ struct tevent_req *smbXcli_negprot_send(TALLOC_CTX *mem_ctx,
|
||||
struct smbXcli_conn *conn,
|
||||
uint32_t timeout_msec,
|
||||
enum protocol_types min_protocol,
|
||||
enum protocol_types max_protocol);
|
||||
enum protocol_types max_protocol,
|
||||
uint16_t max_credits);
|
||||
NTSTATUS smbXcli_negprot_recv(struct tevent_req *req);
|
||||
NTSTATUS smbXcli_negprot(struct smbXcli_conn *conn,
|
||||
uint32_t timeout_msec,
|
||||
|
@ -39,6 +39,7 @@
|
||||
#include "../libcli/smb/smbXcli_base.h"
|
||||
#include "../libcli/smb/smb_seal.h"
|
||||
#include "lib/param/param.h"
|
||||
#include "../libcli/smb/smb2_negotiate_context.h"
|
||||
|
||||
#define STAR_SMBSERVER "*SMBSERVER"
|
||||
|
||||
@ -2754,7 +2755,8 @@ static void cli_start_connection_connected(struct tevent_req *subreq)
|
||||
subreq = smbXcli_negprot_send(state, state->ev, state->cli->conn,
|
||||
state->cli->timeout,
|
||||
state->min_protocol,
|
||||
state->max_protocol);
|
||||
state->max_protocol,
|
||||
WINDOWS_CLIENT_PURE_SMB2_NEGPROT_INITIAL_CREDIT_ASK);
|
||||
if (tevent_req_nomem(subreq, req)) {
|
||||
return;
|
||||
}
|
||||
|
@ -2990,7 +2990,7 @@ static bool run_negprot_nowait(int dummy)
|
||||
struct tevent_req *req;
|
||||
|
||||
req = smbXcli_negprot_send(ev, ev, cli->conn, cli->timeout,
|
||||
PROTOCOL_CORE, PROTOCOL_NT1);
|
||||
PROTOCOL_CORE, PROTOCOL_NT1, 0);
|
||||
if (req == NULL) {
|
||||
TALLOC_FREE(ev);
|
||||
return false;
|
||||
|
@ -103,6 +103,7 @@ struct smbcli_options {
|
||||
enum smb_signing_setting signing;
|
||||
uint32_t smb2_capabilities;
|
||||
struct GUID client_guid;
|
||||
uint64_t max_credits;
|
||||
};
|
||||
|
||||
/* this is the context for the client transport layer */
|
||||
|
@ -60,7 +60,8 @@ struct tevent_req *smb_raw_negotiate_send(TALLOC_CTX *mem_ctx,
|
||||
transport->conn,
|
||||
timeout_msec,
|
||||
minprotocol,
|
||||
maxprotocol);
|
||||
maxprotocol,
|
||||
transport->options.max_credits);
|
||||
if (tevent_req_nomem(subreq, req)) {
|
||||
return tevent_req_post(req, ev);
|
||||
}
|
||||
|
@ -155,7 +155,8 @@ static void smb2_connect_socket_done(struct composite_context *creq)
|
||||
subreq = smbXcli_negprot_send(state, state->ev,
|
||||
state->transport->conn, timeout_msec,
|
||||
min_protocol,
|
||||
state->transport->options.max_protocol);
|
||||
state->transport->options.max_protocol,
|
||||
state->transport->options.max_credits);
|
||||
if (tevent_req_nomem(subreq, req)) {
|
||||
return;
|
||||
}
|
||||
@ -181,9 +182,6 @@ static void smb2_connect_negprot_done(struct tevent_req *subreq)
|
||||
return;
|
||||
}
|
||||
|
||||
/* This is a hack... */
|
||||
smb2cli_conn_set_max_credits(transport->conn, 30);
|
||||
|
||||
state->session = smb2_session_init(transport, state->gensec_settings, state);
|
||||
if (tevent_req_nomem(state->session, req)) {
|
||||
return;
|
||||
|
@ -30,6 +30,7 @@
|
||||
#include "lib/param/param.h"
|
||||
#include "libcli/raw/libcliraw.h"
|
||||
#include "librpc/ndr/libndr.h"
|
||||
#include "libcli/smb/smb2_negotiate_context.h"
|
||||
|
||||
void lpcfg_smbcli_options(struct loadparm_context *lp_ctx,
|
||||
struct smbcli_options *options)
|
||||
@ -47,6 +48,7 @@ void lpcfg_smbcli_options(struct loadparm_context *lp_ctx,
|
||||
options->use_level2_oplocks = true;
|
||||
options->smb2_capabilities = SMB2_CAP_ALL;
|
||||
options->client_guid = GUID_random();
|
||||
options->max_credits = WINDOWS_CLIENT_PURE_SMB2_NEGPROT_INITIAL_CREDIT_ASK;
|
||||
}
|
||||
|
||||
void lpcfg_smbcli_session_options(struct loadparm_context *lp_ctx,
|
||||
|
Reference in New Issue
Block a user