Fixed dumb bug that caused keys to not accumulate in history.
This commit is contained in:
@@ -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);
|
||||||
|
Reference in New Issue
Block a user