[05/10] secur32: Implement FreeCredentialsHandle for Kerberos.

Hans Leidekker hans at codeweavers.com
Mon Oct 23 04:09:20 CDT 2017


Signed-off-by: Hans Leidekker <hans at codeweavers.com>
---
 dlls/secur32/kerberos.c | 26 ++++++++++++++++++++++++--
 1 file changed, 24 insertions(+), 2 deletions(-)

diff --git a/dlls/secur32/kerberos.c b/dlls/secur32/kerberos.c
index 52554c5924..b9eb149746 100644
--- a/dlls/secur32/kerberos.c
+++ b/dlls/secur32/kerberos.c
@@ -52,6 +52,7 @@ MAKE_FUNCPTR(gss_delete_sec_context);
 MAKE_FUNCPTR(gss_import_name);
 MAKE_FUNCPTR(gss_init_sec_context);
 MAKE_FUNCPTR(gss_release_buffer);
+MAKE_FUNCPTR(gss_release_cred);
 MAKE_FUNCPTR(gss_release_name);
 #undef MAKE_FUNCPTR
 
@@ -76,6 +77,7 @@ static BOOL load_gssapi_krb5(void)
     LOAD_FUNCPTR(gss_import_name)
     LOAD_FUNCPTR(gss_init_sec_context)
     LOAD_FUNCPTR(gss_release_buffer)
+    LOAD_FUNCPTR(gss_release_cred)
     LOAD_FUNCPTR(gss_release_name)
 #undef LOAD_FUNCPTR
 
@@ -639,10 +641,30 @@ static SECURITY_STATUS SEC_ENTRY kerberos_VerifySignature(CtxtHandle *phContext,
 /***********************************************************************
  *             FreeCredentialsHandle
  */
-static SECURITY_STATUS SEC_ENTRY kerberos_FreeCredentialsHandle(PCredHandle phCredential)
+static SECURITY_STATUS SEC_ENTRY kerberos_FreeCredentialsHandle( CredHandle *phCredential )
 {
-    FIXME("(%p)\n", phCredential);
+#ifdef SONAME_LIBGSSAPI_KRB5
+    OM_uint32 ret, minor_status;
+    gss_cred_id_t cred_handle;
+    gss_name_t principal;
+
+    TRACE( "(%p)\n", phCredential );
+
+    if (!phCredential) return SEC_E_INVALID_HANDLE;
+    if (!(cred_handle = credhandle_sspi_to_gss( phCredential, &principal ))) return SEC_E_OK;
+
+    if (principal != GSS_C_NO_NAME) pgss_release_name( &minor_status, &principal );
+    ret = pgss_release_cred( &minor_status, &cred_handle );
+    TRACE( "gss_release_cred returned %08x minor status %08x\n", ret, minor_status );
+
+    phCredential->dwUpper = 0;
+    phCredential->dwLower = 0;
+
+    return status_gss_to_sspi( ret );
+#else
+    FIXME( "(%p)\n", phCredential );
     return SEC_E_UNSUPPORTED_FUNCTION;
+#endif
 }
 
 /***********************************************************************
-- 
2.11.0




More information about the wine-patches mailing list