[PATCH 7/13] rpcrt4: Call CompleteAuthToken if InitializeSecurityContext returned a code that says it should be called.

Robert Shearman rob at codeweavers.com
Mon Mar 26 12:18:01 CDT 2007


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(-)
-------------- next part --------------
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
       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-patches mailing list