Hans Leidekker : kerberos: Implement SpFreeCredentialsHandle.

Alexandre Julliard julliard at winehq.org
Wed Jan 24 16:02:32 CST 2018


Module: wine
Branch: master
Commit: 5aaeaa60c2a598a4378437b13b447579fc02f8b3
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=5aaeaa60c2a598a4378437b13b447579fc02f8b3

Author: Hans Leidekker <hans at codeweavers.com>
Date:   Thu Jan 18 23:51:39 2018 +0800

kerberos: Implement SpFreeCredentialsHandle.

Signed-off-by: Hans Leidekker <hans at codeweavers.com>
Signed-off-by: Dmitry Timoshkov <dmitry at baikal.ru>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 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 4aadd77..b467119 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 */




More information about the wine-cvs mailing list