Plug double frees, patch orignally from Matthias Dieter Wallnöfer

This commit is contained in:
Love Hornquist Astrand
2010-06-29 08:12:55 -07:00
parent 7639f83561
commit 4a6a9d026b

View File

@@ -939,9 +939,9 @@ get_cred_kdc_referral(krb5_context context,
ret = EINVAL; ret = EINVAL;
if (ret) { if (ret) {
ret = get_cred_kdc_address (context, ccache, flags, NULL, ret = get_cred_kdc_address(context, ccache, flags, NULL,
&referral, &tgt, impersonate_principal, &referral, &tgt, impersonate_principal,
second_ticket, &ticket); second_ticket, &ticket);
if (ret) if (ret)
goto out; goto out;
} }
@@ -956,8 +956,8 @@ get_cred_kdc_referral(krb5_context context,
krb5_set_error_message(context, KRB5KRB_AP_ERR_NOT_US, krb5_set_error_message(context, KRB5KRB_AP_ERR_NOT_US,
N_("Got back an non krbtgt " N_("Got back an non krbtgt "
"ticket referrals", "")); "ticket referrals", ""));
krb5_free_cred_contents(context, &ticket); ret = KRB5KRB_AP_ERR_NOT_US;
return KRB5KRB_AP_ERR_NOT_US; goto out;
} }
referral_realm = ticket.server->name.name_string.val[1]; referral_realm = ticket.server->name.name_string.val[1];
@@ -979,8 +979,8 @@ get_cred_kdc_referral(krb5_context context,
"loops back to realm %s", ""), "loops back to realm %s", ""),
tgt.server->realm, tgt.server->realm,
referral_realm); referral_realm);
krb5_free_cred_contents(context, &ticket); ret = KRB5_GET_IN_TKT_LOOP;
return KRB5_GET_IN_TKT_LOOP; goto out;
} }
tickets++; tickets++;
} }
@@ -996,10 +996,8 @@ get_cred_kdc_referral(krb5_context context,
} }
ret = add_cred(context, &ticket, ret_tgts); ret = add_cred(context, &ticket, ret_tgts);
if (ret) { if (ret)
krb5_free_cred_contents(context, &ticket);
goto out; goto out;
}
/* try realm in the referral */ /* try realm in the referral */
ret = krb5_principal_set_realm(context, ret = krb5_principal_set_realm(context,
@@ -1017,6 +1015,7 @@ get_cred_kdc_referral(krb5_context context,
out: out:
krb5_free_principal(context, referral.server); krb5_free_principal(context, referral.server);
krb5_free_cred_contents(context, &tgt); krb5_free_cred_contents(context, &tgt);
krb5_free_cred_contents(context, &ticket);
return ret; return ret;
} }