[PATCH 11/20] kerberos: Implement SpFreeCredentialsHandle.

Dmitry Timoshkov dmitry at baikal.ru
Thu Jan 18 09:51:39 CST 2018


From: Hans Leidekker <hans at codeweavers.com>

Signed-off-by: Dmitry Timoshkov <dmitry at baikal.ru>
---
 dlls/kerberos/krb5_ap.c | 25 ++++++++++++++++++++++++-
 1 file changed, 24 insertions(+), 1 deletion(-)

diff --git a/dlls/kerberos/krb5_ap.c b/dlls/kerberos/krb5_ap.c
index 3e282a630e..563ac47509 100644
--- a/dlls/kerberos/krb5_ap.c
+++ b/dlls/kerberos/krb5_ap.c
@@ -192,6 +192,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
 
@@ -216,6 +217,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
 
@@ -419,6 +421,27 @@ static NTSTATUS NTAPI kerberos_SpAcquireCredentialsHandle(
 #endif
 }
 
+static NTSTATUS NTAPI kerberos_SpFreeCredentialsHandle( LSA_SEC_HANDLE credential )
+{
+#ifdef SONAME_LIBGSSAPI_KRB5
+    OM_uint32 ret, minor_status;
+    gss_cred_id_t cred_handle;
+
+    TRACE( "(%lx)\n", credential );
+
+    if (!credential) return SEC_E_INVALID_HANDLE;
+    if (!(cred_handle = credhandle_sspi_to_gss( credential ))) return SEC_E_OK;
+
+    ret = pgss_release_cred( &minor_status, &cred_handle );
+    TRACE( "gss_release_cred returned %08x minor status %08x\n", ret, minor_status );
+
+    return status_gss_to_sspi( ret );
+#else
+    FIXME( "(%lx)\n", credential );
+    return SEC_E_UNSUPPORTED_FUNCTION;
+#endif
+}
+
 static NTSTATUS NTAPI kerberos_SpInitLsaModeContext( LSA_SEC_HANDLE credential, LSA_SEC_HANDLE context,
     UNICODE_STRING *target_name, ULONG context_req, ULONG target_data_rep, SecBufferDesc *input,
     LSA_SEC_HANDLE *new_context, SecBufferDesc *output, ULONG *context_attr, TimeStamp *ts_expiry,
@@ -624,7 +647,7 @@ static SECPKG_FUNCTION_TABLE kerberos_table =
     NULL, /* AcceptCredentials */
     kerberos_SpAcquireCredentialsHandle,
     NULL, /* SpQueryCredentialsAttributes */
-    NULL, /* FreeCredentialsHandle */
+    kerberos_SpFreeCredentialsHandle,
     NULL, /* SaveCredentials */
     NULL, /* GetCredentials */
     NULL, /* DeleteCredentials */
-- 
2.15.1




More information about the wine-devel mailing list