when decrypting pa-data, try all keys matching enctype

git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@10974 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
Johan Danielsson
2002-05-07 10:27:35 +00:00
parent d58d385a52
commit f446478772

View File

@@ -574,7 +574,8 @@ as_rep(KDC_REQ *req,
free_EncryptedData(&enc_data); free_EncryptedData(&enc_data);
continue; continue;
} }
try_next_key:
ret = krb5_crypto_init(context, &pa_key->key, 0, &crypto); ret = krb5_crypto_init(context, &pa_key->key, 0, &crypto);
if (ret) { if (ret) {
kdc_log(0, "krb5_crypto_init failed: %s", kdc_log(0, "krb5_crypto_init failed: %s",
@@ -591,6 +592,9 @@ as_rep(KDC_REQ *req,
krb5_crypto_destroy(context, crypto); krb5_crypto_destroy(context, crypto);
free_EncryptedData(&enc_data); free_EncryptedData(&enc_data);
if(ret){ if(ret){
if(hdb_next_enctype2key(context, client,
enc_data.etype, &pa_key) == 0)
goto try_next_key;
e_text = "Failed to decrypt PA-DATA"; e_text = "Failed to decrypt PA-DATA";
kdc_log (5, "Failed to decrypt PA-DATA -- %s", kdc_log (5, "Failed to decrypt PA-DATA -- %s",
client_name); client_name);
@@ -639,7 +643,7 @@ as_rep(KDC_REQ *req,
size_t len; size_t len;
krb5_data foo_data; krb5_data foo_data;
use_pa: use_pa:
method_data.len = 0; method_data.len = 0;
method_data.val = NULL; method_data.val = NULL;
@@ -696,7 +700,7 @@ as_rep(KDC_REQ *req,
kdc_log(5, "Using %s/%s", cet, set); kdc_log(5, "Using %s/%s", cet, set);
free(set); free(set);
} else } else
free(cet); free(cet);
} else } else
kdc_log(5, "Using e-types %d/%d", cetype, setype); kdc_log(5, "Using e-types %d/%d", cetype, setype);
} }
@@ -894,7 +898,7 @@ as_rep(KDC_REQ *req,
free_EncTicketPart(&et); free_EncTicketPart(&et);
free_EncKDCRepPart(&ek); free_EncKDCRepPart(&ek);
free_AS_REP(&rep); free_AS_REP(&rep);
out: out:
if(ret){ if(ret){
krb5_mk_error(context, krb5_mk_error(context,
ret, ret,
@@ -907,7 +911,7 @@ out:
reply); reply);
ret = 0; ret = 0;
} }
out2: out2:
krb5_free_principal(context, client_princ); krb5_free_principal(context, client_princ);
free(client_name); free(client_name);
krb5_free_principal(context, server_princ); krb5_free_principal(context, server_princ);