Fixed dumb bug that caused keys to not accumulate in history.

This commit is contained in:
Nicolas Williams
2011-07-18 15:45:15 -05:00
parent 53ea8ac59b
commit e7ea698366

View File

@@ -32,6 +32,7 @@
*/ */
#include "kadm5_locl.h" #include "kadm5_locl.h"
#include <assert.h>
RCSID("$Id$"); RCSID("$Id$");
@@ -68,7 +69,7 @@ static
krb5_error_code krb5_error_code
copy_keyset_to_kadm5(kadm5_server_context *context, krb5_kvno kvno, copy_keyset_to_kadm5(kadm5_server_context *context, krb5_kvno kvno,
size_t n_keys, Key *keys, krb5_salt *salt, size_t n_keys, Key *keys, krb5_salt *salt,
size_t out_offset, kadm5_principal_ent_t out) kadm5_principal_ent_t out)
{ {
size_t i; size_t i;
Key *key; Key *key;
@@ -78,7 +79,7 @@ copy_keyset_to_kadm5(kadm5_server_context *context, krb5_kvno kvno,
for (i = 0; i < n_keys; i++) { for (i = 0; i < n_keys; i++) {
key = &keys[i]; key = &keys[i];
kd = &out->key_data[out_offset + i]; kd = &out->key_data[out->n_key_data];
kd->key_data_ver = 2; kd->key_data_ver = 2;
kd->key_data_kvno = kvno; kd->key_data_kvno = kvno;
kd->key_data_type[0] = key->key.keytype; kd->key_data_type[0] = key->key.keytype;
@@ -109,7 +110,7 @@ copy_keyset_to_kadm5(kadm5_server_context *context, krb5_kvno kvno,
break; break;
} }
memcpy(kd->key_data_contents[1], sp->data, kd->key_data_length[1]); memcpy(kd->key_data_contents[1], sp->data, kd->key_data_length[1]);
out->n_key_data = i + 1; out->n_key_data++;
} }
return ret; return ret;
@@ -236,7 +237,6 @@ kadm5_s_get_principal(void *server_handle,
if(mask & KADM5_KEY_DATA){ if(mask & KADM5_KEY_DATA){
size_t i; size_t i;
size_t n_keys = ent.entry.keys.len; size_t n_keys = ent.entry.keys.len;
size_t offset = ent.entry.keys.len;
krb5_salt salt; krb5_salt salt;
HDB_extension *ext; HDB_extension *ext;
HDB_Ext_KeySet *hist_keys = NULL; HDB_Ext_KeySet *hist_keys = NULL;
@@ -253,20 +253,21 @@ kadm5_s_get_principal(void *server_handle,
ret = ENOMEM; ret = ENOMEM;
goto out; goto out;
} }
out->n_key_data = 0;
ret = copy_keyset_to_kadm5(context, ent.entry.kvno, ent.entry.keys.len, ret = copy_keyset_to_kadm5(context, ent.entry.kvno, ent.entry.keys.len,
ent.entry.keys.val, &salt, 0, out); ent.entry.keys.val, &salt, out);
if (ret) if (ret)
goto out; goto out;
for (i = 0; hist_keys != NULL && i < hist_keys->len; i++) { for (i = 0; hist_keys != NULL && i < hist_keys->len; i++) {
ret = copy_keyset_to_kadm5(context, hist_keys->val[i].kvno, ret = copy_keyset_to_kadm5(context, hist_keys->val[i].kvno,
hist_keys->val[i].keys.len, hist_keys->val[i].keys.len,
hist_keys->val[i].keys.val, hist_keys->val[i].keys.val,
&salt, offset, out); &salt, out);
if (ret) if (ret)
goto out; goto out;
offset += hist_keys->val[i].keys.len;
} }
krb5_free_salt(context->context, salt); krb5_free_salt(context->context, salt);
assert( out->n_key_data == n_keys );
} }
if(ret){ if(ret){
kadm5_free_principal_ent(context, out); kadm5_free_principal_ent(context, out);