From 88295b9a020c3fac092bb0c49837d63d18a15de2 Mon Sep 17 00:00:00 2001 From: Rob Shearman Date: Mon, 26 Mar 2007 18:18:01 +0100 Subject: [PATCH] rpcrt4: Call CompleteAuthToken if InitializeSecurityContext returned a code that says it should be called. Currently, the only security provider that requires this is the Digest one, which we don't really care about, but is supported for completeness. --- dlls/rpcrt4/rpc_message.c | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/dlls/rpcrt4/rpc_message.c b/dlls/rpcrt4/rpc_message.c index b1004312905..2519ceea5ad 100644 --- a/dlls/rpcrt4/rpc_message.c +++ b/dlls/rpcrt4/rpc_message.c @@ -501,7 +501,22 @@ static RPC_STATUS RPCRT4_ClientAuthorize(RpcConnection *conn, SecBuffer *in, return ERROR_ACCESS_DENIED; /* FIXME: is this correct? */ } - TRACE("r = 0x%08x, cbBuffer = %ld, attr = 0x%08x\n", r, out->cbBuffer, conn->attr); + TRACE("r = 0x%08x, attr = 0x%08x\n", r, conn->attr); + + if ((r == SEC_I_COMPLETE_NEEDED) || (r == SEC_I_COMPLETE_AND_CONTINUE)) + { + TRACE("complete needed\n"); + r = CompleteAuthToken(&conn->ctx, &out_desc); + if (FAILED(r)) + { + HeapFree(GetProcessHeap(), 0, out->pvBuffer); + out->pvBuffer = NULL; + WARN("CompleteAuthToken failed with error 0x%08x\n", r); + return ERROR_ACCESS_DENIED; /* FIXME: is this correct? */ + } + } + + TRACE("cbBuffer = %ld\n", out->cbBuffer); return RPC_S_OK; }