aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarc Horowitz <marc@mit.edu>1998-10-06 08:17:23 +0000
committerMarc Horowitz <marc@mit.edu>1998-10-06 08:17:23 +0000
commitd4e2572f63011cc074c616239faccee192d15e95 (patch)
tree44e67b21b11ca67b041df040f4f61f78d48a8849
parentca5b4dfda3050b775cfbc4f7809ddc3e2a4ee067 (diff)
downloadkrb5-d4e2572f63011cc074c616239faccee192d15e95.zip
krb5-d4e2572f63011cc074c616239faccee192d15e95.tar.gz
krb5-d4e2572f63011cc074c616239faccee192d15e95.tar.bz2
plug memory leaks
git-svn-id: svn://anonsvn.mit.edu/krb5/branches/marc-3des@10969 dc483132-0cff-0310-8789-dd5450dbe970
-rw-r--r--src/kdc/kdc_preauth.c19
-rw-r--r--src/lib/gssapi/krb5/accept_sec_context.c47
-rw-r--r--src/lib/gssapi/krb5/init_sec_context.c3
3 files changed, 45 insertions, 24 deletions
diff --git a/src/kdc/kdc_preauth.c b/src/kdc/kdc_preauth.c
index 25e1cd8..6809e04 100644
--- a/src/kdc/kdc_preauth.c
+++ b/src/kdc/kdc_preauth.c
@@ -499,6 +499,7 @@ get_etype_info(context, request, client, server, pa_data)
goto cleanup;
pa_data->contents = scratch->data;
pa_data->length = scratch->length;
+ free(scratch);
retval = 0;
@@ -672,6 +673,13 @@ get_sam_edata(context, request, client, server, pa_data)
break;
}
}
+
+ krb5_princ_component(kdc_context,newp,probeslot)->data = 0;
+ krb5_princ_component(kdc_context,newp,probeslot)->length = 0;
+ krb5_princ_size(context, newp)--;
+
+ krb5_free_principal(kdc_context, newp);
+
/* if sc.sam_type is set, it worked */
if (sc.sam_type) {
/* so use assoc to get the key out! */
@@ -684,9 +692,10 @@ get_sam_edata(context, request, client, server, pa_data)
&assoc_key);
if (retval) {
char *sname;
- krb5_unparse_name(kdc_context, newp, &sname);
+ krb5_unparse_name(kdc_context, request->client, &sname);
com_err("krb5kdc", retval,
"snk4 finding the enctype and key <%s>", sname);
+ free(sname);
return retval;
}
/* convert server.key into a real key */
@@ -701,14 +710,10 @@ get_sam_edata(context, request, client, server, pa_data)
}
/* now we can use encrypting_key... */
}
- } else
+ } else {
/* SAM is not an option - so don't return as hint */
return KRB5_PREAUTH_BAD_TYPE;
-
- krb5_princ_component(kdc_context,newp,probeslot)->data = 0;
- krb5_princ_component(kdc_context,newp,probeslot)->length = 0;
- krb5_princ_size(context, newp)--;
- krb5_free_principal(kdc_context, newp);
+ }
}
sc.magic = KV5M_SAM_CHALLENGE;
sc.sam_flags = KRB5_SAM_USE_SAD_AS_KEY;
diff --git a/src/lib/gssapi/krb5/accept_sec_context.c b/src/lib/gssapi/krb5/accept_sec_context.c
index efd3f7d..a26ffc7 100644
--- a/src/lib/gssapi/krb5/accept_sec_context.c
+++ b/src/lib/gssapi/krb5/accept_sec_context.c
@@ -214,6 +214,7 @@ krb5_gss_accept_sec_context(minor_status, context_handle,
mic.data = 0;
ap_req.data = 0;
ap_rep.data = 0;
+ cksumdata.data = 0;
if (mech_type)
*mech_type = GSS_C_NULL_OID;
@@ -652,6 +653,9 @@ krb5_gss_accept_sec_context(minor_status, context_handle,
goto fail;
}
+ free(cksumdata.data);
+ cksumdata.data = 0;
+
if (!valid) {
code = 0;
major_status = GSS_S_BAD_SIG;
@@ -830,6 +834,9 @@ krb5_gss_accept_sec_context(minor_status, context_handle,
ptr += (2+mic.length);
+ free(cksumdata.data);
+ cksumdata.data = 0;
+
/* gss krb5 v2 */
} else {
/* gss krb5 v1 */
@@ -902,25 +909,31 @@ krb5_gss_accept_sec_context(minor_status, context_handle,
/* finally! */
- if (authdat)
- krb5_free_authenticator(context, authdat);
*minor_status = 0;
- return(GSS_S_COMPLETE);
+ major_status = GSS_S_COMPLETE;
fail:
+ if (ctypes)
+ free(ctypes);
if (authdat)
krb5_free_authenticator(context, authdat);
+ if (reqcksum.contents)
+ xfree(reqcksum.contents);
+ if (ap_rep.data)
+ xfree(ap_rep.data);
+ if (mic.data)
+ xfree(mic.data);
+ if (cksumdata.data)
+ xfree(cksumdata.data);
+
+ if (!GSS_ERROR(major_status))
+ return(major_status);
+
+ /* from here on is the real "fail" code */
+
if (ctx)
(void) krb5_gss_delete_sec_context(minor_status,
(gss_ctx_id_t *) &ctx, NULL);
- if (token.value)
- xfree(token.value);
- if (name) {
- (void) kg_delete_name((gss_name_t) name);
- krb5_free_principal(context, name);
- }
- if (reqcksum.contents)
- xfree(reqcksum.contents);
if (deleg_cred) { /* free memory associated with the deleg credential */
if (deleg_cred->ccache)
(void)krb5_cc_close(context, deleg_cred->ccache);
@@ -928,12 +941,12 @@ krb5_gss_accept_sec_context(minor_status, context_handle,
krb5_free_principal(context, deleg_cred->princ);
xfree(deleg_cred);
}
- if (ap_req.data && gsskrb5_vers == 2000)
- xfree(ap_req.data);
- if (ap_rep.data)
- xfree(ap_rep.data);
- if (mic.data)
- xfree(mic.data);
+ if (token.value)
+ xfree(token.value);
+ if (name) {
+ (void) kg_delete_name((gss_name_t) name);
+ krb5_free_principal(context, name);
+ }
*minor_status = code;
diff --git a/src/lib/gssapi/krb5/init_sec_context.c b/src/lib/gssapi/krb5/init_sec_context.c
index 9a1c523..06ef35d 100644
--- a/src/lib/gssapi/krb5/init_sec_context.c
+++ b/src/lib/gssapi/krb5/init_sec_context.c
@@ -855,12 +855,15 @@ krb5_gss_init_sec_context(minor_status, claimant_cred_handle,
kg2_parse_token(minor_status, ptr, token_length,
&resp_flags, &nctypes, &ctypes,
0, NULL, &ap_rep, &mic))) {
+ free(ctypes);
(void)krb5_gss_delete_sec_context(&dummy, context_handle, NULL);
return(major_status);
}
kg2_intersect_ctypes(&ctx->nctypes, ctx->ctypes, nctypes, ctypes);
+ free(ctypes);
+
if (ctx->nctypes == 0) {
code = KG_NO_CTYPES;
goto fail;