Jacek Caban : rpcrt4: Moved EnumerateSecurityPackagesW call to helper function.
Alexandre Julliard
julliard at winehq.org
Sun Jul 3 12:18:29 CDT 2016
Module: wine
Branch: master
Commit: 6cdbde64ea8fab7240ef90660a544317ae580187
URL: http://source.winehq.org/git/wine.git/?a=commit;h=6cdbde64ea8fab7240ef90660a544317ae580187
Author: Jacek Caban <jacek at codeweavers.com>
Date: Mon Jun 27 17:08:28 2016 +0200
rpcrt4: Moved EnumerateSecurityPackagesW call to helper function.
Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/rpcrt4/rpc_server.c | 64 +++++++++++++++++++++++++++++-------------------
1 file changed, 39 insertions(+), 25 deletions(-)
diff --git a/dlls/rpcrt4/rpc_server.c b/dlls/rpcrt4/rpc_server.c
index 4210258..bb77237 100644
--- a/dlls/rpcrt4/rpc_server.c
+++ b/dlls/rpcrt4/rpc_server.c
@@ -1315,6 +1315,37 @@ struct rpc_server_registered_auth_info
USHORT auth_type;
};
+static RPC_STATUS find_security_package(ULONG auth_type, SecPkgInfoW **packages_buf, SecPkgInfoW **ret)
+{
+ SECURITY_STATUS sec_status;
+ SecPkgInfoW *packages;
+ ULONG package_count;
+ ULONG i;
+
+ sec_status = EnumerateSecurityPackagesW(&package_count, &packages);
+ if (sec_status != SEC_E_OK)
+ {
+ ERR("EnumerateSecurityPackagesW failed with error 0x%08x\n", sec_status);
+ return RPC_S_SEC_PKG_ERROR;
+ }
+
+ for (i = 0; i < package_count; i++)
+ if (packages[i].wRPCID == auth_type)
+ break;
+
+ if (i == package_count)
+ {
+ WARN("unsupported AuthnSvc %u\n", auth_type);
+ FreeContextBuffer(packages);
+ return RPC_S_UNKNOWN_AUTHN_SERVICE;
+ }
+
+ TRACE("found package %s for service %u\n", debugstr_w(packages[i].Name), auth_type);
+ *packages_buf = packages;
+ *ret = packages + i;
+ return RPC_S_OK;
+}
+
RPC_STATUS RPCRT4_ServerGetRegisteredAuthInfo(
USHORT auth_type, CredHandle *cred, TimeStamp *exp, ULONG *max_token)
{
@@ -1381,39 +1412,22 @@ RPC_STATUS WINAPI RpcServerRegisterAuthInfoW( RPC_WSTR ServerPrincName, ULONG Au
SECURITY_STATUS sec_status;
CredHandle cred;
TimeStamp exp;
- ULONG package_count;
- ULONG i;
- PSecPkgInfoW packages;
- ULONG max_token;
struct rpc_server_registered_auth_info *auth_info;
+ SecPkgInfoW *packages, *package;
+ ULONG max_token;
+ RPC_STATUS status;
TRACE("(%s,%u,%p,%p)\n", debugstr_w(ServerPrincName), AuthnSvc, GetKeyFn, Arg);
- sec_status = EnumerateSecurityPackagesW(&package_count, &packages);
- if (sec_status != SEC_E_OK)
- {
- ERR("EnumerateSecurityPackagesW failed with error 0x%08x\n",
- sec_status);
- return RPC_S_SEC_PKG_ERROR;
- }
-
- for (i = 0; i < package_count; i++)
- if (packages[i].wRPCID == AuthnSvc)
- break;
+ status = find_security_package(AuthnSvc, &packages, &package);
+ if (status != RPC_S_OK)
+ return status;
- if (i == package_count)
- {
- WARN("unsupported AuthnSvc %u\n", AuthnSvc);
- FreeContextBuffer(packages);
- return RPC_S_UNKNOWN_AUTHN_SERVICE;
- }
- TRACE("found package %s for service %u\n", debugstr_w(packages[i].Name),
- AuthnSvc);
sec_status = AcquireCredentialsHandleW((SEC_WCHAR *)ServerPrincName,
- packages[i].Name,
+ package->Name,
SECPKG_CRED_INBOUND, NULL, NULL,
NULL, NULL, &cred, &exp);
- max_token = packages[i].cbMaxToken;
+ max_token = package->cbMaxToken;
FreeContextBuffer(packages);
if (sec_status != SEC_E_OK)
return RPC_S_SEC_PKG_ERROR;
More information about the wine-cvs
mailing list