Fix memory leak

This commit is contained in:
Viktor Dukhovni
2015-11-13 18:26:17 +00:00
committed by Viktor Dukhovni
parent c3eb3341c2
commit 54d37fdba6

View File

@@ -1644,7 +1644,7 @@ server_lookup:
ret = _kdc_db_fetch(context, config, sp, HDB_F_GET_SERVER | flags, ret = _kdc_db_fetch(context, config, sp, HDB_F_GET_SERVER | flags,
NULL, NULL, &server); NULL, NULL, &server);
if(ret == HDB_ERR_NOT_FOUND_HERE) { if (ret == HDB_ERR_NOT_FOUND_HERE) {
kdc_log(context, config, 5, "target %s does not have secrets at this KDC, need to proxy", sp); kdc_log(context, config, 5, "target %s does not have secrets at this KDC, need to proxy", sp);
goto out; goto out;
} else if (ret == HDB_ERR_WRONG_REALM) { } else if (ret == HDB_ERR_WRONG_REALM) {
@@ -1673,13 +1673,13 @@ server_lookup:
goto out; goto out;
goto server_lookup; goto server_lookup;
} else if(ret){ } else if (ret) {
const char *new_rlm, *msg; const char *new_rlm, *msg;
Realm req_rlm; Realm req_rlm;
krb5_realm *realms; krb5_realm *realms;
if ((req_rlm = get_krbtgt_realm(&sp->name)) != NULL) { if ((req_rlm = get_krbtgt_realm(&sp->name)) != NULL) {
if(nloop++ < 2) { if (nloop++ < 2) {
new_rlm = find_rpath(context, tgt->crealm, req_rlm); new_rlm = find_rpath(context, tgt->crealm, req_rlm);
if(new_rlm) { if(new_rlm) {
kdc_log(context, config, 5, "krbtgt for realm %s " kdc_log(context, config, 5, "krbtgt for realm %s "
@@ -1699,7 +1699,7 @@ server_lookup:
goto server_lookup; goto server_lookup;
} }
} }
} else if(need_referral(context, config, &b->kdc_options, sp, &realms)) { } else if (need_referral(context, config, &b->kdc_options, sp, &realms)) {
if (strcmp(realms[0], sp->realm) != 0) { if (strcmp(realms[0], sp->realm) != 0) {
kdc_log(context, config, 5, kdc_log(context, config, 5,
"Returning a referral to realm %s for " "Returning a referral to realm %s for "
@@ -1710,8 +1710,10 @@ server_lookup:
krb5_make_principal(context, &sp, r, KRB5_TGS_NAME, krb5_make_principal(context, &sp, r, KRB5_TGS_NAME,
realms[0], NULL); realms[0], NULL);
ret = krb5_unparse_name(context, sp, &spn); ret = krb5_unparse_name(context, sp, &spn);
if (ret) if (ret) {
krb5_free_host_realm(context, realms);
goto out; goto out;
}
if (ref_realm) if (ref_realm)
free(ref_realm); free(ref_realm);