diff options
author | Jeremy Allison <jra@samba.org> | 2011-03-28 13:26:27 -0700 |
---|---|---|
committer | Jeremy Allison <jra@samba.org> | 2011-03-28 23:12:07 +0200 |
commit | 52602e4f5ad0f7c3cdb4a50dfe32d0b8ad49b6e4 (patch) | |
tree | 69911fe6eca738368d497107032f3a3b084058b6 /source3 | |
parent | fbe19ba39843d0c70758fc8d775b085a67224a94 (diff) | |
download | samba-52602e4f5ad0f7c3cdb4a50dfe32d0b8ad49b6e4.tar.gz samba-52602e4f5ad0f7c3cdb4a50dfe32d0b8ad49b6e4.tar.xz samba-52602e4f5ad0f7c3cdb4a50dfe32d0b8ad49b6e4.zip |
Fix inspired by work done by David Disseldorp for bug #8040 - smbclient segfaults when a Cyrillic netbios name or workgroup is configured.
Change msrpc_gen to return NTSTATUS and ensure everywhere this is
used it is correctly checked to return that status.
Jeremy.
Diffstat (limited to 'source3')
-rw-r--r-- | source3/libsmb/ntlmssp.c | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/source3/libsmb/ntlmssp.c b/source3/libsmb/ntlmssp.c index 7a006a373f..e0bcccaee6 100644 --- a/source3/libsmb/ntlmssp.c +++ b/source3/libsmb/ntlmssp.c @@ -377,6 +377,8 @@ static NTSTATUS ntlmssp_client_initial(struct ntlmssp_state *ntlmssp_state, TALLOC_CTX *out_mem_ctx, /* Unused at this time */ DATA_BLOB reply, DATA_BLOB *next_request) { + NTSTATUS status; + if (ntlmssp_state->unicode) { ntlmssp_state->neg_flags |= NTLMSSP_NEGOTIATE_UNICODE; } else { @@ -388,12 +390,17 @@ static NTSTATUS ntlmssp_client_initial(struct ntlmssp_state *ntlmssp_state, } /* generate the ntlmssp negotiate packet */ - msrpc_gen(ntlmssp_state, next_request, "CddAA", + status = msrpc_gen(ntlmssp_state, next_request, "CddAA", "NTLMSSP", NTLMSSP_NEGOTIATE, ntlmssp_state->neg_flags, ntlmssp_state->client.netbios_domain, ntlmssp_state->client.netbios_name); + if (!NT_STATUS_IS_OK(status)) { + DEBUG(0, ("ntlmssp_client_initial: failed to generate " + "ntlmssp negotiate packet\n")); + return status; + } if (DEBUGLEVEL >= 10) { struct NEGOTIATE_MESSAGE *negotiate = talloc( @@ -683,7 +690,7 @@ noccache: } /* this generates the actual auth packet */ - if (!msrpc_gen(ntlmssp_state, next_request, auth_gen_string, + nt_status = msrpc_gen(ntlmssp_state, next_request, auth_gen_string, "NTLMSSP", NTLMSSP_AUTH, lm_response.data, lm_response.length, @@ -692,8 +699,9 @@ noccache: ntlmssp_state->user, ntlmssp_state->client.netbios_name, encrypted_session_key.data, encrypted_session_key.length, - ntlmssp_state->neg_flags)) { + ntlmssp_state->neg_flags); + if (!NT_STATUS_IS_OK(nt_status)) { return NT_STATUS_NO_MEMORY; } |