Robert Shearman : rpcrt4: Add the definition of RpcAuthVerifier to rpc_defs .h from the DCE/RPC spec.
Module: wine Branch: refs/heads/master Commit: 0592210bcd45758cedac290be0958c3c67c41a09 URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=0592210bcd45758cedac290b... Author: Robert Shearman <rob(a)codeweavers.com> Date: Fri May 19 16:02:23 2006 +0100 rpcrt4: Add the definition of RpcAuthVerifier to rpc_defs.h from the DCE/RPC spec. Use it in RPCRT4_SendAuth instead of writing out the data byte-by-byte. --- dlls/rpcrt4/rpc_defs.h | 9 +++++++++ dlls/rpcrt4/rpc_message.c | 20 ++++++++++---------- 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/dlls/rpcrt4/rpc_defs.h b/dlls/rpcrt4/rpc_defs.h index 454c1c6..896fea1 100644 --- a/dlls/rpcrt4/rpc_defs.h +++ b/dlls/rpcrt4/rpc_defs.h @@ -134,6 +134,15 @@ typedef union RpcPktBindNAckHdr bind_nack; } RpcPktHdr; +typedef struct +{ + unsigned char auth_type; /* authentication scheme in use */ + unsigned char auth_level; /* RPC_C_AUTHN_LEVEL* */ + unsigned char auth_pad_length; /* length of padding to restore n % 4 alignment */ + unsigned char auth_reserved; /* reserved, must be zero */ + unsigned long auth_context_id; /* unique value for the authenticated connection */ +} RpcAuthVerifier; + #define RPC_VER_MAJOR 5 #define RPC_VER_MINOR 0 diff --git a/dlls/rpcrt4/rpc_message.c b/dlls/rpcrt4/rpc_message.c index 6646ce7..f18cd47 100644 --- a/dlls/rpcrt4/rpc_message.c +++ b/dlls/rpcrt4/rpc_message.c @@ -271,8 +271,8 @@ static RPC_STATUS RPCRT4_SendAuth(RpcCon PUCHAR buffer_pos; DWORD hdr_size; LONG count; - unsigned char *pkt, *auth_hdr; - LONG alen = AuthLength ? (AuthLength + 8) : 0; + unsigned char *pkt; + LONG alen = AuthLength ? (AuthLength + sizeof(RpcAuthVerifier)) : 0; buffer_pos = Buffer; /* The packet building functions save the packet header size, so we can use it. */ @@ -309,16 +309,16 @@ static RPC_STATUS RPCRT4_SendAuth(RpcCon /* add the authorization info */ if (Connection->AuthInfo && AuthLength) { - auth_hdr = &pkt[Header->common.frag_len - alen]; - - auth_hdr[0] = Connection->AuthInfo->AuthnSvc; - auth_hdr[1] = Connection->AuthInfo->AuthnLevel; - auth_hdr[2] = auth_pad_len; - auth_hdr[3] = 0x00; + RpcAuthVerifier *auth_hdr = (RpcAuthVerifier *)&pkt[Header->common.frag_len - alen]; + auth_hdr->auth_type = Connection->AuthInfo->AuthnSvc; + auth_hdr->auth_level = Connection->AuthInfo->AuthnLevel; + auth_hdr->auth_pad_length = auth_pad_len; + auth_hdr->auth_reserved = 0; /* a unique number... */ - memcpy(&auth_hdr[4], &Connection, 4); - memcpy(&auth_hdr[8], Auth, AuthLength); + auth_hdr->auth_context_id = (unsigned long)Connection; + + memcpy(auth_hdr + 1, Auth, AuthLength); } write:
participants (1)
-
Alexandre Julliard