diff options
author | Andrew Tridgell <tridge@samba.org> | 2004-10-30 11:07:28 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 13:05:04 -0500 |
commit | feff2e9cbdd2e3e8e9db5d9b01b5d5cec42943c0 (patch) | |
tree | 2862a5ad7a946a316d8099d875202726ae0790c1 /source4/libcli/auth/schannel.c | |
parent | 557bf8d3e4bfed92645c64ebc06c3e076eb16053 (diff) | |
download | samba-feff2e9cbdd2e3e8e9db5d9b01b5d5cec42943c0.tar.gz samba-feff2e9cbdd2e3e8e9db5d9b01b5d5cec42943c0.tar.bz2 samba-feff2e9cbdd2e3e8e9db5d9b01b5d5cec42943c0.zip |
r3390: fixed schannel server side support. RPC-SCHANNEL now works against Samba4.
(This used to be commit 01f5c1c72d9fc8f21029adc586154b0c54f76c9e)
Diffstat (limited to 'source4/libcli/auth/schannel.c')
-rw-r--r-- | source4/libcli/auth/schannel.c | 27 |
1 files changed, 12 insertions, 15 deletions
diff --git a/source4/libcli/auth/schannel.c b/source4/libcli/auth/schannel.c index 2e752f0172..a99822534b 100644 --- a/source4/libcli/auth/schannel.c +++ b/source4/libcli/auth/schannel.c @@ -22,6 +22,16 @@ #include "includes.h" +struct schannel_state { + TALLOC_CTX *mem_ctx; + uint8_t session_key[16]; + uint32_t seq_num; + BOOL initiator; +}; + +#define NETSEC_SIGN_SIGNATURE { 0x77, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00 } +#define NETSEC_SEAL_SIGNATURE { 0x77, 0x00, 0x7a, 0x00, 0xff, 0xff, 0x00, 0x00 } + /******************************************************************* Encode or Decode the sequence number (which is symmetric) ********************************************************************/ @@ -209,13 +219,7 @@ NTSTATUS schannel_seal_packet(struct schannel_state *state, netsec_deal_with_seq_num(state, digest_final, seq_num); - if (!state->signature.data) { - state->signature = data_blob_talloc(state->mem_ctx, NULL, 32); - if (!state->signature.data) { - return NT_STATUS_NO_MEMORY; - } - } - (*sig) = state->signature; + (*sig) = data_blob_talloc(state->mem_ctx, NULL, 32); memcpy(sig->data, netsec_sig, 8); memcpy(sig->data+8, seq_num, 8); @@ -252,13 +256,7 @@ NTSTATUS schannel_sign_packet(struct schannel_state *state, netsec_deal_with_seq_num(state, digest_final, seq_num); - if (!state->signature.data) { - state->signature = data_blob_talloc(state->mem_ctx, NULL, 32); - if (!state->signature.data) { - return NT_STATUS_NO_MEMORY; - } - } - (*sig) = state->signature; + (*sig) = data_blob_talloc(state->mem_ctx, NULL, 32); memcpy(sig->data, netsec_sig, 8); memcpy(sig->data+8, seq_num, 8); @@ -307,7 +305,6 @@ NTSTATUS schannel_start(struct schannel_state **state, (*state)->mem_ctx = mem_ctx; memcpy((*state)->session_key, session_key, 16); (*state)->initiator = initiator; - (*state)->signature = data_blob(NULL, 0); (*state)->seq_num = 0; return NT_STATUS_OK; |