summaryrefslogtreecommitdiffstats
path: root/src/kadmin/server/adm_server.c
diff options
context:
space:
mode:
authorTheodore Tso <tytso@mit.edu>1994-09-15 04:22:13 +0000
committerTheodore Tso <tytso@mit.edu>1994-09-15 04:22:13 +0000
commit261f3efe59a66483e5b4110b7d745ee74302588b (patch)
tree3940a702089cb13b39d3a5f582b50afccae2cc3e /src/kadmin/server/adm_server.c
parentdec11ffac772c31a257bf94e43c2df527c3df33e (diff)
Fix a number of pointer aliasing bugs
Make sure the master key version number is propgated correctly for new keys. Fixed bug where process_client tried to free an automatic variable. git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@4237 dc483132-0cff-0310-8789-dd5450dbe970
Diffstat (limited to 'src/kadmin/server/adm_server.c')
-rw-r--r--src/kadmin/server/adm_server.c21
1 files changed, 20 insertions, 1 deletions
diff --git a/src/kadmin/server/adm_server.c b/src/kadmin/server/adm_server.c
index 01b91c05f3..a408331ffa 100644
--- a/src/kadmin/server/adm_server.c
+++ b/src/kadmin/server/adm_server.c
@@ -73,6 +73,8 @@ global_client_server_info client_server_info;
int classification; /* default = Unclassified */
#endif
+krb5_db_entry master_entry;
+
krb5_flags NEW_ATTRIBUTES;
cleanexit(val)
@@ -287,7 +289,24 @@ krb5_keyblock *masterkeyblock;
(void) krb5_db_fini();
return(retval);
}
-
+
+/*
+ * fetch the master database entry, and hold on to it.
+ */
+ number_of_entries = 1;
+ if (retval = krb5_db_get_principal(masterkeyname, &master_entry,
+ &number_of_entries, &more)) {
+ return(retval);
+ }
+ if (number_of_entries != 1) {
+ if (number_of_entries)
+ krb5_db_free_principal(&master_entry, number_of_entries);
+ return(KRB5_KDB_NOMASTERKEY);
+ } else if (more) {
+ krb5_db_free_principal(&master_entry, number_of_entries);
+ return(KRB5KDC_ERR_PRINCIPAL_NOT_UNIQUE);
+ }
+
/*
fetch the TGS key, and hold onto it; this is an efficiency hack
the master key name here is from the master_princ global,