Module: wine Branch: master Commit: 0debcf5b1e1525b189918458044a6a6b4ddbe604 URL: http://source.winehq.org/git/wine.git/?a=commit;h=0debcf5b1e1525b18991845804...
Author: Rob Shearman rob@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) {