aboutsummaryrefslogtreecommitdiff
path: root/src/kdc/kdc_util.c
diff options
context:
space:
mode:
authorPaul Park <pjpark@mit.edu>1995-08-15 18:43:33 +0000
committerPaul Park <pjpark@mit.edu>1995-08-15 18:43:33 +0000
commit00203d5d3f63d9ee1ba799698eb6ea026037997a (patch)
tree55a0a95bcac1e6f73a7e118de7c14c88c5dc1973 /src/kdc/kdc_util.c
parent5d7d8e9d171542ce9e05c8a7937d7778a3ba3694 (diff)
downloadkrb5-00203d5d3f63d9ee1ba799698eb6ea026037997a.zip
krb5-00203d5d3f63d9ee1ba799698eb6ea026037997a.tar.gz
krb5-00203d5d3f63d9ee1ba799698eb6ea026037997a.tar.bz2
Use per-realm key/salt list to find appropriate keys. Fix gcc -Wall complaints
git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@6529 dc483132-0cff-0310-8789-dd5450dbe970
Diffstat (limited to 'src/kdc/kdc_util.c')
-rw-r--r--src/kdc/kdc_util.c31
1 files changed, 24 insertions, 7 deletions
diff --git a/src/kdc/kdc_util.c b/src/kdc/kdc_util.c
index e106f2d..b7806ca 100644
--- a/src/kdc/kdc_util.c
+++ b/src/kdc/kdc_util.c
@@ -29,6 +29,7 @@
#include "extern.h"
#include <stdio.h>
#include <syslog.h>
+#include "adm.h"
#include "adm_proto.h"
/*
@@ -325,7 +326,9 @@ kdc_get_server_key(ticket, key, kvno)
krb5_error_code retval;
krb5_db_entry server;
krb5_boolean more;
- int nprincs, i, last_i;
+ int nprincs;
+ krb5_key_data * server_key;
+ int i;
if (krb5_principal_compare(kdc_context, tgs_server, ticket->server)) {
retval = krb5_copy_keyblock(kdc_context, &tgs_key, key);
@@ -356,16 +359,29 @@ kdc_get_server_key(ticket, key, kvno)
/*
* Get the latest version of the server key_data and
* convert the key into a real key (it may be encrypted in the database)
+ *
+ * Search the key list in the order specified by the key/salt list.
*/
- for (*kvno = last_i = i = 0; i < server.n_key_data; i++) {
- if (*kvno < server.key_data[i].key_data_kvno) {
- *kvno = server.key_data[i].key_data_kvno;
- last_i = i;
- }
+ server_key = (krb5_key_data *) NULL;
+ for (i=0; i<kdc_active_realm->realm_nkstypes; i++) {
+ krb5_key_salt_tuple *kslist;
+
+ kslist = (krb5_key_salt_tuple *) kdc_active_realm->realm_kstypes;
+ if (!krb5_dbe_find_keytype(kdc_context,
+ &server,
+ kslist[i].ks_keytype,
+ -1,
+ -1,
+ &server_key))
+ break;
}
+ if (!server_key)
+ return(KRB5KDC_ERR_S_PRINCIPAL_UNKNOWN);
+
+ *kvno = server_key->key_data_kvno;
if ((*key = (krb5_keyblock *)malloc(sizeof **key))) {
retval = krb5_dbekd_decrypt_key_data(kdc_context, &master_encblock,
- &server.key_data[last_i],
+ server_key,
*key, NULL);
} else
retval = ENOMEM;
@@ -903,6 +919,7 @@ krb5_data *data;
int tag; /* tag number */
unsigned char savelen; /* saved length of our field */
+ classes = -1;
/* we assume that the first identifier/length will tell us
how long the entire stream is. */
astream++;