TALLOC_CTX *mem_ctx, struct tevent_context *ev,
const char *my_name, const char *dest_host,
const struct sockaddr_storage *dest_ss, int port,
- enum smb_signing_setting signing_state, int flags)
+ enum smb_signing_setting signing_state, int flags,
+ struct smb2_negotiate_contexts *negotiate_contexts)
{
struct tevent_req *req, *subreq;
struct cli_start_connection_state *state;
}
}
+ if (negotiate_contexts != NULL) {
+ uint16_t i;
+
+ for (i=0; i<negotiate_contexts->num_contexts; i++) {
+ struct smb2_negotiate_context *ctx =
+ &negotiate_contexts->contexts[i];
+ NTSTATUS status;
+
+ status = smb2_negotiate_context_add(
+ state->negotiate_contexts,
+ state->negotiate_contexts,
+ ctx->type,
+ ctx->data.data,
+ ctx->data.length);
+ if (tevent_req_nterror(req, status)) {
+ return tevent_req_post(req, ev);
+ }
+ }
+ }
+
subreq = cli_connect_nb_send(state, ev, dest_host, dest_ss, port,
0x20, my_name, signing_state, flags);
if (tevent_req_nomem(subreq, req)) {
goto fail;
}
req = cli_start_connection_send(ev, ev, my_name, dest_host, dest_ss,
- port, signing_state, flags);
+ port, signing_state, flags, NULL);
if (req == NULL) {
goto fail;
}
const struct sockaddr_storage *dest_ss, int port,
const char *service, const char *service_type,
struct cli_credentials *creds,
- int flags)
+ int flags,
+ struct smb2_negotiate_contexts *negotiate_contexts)
{
struct tevent_req *req, *subreq;
struct cli_full_connection_creds_state *state;
subreq = cli_start_connection_send(
state, ev, my_name, dest_host, dest_ss, port,
- signing_state, flags);
+ signing_state, flags,
+ negotiate_contexts);
if (tevent_req_nomem(subreq, req)) {
return tevent_req_post(req, ev);
}
}
req = cli_full_connection_creds_send(
ev, ev, my_name, dest_host, dest_ss, port, service,
- service_type, creds, flags);
+ service_type, creds, flags,
+ NULL);
if (req == NULL) {
goto fail;
}
enum smb_signing_setting signing_state, int flags);
NTSTATUS cli_smb1_setup_encryption(struct cli_state *cli,
struct cli_credentials *creds);
+
+struct smb2_negotiate_contexts;
struct tevent_req *cli_full_connection_creds_send(
TALLOC_CTX *mem_ctx, struct tevent_context *ev,
const char *my_name, const char *dest_host,
const struct sockaddr_storage *dest_ss, int port,
const char *service, const char *service_type,
struct cli_credentials *creds,
- int flags);
+ int flags,
+ struct smb2_negotiate_contexts *negotiate_contexts);
NTSTATUS cli_full_connection_creds_recv(struct tevent_req *req,
struct cli_state **output_cli);
NTSTATUS cli_full_connection_creds(struct cli_state **output_cli,