mirror of
https://github.com/samba-team/samba.git
synced 2025-02-26 21:57:41 +03:00
HEIMDAL:lib/krb5: destroy a memory ccache on reinit
BUG: https://bugzilla.samba.org/show_bug.cgi?id=12369 Signed-off-by: Stefan Metzmacher <metze@samba.org> Reviewed-by: Günther Deschner <gd@samba.org> Reviewed-by: Uri Simchoni <uri@samba.org> (cherry picked from commit 2abc3710a8a63327a769ba0482c553ed274b2113)
This commit is contained in:
parent
0b7656b3fa
commit
e6c2921a1c
@ -155,13 +155,47 @@ mcc_gen_new(krb5_context context, krb5_ccache *id)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void KRB5_CALLCONV
|
||||
mcc_destroy_internal(krb5_context context,
|
||||
krb5_mcache *m)
|
||||
{
|
||||
struct link *l;
|
||||
|
||||
if (m->primary_principal != NULL) {
|
||||
krb5_free_principal (context, m->primary_principal);
|
||||
m->primary_principal = NULL;
|
||||
}
|
||||
m->dead = 1;
|
||||
|
||||
l = m->creds;
|
||||
while (l != NULL) {
|
||||
struct link *old;
|
||||
|
||||
krb5_free_cred_contents (context, &l->cred);
|
||||
old = l;
|
||||
l = l->next;
|
||||
free (old);
|
||||
}
|
||||
|
||||
m->creds = NULL;
|
||||
return;
|
||||
}
|
||||
|
||||
static krb5_error_code KRB5_CALLCONV
|
||||
mcc_initialize(krb5_context context,
|
||||
krb5_ccache id,
|
||||
krb5_principal primary_principal)
|
||||
{
|
||||
krb5_mcache *m = MCACHE(id);
|
||||
/*
|
||||
* It's important to destroy any existing
|
||||
* creds here, that matches the baheviour
|
||||
* of all other backends and also the
|
||||
* MEMORY: backend in MIT.
|
||||
*/
|
||||
mcc_destroy_internal(context, m);
|
||||
m->dead = 0;
|
||||
m->kdc_offset = 0;
|
||||
m->mtime = time(NULL);
|
||||
return krb5_copy_principal (context,
|
||||
primary_principal,
|
||||
@ -195,7 +229,6 @@ mcc_destroy(krb5_context context,
|
||||
krb5_ccache id)
|
||||
{
|
||||
krb5_mcache **n, *m = MCACHE(id);
|
||||
struct link *l;
|
||||
|
||||
if (m->refcnt == 0)
|
||||
krb5_abortx(context, "mcc_destroy: refcnt already 0");
|
||||
@ -211,22 +244,7 @@ mcc_destroy(krb5_context context,
|
||||
}
|
||||
}
|
||||
HEIMDAL_MUTEX_unlock(&mcc_mutex);
|
||||
if (m->primary_principal != NULL) {
|
||||
krb5_free_principal (context, m->primary_principal);
|
||||
m->primary_principal = NULL;
|
||||
}
|
||||
m->dead = 1;
|
||||
|
||||
l = m->creds;
|
||||
while (l != NULL) {
|
||||
struct link *old;
|
||||
|
||||
krb5_free_cred_contents (context, &l->cred);
|
||||
old = l;
|
||||
l = l->next;
|
||||
free (old);
|
||||
}
|
||||
m->creds = NULL;
|
||||
mcc_destroy_internal(context, m);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user