diff --git a/lib/kadm5/randkey_c.c b/lib/kadm5/randkey_c.c index ea4378ffa..76060e294 100644 --- a/lib/kadm5/randkey_c.c +++ b/lib/kadm5/randkey_c.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997 Kungliga Tekniska Högskolan + * Copyright (c) 1997 - 1999 Kungliga Tekniska Högskolan * (Royal Institute of Technology, Stockholm, Sweden). * All rights reserved. * @@ -51,22 +51,37 @@ kadm5_c_randkey_principal(void *server_handle, krb5_storage *sp; unsigned char buf[1024]; int32_t tmp; + krb5_data reply; sp = krb5_storage_from_mem(buf, sizeof(buf)); + if (sp == NULL) + return ENOMEM; krb5_store_int32(sp, kadm_randkey); krb5_store_principal(sp, princ); ret = _kadm5_client_send(context, sp); - sp->seek(sp, SEEK_SET, 0); - ret = _kadm5_client_recv(context, sp); + krb5_storage_free(sp); + if (ret) + return ret; + ret = _kadm5_client_recv(context, &reply); if(ret) - goto out; + return ret; + sp = krb5_storage_from_data(&reply); + if (sp == NULL) { + krb5_data_free (&reply); + return ENOMEM; + } krb5_ret_int32(sp, &tmp); ret = tmp; if(ret == 0){ krb5_keyblock *k; int i; + krb5_ret_int32(sp, &tmp); k = malloc(tmp * sizeof(*k)); + if (k == NULL) { + ret = ENOMEM; + goto out; + } for(i = 0; i < tmp; i++) krb5_ret_keyblock(sp, &k[i]); *n_keys = tmp; @@ -74,6 +89,6 @@ kadm5_c_randkey_principal(void *server_handle, } out: krb5_storage_free(sp); + krb5_data_free (&reply); return ret; } -