Path: blob/main/crypto/heimdal/lib/gssapi/krb5/release_cred.c
34923 views
/*1* Copyright (c) 1997-2003 Kungliga Tekniska Högskolan2* (Royal Institute of Technology, Stockholm, Sweden).3* All rights reserved.4*5* Redistribution and use in source and binary forms, with or without6* modification, are permitted provided that the following conditions7* are met:8*9* 1. Redistributions of source code must retain the above copyright10* notice, this list of conditions and the following disclaimer.11*12* 2. Redistributions in binary form must reproduce the above copyright13* notice, this list of conditions and the following disclaimer in the14* documentation and/or other materials provided with the distribution.15*16* 3. Neither the name of the Institute nor the names of its contributors17* may be used to endorse or promote products derived from this software18* without specific prior written permission.19*20* THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND21* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE22* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE23* ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE24* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL25* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS26* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)27* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT28* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY29* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF30* SUCH DAMAGE.31*/3233#include "gsskrb5_locl.h"3435OM_uint32 GSSAPI_CALLCONV _gsskrb5_release_cred36(OM_uint32 * minor_status,37gss_cred_id_t * cred_handle38)39{40krb5_context context;41gsskrb5_cred cred;42OM_uint32 junk;4344*minor_status = 0;4546if (*cred_handle == NULL)47return GSS_S_COMPLETE;4849cred = (gsskrb5_cred)*cred_handle;50*cred_handle = GSS_C_NO_CREDENTIAL;5152GSSAPI_KRB5_INIT (&context);5354HEIMDAL_MUTEX_lock(&cred->cred_id_mutex);5556if (cred->principal != NULL)57krb5_free_principal(context, cred->principal);58if (cred->keytab != NULL)59krb5_kt_close(context, cred->keytab);60if (cred->ccache != NULL) {61if (cred->cred_flags & GSS_CF_DESTROY_CRED_ON_RELEASE)62krb5_cc_destroy(context, cred->ccache);63else64krb5_cc_close(context, cred->ccache);65}66gss_release_oid_set(&junk, &cred->mechanisms);67if (cred->enctypes)68free(cred->enctypes);69HEIMDAL_MUTEX_unlock(&cred->cred_id_mutex);70HEIMDAL_MUTEX_destroy(&cred->cred_id_mutex);71memset(cred, 0, sizeof(*cred));72free(cred);73return GSS_S_COMPLETE;74}75767778