Rob Shearman : rpcrt4: Call CompleteAuthToken if InitializeSecurityContext returned a code that says it should be called .

Alexandre Julliard julliard at wine.codeweavers.com
Tue Mar 27 06:58:46 CDT 2007


Module: wine
Branch: master
Commit: 88295b9a020c3fac092bb0c49837d63d18a15de2
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=88295b9a020c3fac092bb0c49837d63d18a15de2

Author: Rob Shearman <rob at codeweavers.com>
Date:   Mon Mar 26 18:18:01 2007 +0100

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 files changed, 16 insertions(+), 1 deletions(-)

diff --git a/dlls/rpcrt4/rpc_message.c b/dlls/rpcrt4/rpc_message.c
index b100431..2519cee 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;
 }




More information about the wine-cvs mailing list