(krb5_string_to_key_derived): leak less memory

git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@10118 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
Johan Danielsson
2001-06-18 16:55:41 +00:00
parent 6e224ff15f
commit dbe9dbe36e

View File

@@ -1725,7 +1725,7 @@ ARCFOUR_subencrypt(krb5_context context,
krb5_keyblock kb; krb5_keyblock kb;
unsigned char t[4]; unsigned char t[4];
RC4_KEY rc4_key; RC4_KEY rc4_key;
char *cdata = (char *)data; unsigned char *cdata = data;
unsigned char k1_c_data[16], k2_c_data[16], k3_c_data[16]; unsigned char k1_c_data[16], k2_c_data[16], k3_c_data[16];
t[0] = (usage >> 0) & 0xFF; t[0] = (usage >> 0) & 0xFF;
@@ -1781,7 +1781,7 @@ ARCFOUR_subdecrypt(krb5_context context,
krb5_keyblock kb; krb5_keyblock kb;
unsigned char t[4]; unsigned char t[4];
RC4_KEY rc4_key; RC4_KEY rc4_key;
char *cdata = (char *)data; unsigned char *cdata = data;
unsigned char k1_c_data[16], k2_c_data[16], k3_c_data[16]; unsigned char k1_c_data[16], k2_c_data[16], k3_c_data[16];
unsigned char cksum_data[16]; unsigned char cksum_data[16];
@@ -3000,6 +3000,7 @@ krb5_string_to_key_derived(krb5_context context,
struct encryption_type *et = _find_enctype(etype); struct encryption_type *et = _find_enctype(etype);
krb5_error_code ret; krb5_error_code ret;
struct key_data kd; struct key_data kd;
size_t keylen = et->keytype->bits / 8;
u_char *tmp; u_char *tmp;
if(et == NULL) { if(et == NULL) {
@@ -3008,13 +3009,28 @@ krb5_string_to_key_derived(krb5_context context,
return KRB5_PROG_ETYPE_NOSUPP; return KRB5_PROG_ETYPE_NOSUPP;
} }
ALLOC(kd.key, 1); ALLOC(kd.key, 1);
if(kd.key == NULL) {
krb5_set_error_string (context, "malloc: out of memory");
return ENOMEM;
}
ret = krb5_data_alloc(&kd.key->keyvalue, et->keytype->size);
if(ret) {
free(kd.key);
return ret;
}
kd.key->keytype = etype; kd.key->keytype = etype;
tmp = malloc (et->keytype->bits / 8); tmp = malloc (keylen);
_krb5_n_fold(str, len, tmp, et->keytype->bits / 8); if(tmp == NULL) {
krb5_data_alloc(&kd.key->keyvalue, et->keytype->size); krb5_free_keyblock(context, kd.key);
krb5_set_error_string (context, "malloc: out of memory");
return ENOMEM;
}
_krb5_n_fold(str, len, tmp, keylen);
kd.schedule = NULL; kd.schedule = NULL;
DES3_postproc (context, tmp, et->keytype->bits / 8, &kd); /* XXX */ DES3_postproc (context, tmp, keylen, &kd); /* XXX */
ret = derive_key(context, memset(tmp, 0, keylen);
free(tmp);
ret = derive_key(context,
et, et,
&kd, &kd,
"kerberos", /* XXX well known constant */ "kerberos", /* XXX well known constant */