aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke Howard <lukeh@padl.com>2009-08-07 23:24:50 +0000
committerLuke Howard <lukeh@padl.com>2009-08-07 23:24:50 +0000
commit10b0a521b3cc0094e005deedfb670f261ffb0e4f (patch)
treee8b00b992dab521efa14cadc66f8b1aa649ccec9
parent00541e84a76b850f56681f45391c89bb32b480c9 (diff)
downloadkrb5-10b0a521b3cc0094e005deedfb670f261ffb0e4f.zip
krb5-10b0a521b3cc0094e005deedfb670f261ffb0e4f.tar.gz
krb5-10b0a521b3cc0094e005deedfb670f261ffb0e4f.tar.bz2
cleanup
git-svn-id: svn://anonsvn.mit.edu/krb5/users/lhoward/s4u@22507 dc483132-0cff-0310-8789-dd5450dbe970
-rw-r--r--src/lib/krb5/krb/s4u_creds.c47
1 files changed, 20 insertions, 27 deletions
diff --git a/src/lib/krb5/krb/s4u_creds.c b/src/lib/krb5/krb/s4u_creds.c
index ecdb20f..3ebe58b 100644
--- a/src/lib/krb5/krb/s4u_creds.c
+++ b/src/lib/krb5/krb/s4u_creds.c
@@ -401,12 +401,6 @@ verify_s4u2self_reply(krb5_context context,
else
usage = KRB5_KEYUSAGE_PA_S4U_X509_USER_REQUEST;
- if (!not_newer &&
- !krb5_c_is_keyed_cksum(rep_s4u_user->cksum.checksum_type)) {
- code = KRB5KRB_AP_ERR_INAPP_CKSUM;
- goto cleanup;
- }
-
code = krb5_c_verify_checksum(context, subkey, usage, datap,
&rep_s4u_user->cksum, &valid);
if (code != 0)
@@ -420,29 +414,28 @@ verify_s4u2self_reply(krb5_context context,
* KDCs that support KRB5_S4U_OPTS_USE_REPLY_KEY_USAGE also return
* S4U enc_padata for older (pre-AES) encryption types only.
*/
- if (not_newer &&
- (rep_s4u_user->user_id.options & KRB5_S4U_OPTS_USE_REPLY_KEY_USAGE)) {
+ if (not_newer) {
if (enc_s4u_padata == NULL) {
- code = KRB5_KDCREP_MODIFIED;
- goto cleanup;
- }
-
- /*
- * According to the terribly written specification, the value of
- * the padata here is the concatenated checksums. Presumably
- * this is to avoid a downgrade attack.
- */
- if (enc_s4u_padata->length != req_s4u_user->cksum.length + rep_s4u_user->cksum.length) {
- code = KRB5_KDCREP_MODIFIED;
- goto cleanup;
- }
- if (memcmp(enc_s4u_padata->contents,
- req_s4u_user->cksum.contents, req_s4u_user->cksum.length) ||
- memcmp(&enc_s4u_padata->contents[req_s4u_user->cksum.length],
- rep_s4u_user->cksum.contents, rep_s4u_user->cksum.length)) {
- code = KRB5_KDCREP_MODIFIED;
- goto cleanup;
+ if (rep_s4u_user->user_id.options & KRB5_S4U_OPTS_USE_REPLY_KEY_USAGE) {
+ code = KRB5_KDCREP_MODIFIED;
+ goto cleanup;
+ }
+ } else {
+ if (enc_s4u_padata->length != req_s4u_user->cksum.length + rep_s4u_user->cksum.length) {
+ code = KRB5_KDCREP_MODIFIED;
+ goto cleanup;
+ }
+ if (memcmp(enc_s4u_padata->contents,
+ req_s4u_user->cksum.contents, req_s4u_user->cksum.length) ||
+ memcmp(&enc_s4u_padata->contents[req_s4u_user->cksum.length],
+ rep_s4u_user->cksum.contents, rep_s4u_user->cksum.length)) {
+ code = KRB5_KDCREP_MODIFIED;
+ goto cleanup;
+ }
}
+ } else if (!krb5_c_is_keyed_cksum(rep_s4u_user->cksum.checksum_type)) {
+ code = KRB5KRB_AP_ERR_INAPP_CKSUM;
+ goto cleanup;
}
cleanup: