summaryrefslogtreecommitdiffstats
path: root/src/kadmin/dbutil
diff options
context:
space:
mode:
authorGreg Hudson <ghudson@mit.edu>2010-01-28 21:39:31 +0000
committerGreg Hudson <ghudson@mit.edu>2010-01-28 21:39:31 +0000
commitf0e084261aec6be2d508b33f960d38d19f0d0345 (patch)
tree6317db1b8cab2e9e99ce4d3f0a8f8d3cb259b239 /src/kadmin/dbutil
parent0b929b1f34ea96096f1fbb3736bc33ff3375afa1 (diff)
downloadkrb5-f0e084261aec6be2d508b33f960d38d19f0d0345.tar.gz
krb5-f0e084261aec6be2d508b33f960d38d19f0d0345.tar.xz
krb5-f0e084261aec6be2d508b33f960d38d19f0d0345.zip
Handle migration from pre-1.7 databases with master key kvno != 1
krb5_dbe_lookup_mkvno assumes an mkvno of 1 for entries with no explicit tl_data. We've seen at least one pre-1.7 KDB with a master kvno of 0, violating this assumption. Fix this as follows: * krb5_dbe_lookup_mkvno outputs 0 instead of 1 if no tl_data exists. * A new function krb5_dbe_get_mkvno translates this 0 value to the minimum version number in the mkey_list. (krb5_dbe_lookup_mkvno cannot do this as it doesn't take the mkey_list as a parameter.) * Call sites to krb5_dbe_lookup_mkvno are converted to krb5_dbe_get_mkvno, except for an LDAP case where it is acceptable to store 0 if the mkvno is unknown. ticket: 6650 target_version: 1.7.1 tags: pullup git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@23676 dc483132-0cff-0310-8789-dd5450dbe970
Diffstat (limited to 'src/kadmin/dbutil')
-rw-r--r--src/kadmin/dbutil/kdb5_mkey.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/src/kadmin/dbutil/kdb5_mkey.c b/src/kadmin/dbutil/kdb5_mkey.c
index 9ea7e5e0f..b2ac379df 100644
--- a/src/kadmin/dbutil/kdb5_mkey.c
+++ b/src/kadmin/dbutil/kdb5_mkey.c
@@ -866,7 +866,7 @@ update_princ_encryption_1(void *cb, krb5_db_entry *ent)
goto skip;
}
p->re_match_count++;
- retval = krb5_dbe_lookup_mkvno(util_context, ent, &old_mkvno);
+ retval = krb5_dbe_get_mkvno(util_context, ent, master_keylist, &old_mkvno);
if (retval) {
com_err(progname, retval,
"determining master key used for principal '%s'",
@@ -1137,7 +1137,7 @@ find_mkvnos_in_use(krb5_pointer ptr,
args = (struct purge_args *) ptr;
- retval = krb5_dbe_lookup_mkvno(args->kcontext, entry, &mkvno);
+ retval = krb5_dbe_get_mkvno(args->kcontext, entry, master_keylist, &mkvno);
if (retval)
return (retval);
@@ -1193,6 +1193,12 @@ kdb5_purge_mkeys(int argc, char *argv[])
}
}
+ if (master_keylist == NULL) {
+ com_err(progname, retval, "master keylist not initialized");
+ exit_status++;
+ return;
+ }
+
/* assemble & parse the master key name */
if ((retval = krb5_db_setup_mkey_name(util_context,
global_params.mkey_name,