mirror of
https://github.com/reactos/reactos.git
synced 2025-05-19 00:54:18 +00:00
[RPCRT4] Sync with Wine Staging 2.2. CORE-12823
b85c2f7 rpcrt4: Fix some spec file entries. 042b41d rpcrt4: Avoid potential overflow in rpcrt4_protseq_ncacn_np_open_endpoint. c32cd11 rpcrt4: Acquire new credential handle for each connection. da05dfd rpcrt4: Store security package name in rpc_server_registered_auth_info. f8450fa rpcrt4: Handle NULL binding in RpcBindingInqAuthClient{,Ex}. svn path=/trunk/; revision=74085
This commit is contained in:
parent
8832faa915
commit
f2ad28ea2d
6 changed files with 35 additions and 37 deletions
|
@ -1603,11 +1603,15 @@ RpcBindingInqAuthClientExW( RPC_BINDING_HANDLE ClientBinding, RPC_AUTHZ_HANDLE *
|
|||
RPC_WSTR *ServerPrincName, ULONG *AuthnLevel, ULONG *AuthnSvc,
|
||||
ULONG *AuthzSvc, ULONG Flags )
|
||||
{
|
||||
RpcBinding *bind = ClientBinding;
|
||||
RpcBinding *bind;
|
||||
|
||||
TRACE("%p %p %p %p %p %p 0x%x\n", ClientBinding, Privs, ServerPrincName, AuthnLevel,
|
||||
AuthnSvc, AuthzSvc, Flags);
|
||||
|
||||
if (!ClientBinding) ClientBinding = I_RpcGetCurrentCallHandle();
|
||||
if (!ClientBinding) return RPC_S_INVALID_BINDING;
|
||||
|
||||
bind = ClientBinding;
|
||||
if (!bind->FromConn) return RPC_S_INVALID_BINDING;
|
||||
|
||||
return rpcrt4_conn_inquire_auth_client(bind->FromConn, Privs,
|
||||
|
|
|
@ -1047,7 +1047,10 @@ RPC_STATUS RPCRT4_ServerConnectionAuth(RpcConnection* conn,
|
|||
auth_data_in->auth_type, cred, exp,
|
||||
max_token, NULL, &conn->AuthInfo);
|
||||
if (status != RPC_S_OK)
|
||||
{
|
||||
FreeCredentialsHandle(&cred);
|
||||
return status;
|
||||
}
|
||||
|
||||
/* FIXME: should auth_data_in->auth_context_id be checked in the !start case? */
|
||||
conn->auth_context_id = auth_data_in->auth_context_id;
|
||||
|
|
|
@ -1287,12 +1287,10 @@ RPC_STATUS WINAPI RpcObjectSetType( UUID* ObjUuid, UUID* TypeUuid )
|
|||
struct rpc_server_registered_auth_info
|
||||
{
|
||||
struct list entry;
|
||||
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)
|
||||
|
@ -1331,36 +1329,22 @@ RPC_STATUS RPCRT4_ServerGetRegisteredAuthInfo(
|
|||
{
|
||||
RPC_STATUS status = RPC_S_UNKNOWN_AUTHN_SERVICE;
|
||||
struct rpc_server_registered_auth_info *auth_info;
|
||||
SECURITY_STATUS sec_status;
|
||||
|
||||
EnterCriticalSection(&server_auth_info_cs);
|
||||
LIST_FOR_EACH_ENTRY(auth_info, &server_registered_auth_info, struct rpc_server_registered_auth_info, entry)
|
||||
{
|
||||
if (auth_info->auth_type == auth_type)
|
||||
{
|
||||
if (!auth_info->cred_acquired)
|
||||
sec_status = AcquireCredentialsHandleW((SEC_WCHAR *)auth_info->principal, auth_info->package_name,
|
||||
SECPKG_CRED_INBOUND, NULL, NULL, NULL, NULL,
|
||||
cred, exp);
|
||||
if (sec_status != SEC_E_OK)
|
||||
{
|
||||
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,
|
||||
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;
|
||||
break;
|
||||
}
|
||||
|
||||
auth_info->cred_acquired = TRUE;
|
||||
status = RPC_S_SEC_PKG_ERROR;
|
||||
break;
|
||||
}
|
||||
|
||||
*cred = auth_info->cred;
|
||||
*exp = auth_info->exp;
|
||||
*max_token = auth_info->max_token;
|
||||
status = RPC_S_OK;
|
||||
break;
|
||||
|
@ -1378,8 +1362,7 @@ void RPCRT4_ServerFreeAllRegisteredAuthInfo(void)
|
|||
EnterCriticalSection(&server_auth_info_cs);
|
||||
LIST_FOR_EACH_ENTRY_SAFE(auth_info, cursor2, &server_registered_auth_info, struct rpc_server_registered_auth_info, entry)
|
||||
{
|
||||
if (auth_info->cred_acquired)
|
||||
FreeCredentialsHandle(&auth_info->cred);
|
||||
HeapFree(GetProcessHeap(), 0, auth_info->package_name);
|
||||
HeapFree(GetProcessHeap(), 0, auth_info->principal);
|
||||
HeapFree(GetProcessHeap(), 0, auth_info);
|
||||
}
|
||||
|
@ -1415,6 +1398,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;
|
||||
|
||||
|
@ -1424,20 +1408,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);
|
||||
|
||||
auth_info = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*auth_info));
|
||||
if (!auth_info)
|
||||
if (!package_name)
|
||||
return RPC_S_OUT_OF_RESOURCES;
|
||||
|
||||
auth_info = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*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);
|
||||
|
|
|
@ -390,7 +390,7 @@ static RPC_STATUS rpcrt4_protseq_ncacn_np_open_endpoint(RpcServerProtseq *protse
|
|||
RPC_STATUS r;
|
||||
LPSTR pname;
|
||||
RpcConnection *Connection;
|
||||
char generated_endpoint[21];
|
||||
char generated_endpoint[26];
|
||||
|
||||
if (!endpoint)
|
||||
{
|
||||
|
|
|
@ -118,9 +118,9 @@
|
|||
118 stdcall NDRSContextMarshall2(ptr ptr ptr ptr ptr long)
|
||||
119 stdcall NDRSContextMarshall(ptr ptr ptr)
|
||||
120 stdcall NDRSContextMarshallEx(ptr ptr ptr ptr)
|
||||
121 stdcall NDRSContextUnmarshall2(ptr ptr ptr ptr long)
|
||||
122 stdcall NDRSContextUnmarshall(ptr ptr)
|
||||
123 stdcall NDRSContextUnmarshallEx(ptr ptr ptr)
|
||||
121 stdcall NDRSContextUnmarshall2(ptr ptr long ptr long)
|
||||
122 stdcall NDRSContextUnmarshall(ptr long)
|
||||
123 stdcall NDRSContextUnmarshallEx(ptr ptr long)
|
||||
124 stub NDRcopy
|
||||
125 stdcall NdrAllocate(ptr long)
|
||||
126 varargs NdrAsyncClientCall(ptr ptr)
|
||||
|
|
|
@ -160,7 +160,7 @@ reactos/dll/win32/rasapi32 # Synced to WineStaging-1.9.11
|
|||
reactos/dll/win32/resutils # Synced to WineStaging-1.9.11
|
||||
reactos/dll/win32/riched20 # Synced to WineStaging-1.9.23
|
||||
reactos/dll/win32/riched32 # Synced to WineStaging-1.9.11
|
||||
reactos/dll/win32/rpcrt4 # Synced to WineStaging-1.9.23
|
||||
reactos/dll/win32/rpcrt4 # Synced to WineStaging-2.2
|
||||
reactos/dll/win32/rsabase # Synced to WineStaging-1.9.11
|
||||
reactos/dll/win32/rsaenh # Synced to WineStaging-1.9.11
|
||||
reactos/dll/win32/sccbase # Synced to WineStaging-1.9.11
|
||||
|
|
Loading…
Reference in a new issue