Rob Shearman : rpcrt4: Handle security quality of service flags relevant to the ncacn_np protocol .

Alexandre Julliard julliard at wine.codeweavers.com
Mon Jan 22 07:05:21 CST 2007


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

Author: Rob Shearman <rob at codeweavers.com>
Date:   Fri Jan 19 07:01:23 2007 -0600

rpcrt4: Handle security quality of service flags relevant to the ncacn_np protocol.

---

 dlls/rpcrt4/rpc_transport.c |   27 ++++++++++++++++++++++++++-
 1 files changed, 26 insertions(+), 1 deletions(-)

diff --git a/dlls/rpcrt4/rpc_transport.c b/dlls/rpcrt4/rpc_transport.c
index 7f6d8a2..9c07d7d 100644
--- a/dlls/rpcrt4/rpc_transport.c
+++ b/dlls/rpcrt4/rpc_transport.c
@@ -162,8 +162,33 @@ static RPC_STATUS rpcrt4_conn_open_pipe(
   TRACE("connecting to %s\n", pname);
 
   while (TRUE) {
+    DWORD dwFlags = 0;
+    if (Connection->QOS)
+    {
+        switch (Connection->QOS->qos->ImpersonationType)
+        {
+            dwFlags = SECURITY_SQOS_PRESENT;
+            case RPC_C_IMP_LEVEL_DEFAULT:
+                /* FIXME: what to do here? */
+                break;
+            case RPC_C_IMP_LEVEL_ANONYMOUS:
+                dwFlags |= SECURITY_ANONYMOUS;
+                break;
+            case RPC_C_IMP_LEVEL_IDENTIFY:
+                dwFlags |= SECURITY_IDENTIFICATION;
+                break;
+            case RPC_C_IMP_LEVEL_IMPERSONATE:
+                dwFlags |= SECURITY_IMPERSONATION;
+                break;
+            case RPC_C_IMP_LEVEL_DELEGATE:
+                dwFlags |= SECURITY_DELEGATION;
+                break;
+        }
+        if (Connection->QOS->qos->IdentityTracking == RPC_C_QOS_IDENTIFY_DYNAMIC)
+            dwFlags |= SECURITY_CONTEXT_TRACKING;
+    }
     pipe = CreateFileA(pname, GENERIC_READ|GENERIC_WRITE, 0, NULL,
-                       OPEN_EXISTING, 0, 0);
+                       OPEN_EXISTING, dwFlags, 0);
     if (pipe != INVALID_HANDLE_VALUE) break;
     err = GetLastError();
     if (err == ERROR_PIPE_BUSY) {




More information about the wine-cvs mailing list