static NTSTATUS ntlmssp_client_initial(struct ntlmssp_state *ntlmssp_state,
DATA_BLOB reply, DATA_BLOB *next_request)
{
+ NTSTATUS status;
+ struct NEGOTIATE_MESSAGE negotiate;
+
if (ntlmssp_state->unicode) {
ntlmssp_state->neg_flags |= NTLMSSP_NEGOTIATE_UNICODE;
} else {
ntlmssp_state->neg_flags |= NTLMSSP_NEGOTIATE_NTLM2;
}
- /* generate the ntlmssp negotiate packet */
- msrpc_gen(ntlmssp_state, next_request, "CddAA",
- "NTLMSSP",
- NTLMSSP_NEGOTIATE,
- ntlmssp_state->neg_flags,
- ntlmssp_state->client.netbios_domain,
- ntlmssp_state->client.netbios_name);
+ negotiate.NegotiateFlags = ntlmssp_state->neg_flags;
+ negotiate.DomainName = ntlmssp_state->client.netbios_domain;
+ negotiate.Workstation = ntlmssp_state->client.netbios_name;
+
+ status = ntlmssp_push_NEGOTIATE_MESSAGE(next_request,
+ ntlmssp_state,
+ &negotiate);
+ if (!NT_STATUS_IS_OK(status)) {
+ return status;
+ }
if (DEBUGLEVEL >= 10) {
- struct NEGOTIATE_MESSAGE *negotiate = talloc(
- talloc_tos(), struct NEGOTIATE_MESSAGE);
- if (negotiate != NULL) {
- NTSTATUS status;
- status = ntlmssp_pull_NEGOTIATE_MESSAGE(
- next_request, negotiate, negotiate);
- if (NT_STATUS_IS_OK(status)) {
- NDR_PRINT_DEBUG(NEGOTIATE_MESSAGE,
- negotiate);
- }
- TALLOC_FREE(negotiate);
- }
+ NDR_PRINT_DEBUG(NEGOTIATE_MESSAGE, &negotiate);
}
ntlmssp_state->expected_state = NTLMSSP_CHALLENGE;