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