Module: wine Branch: master Commit: da05dfd151153fda5731ddcdbcdb951354b5da56 URL: http://source.winehq.org/git/wine.git/?a=commit;h=da05dfd151153fda5731ddcdbc... Author: Jacek Caban <jacek(a)codeweavers.com> Date: Wed Nov 30 12:08:51 2016 +0100 rpcrt4: Store security package name in rpc_server_registered_auth_info. Signed-off-by: Jacek Caban <jacek(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/rpcrt4/rpc_server.c | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/dlls/rpcrt4/rpc_server.c b/dlls/rpcrt4/rpc_server.c index 73e9742..c3bc227 100644 --- a/dlls/rpcrt4/rpc_server.c +++ b/dlls/rpcrt4/rpc_server.c @@ -1312,9 +1312,10 @@ struct rpc_server_registered_auth_info TimeStamp exp; BOOL cred_acquired; CredHandle cred; - ULONG max_token; USHORT auth_type; + WCHAR *package_name; WCHAR *principal; + ULONG max_token; }; static RPC_STATUS find_security_package(ULONG auth_type, SecPkgInfoW **packages_buf, SecPkgInfoW **ret) @@ -1361,17 +1362,11 @@ RPC_STATUS RPCRT4_ServerGetRegisteredAuthInfo( { if (!auth_info->cred_acquired) { - SecPkgInfoW *packages, *package; SECURITY_STATUS sec_status; - status = find_security_package(auth_info->auth_type, &packages, &package); - if (status != RPC_S_OK) - break; - - sec_status = AcquireCredentialsHandleW((SEC_WCHAR *)auth_info->principal, package->Name, + sec_status = AcquireCredentialsHandleW((SEC_WCHAR *)auth_info->principal, auth_info->package_name, SECPKG_CRED_INBOUND, NULL, NULL, NULL, NULL, &auth_info->cred, &auth_info->exp); - FreeContextBuffer(packages); if (sec_status != SEC_E_OK) { status = RPC_S_SEC_PKG_ERROR; @@ -1437,6 +1432,7 @@ RPC_STATUS WINAPI RpcServerRegisterAuthInfoW( RPC_WSTR ServerPrincName, ULONG Au { struct rpc_server_registered_auth_info *auth_info; SecPkgInfoW *packages, *package; + WCHAR *package_name; ULONG max_token; RPC_STATUS status; @@ -1446,20 +1442,27 @@ RPC_STATUS WINAPI RpcServerRegisterAuthInfoW( RPC_WSTR ServerPrincName, ULONG Au if (status != RPC_S_OK) return status; + package_name = RPCRT4_strdupW(package->Name); max_token = package->cbMaxToken; FreeContextBuffer(packages); + if (!package_name) + return RPC_S_OUT_OF_RESOURCES; auth_info = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*auth_info)); - if (!auth_info) + if (!auth_info) { + HeapFree(GetProcessHeap(), 0, package_name); return RPC_S_OUT_OF_RESOURCES; + } if (ServerPrincName && !(auth_info->principal = RPCRT4_strdupW(ServerPrincName))) { + HeapFree(GetProcessHeap(), 0, package_name); HeapFree(GetProcessHeap(), 0, auth_info); return RPC_S_OUT_OF_RESOURCES; } - auth_info->max_token = max_token; auth_info->auth_type = AuthnSvc; + auth_info->package_name = package_name; + auth_info->max_token = max_token; EnterCriticalSection(&server_auth_info_cs); list_add_tail(&server_registered_auth_info, &auth_info->entry);