From 9fbbc4cf85e2069193d538aa04387eda4c6367a8 Mon Sep 17 00:00:00 2001 From: Nicolas Williams Date: Mon, 16 Mar 2015 10:40:10 -0500 Subject: [PATCH] Refactor capath_worker() a bit more --- lib/krb5/get_cred.c | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/lib/krb5/get_cred.c b/lib/krb5/get_cred.c index 96ac03c42..d417eef2e 100644 --- a/lib/krb5/get_cred.c +++ b/lib/krb5/get_cred.c @@ -796,16 +796,15 @@ get_cred_kdc_capath_worker(krb5_context context, impersonate_principal, second_ticket, *out_creds); - if (ret == 0 - && !krb5_principal_compare(context, in_creds->server, - (*out_creds)->server)) { - krb5_free_cred_contents(context, *out_creds); + krb5_free_cred_contents(context, &tgts); + if (ret == 0 && + !krb5_principal_compare(context, in_creds->server, + (*out_creds)->server)) { ret = KRB5KDC_ERR_S_PRINCIPAL_UNKNOWN; } if (ret == 0 && ok_as_delegate == 0) (*out_creds)->flags.b.ok_as_delegate = 0; - krb5_free_cred_contents(context, &tgts); goto out; } } @@ -863,11 +862,19 @@ get_cred_kdc_capath_worker(krb5_context context, ret = get_cred_kdc_address (context, ccache, flags, NULL, in_creds, tgt, impersonate_principal, second_ticket, *out_creds); + if (ret == 0 && + !krb5_principal_compare(context, in_creds->server, + (*out_creds)->server)) { + krb5_free_cred_contents(context, *out_creds); + ret = KRB5KDC_ERR_S_PRINCIPAL_UNKNOWN; + } + if (ret == 0 && ok_as_delegate == 0) + (*out_creds)->flags.b.ok_as_delegate = 0; out: if (ret) { - free (*out_creds); - *out_creds = NULL; + krb5_free_creds(context, *out_creds); + *out_creds = NULL; } if (tmp_creds.server) krb5_free_principal(context, tmp_creds.server);