void
k5_free_data_ptr_list(krb5_data **list);
+void
+k5_zapfree_pa_data(krb5_pa_data **val);
+
void KRB5_CALLCONV
krb5int_free_data_list(krb5_context context, krb5_data *data);
krb5_free_keyblock(kdc_context, s->armor_key);
if (s->strengthen_key)
krb5_free_keyblock(kdc_context, s->strengthen_key);
- krb5_free_pa_data(NULL, s->in_cookie_padata);
- krb5_free_pa_data(NULL, s->out_cookie_padata);
+ k5_zapfree_pa_data(s->in_cookie_padata);
+ k5_zapfree_pa_data(s->out_cookie_padata);
free(s);
}
cookie->data = NULL;
cleanup:
- krb5_free_data_contents(context, &plain);
+ zapfree(plain.data, plain.length);
krb5_free_keyblock(context, key);
k5_free_secure_cookie(context, cookie);
return 0;
*cookie_out = pa;
cleanup:
- krb5_free_data(context, der_cookie);
+ krb5_free_keyblock(context, key);
+ if (der_cookie != NULL) {
+ zapfree(der_cookie->data, der_cookie->length);
+ free(der_cookie);
+ }
krb5_free_data_contents(context, &enc.ciphertext);
return ret;
}
free(val);
}
+void
+k5_zapfree_pa_data(krb5_pa_data **val)
+{
+ krb5_pa_data **pa;
+
+ if (val == NULL)
+ return;
+ for (pa = val; *pa != NULL; pa++) {
+ zapfree((*pa)->contents, (*pa)->length);
+ zapfree(*pa, sizeof(**pa));
+ }
+ free(val);
+}
+
void KRB5_CALLCONV
krb5_free_pa_data(krb5_context context, krb5_pa_data **val)
{
{
if (val == NULL)
return;
- krb5_free_pa_data(context, val->data);
+ k5_zapfree_pa_data(val->data);
free(val);
}