be more careful of not returning creds at all when an error is

returned


git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@8701 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
Assar Westerlund
2000-07-19 01:25:59 +00:00
parent 8ea704a5f9
commit 49df34b1d3

View File

@@ -277,6 +277,7 @@ init_tgs_req (krb5_context context,
} }
fail: fail:
if (ret) if (ret)
/* XXX - don't free addresses? */
free_TGS_REQ (t); free_TGS_REQ (t);
return ret; return ret;
} }
@@ -647,8 +648,10 @@ get_cred_from_kdc_flags(krb5_context context,
else { else {
ret = get_cred_kdc_la(context, ccache, flags, ret = get_cred_kdc_la(context, ccache, flags,
in_creds, &tgts, *out_creds); in_creds, &tgts, *out_creds);
if (ret) if (ret) {
free (*out_creds); free (*out_creds);
*out_creds = NULL;
}
} }
krb5_free_creds_contents(context, &tgts); krb5_free_creds_contents(context, &tgts);
krb5_free_principal(context, tmp_creds.server); krb5_free_principal(context, tmp_creds.server);
@@ -703,8 +706,10 @@ get_cred_from_kdc_flags(krb5_context context,
else { else {
ret = get_cred_kdc_la(context, ccache, flags, ret = get_cred_kdc_la(context, ccache, flags,
in_creds, tgt, *out_creds); in_creds, tgt, *out_creds);
if (ret) if (ret) {
free (*out_creds); free (*out_creds);
*out_creds = NULL;
}
} }
krb5_free_creds(context, tgt); krb5_free_creds(context, tgt);
return ret; return ret;
@@ -734,20 +739,24 @@ krb5_get_credentials_with_flags(krb5_context context,
{ {
krb5_error_code ret; krb5_error_code ret;
krb5_creds **tgts; krb5_creds **tgts;
krb5_creds *res_creds;
int i; int i;
*out_creds = calloc(1, sizeof(**out_creds)); *out_creds = NULL;
if (*out_creds == NULL) res_creds = calloc(1, sizeof(*res_creds));
if (res_creds == NULL)
return ENOMEM; return ENOMEM;
ret = krb5_cc_retrieve_cred(context, ret = krb5_cc_retrieve_cred(context,
ccache, ccache,
in_creds->session.keytype ? in_creds->session.keytype ?
KRB5_TC_MATCH_KEYTYPE : 0, KRB5_TC_MATCH_KEYTYPE : 0,
in_creds, *out_creds); in_creds, res_creds);
if(ret == 0) if(ret == 0) {
*out_creds = res_creds;
return 0; return 0;
free(*out_creds); }
free(res_creds);
if(ret != KRB5_CC_END) if(ret != KRB5_CC_END)
return ret; return ret;
if(options & KRB5_GC_CACHED) if(options & KRB5_GC_CACHED)
@@ -757,7 +766,7 @@ krb5_get_credentials_with_flags(krb5_context context,
tgts = NULL; tgts = NULL;
ret = get_cred_from_kdc_flags(context, flags, ccache, ret = get_cred_from_kdc_flags(context, flags, ccache,
in_creds, out_creds, &tgts); in_creds, out_creds, &tgts);
for(i = 0; tgts && tgts[i]; i++){ for(i = 0; tgts && tgts[i]; i++) {
krb5_cc_store_cred(context, ccache, tgts[i]); krb5_cc_store_cred(context, ccache, tgts[i]);
krb5_free_creds(context, tgts[i]); krb5_free_creds(context, tgts[i]);
} }