diff options
| author | Theodore Tso <tytso@mit.edu> | 1994-09-29 18:40:00 +0000 |
|---|---|---|
| committer | Theodore Tso <tytso@mit.edu> | 1994-09-29 18:40:00 +0000 |
| commit | b2caf4b17818398c789a51032d0f90704c182ebf (patch) | |
| tree | 2d7c0e0e660411158f085c3fdeb10a34348ee37e /src/lib | |
| parent | 35d701a1e0d20fcb008182d7e0c2861f102cd279 (diff) | |
Return the most recent key (with the greatest kvno) instead of the
first key found in the keytab file.
git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@4375 dc483132-0cff-0310-8789-dd5450dbe970
Diffstat (limited to 'src/lib')
| -rw-r--r-- | src/lib/krb5/keytab/file/ChangeLog | 6 | ||||
| -rw-r--r-- | src/lib/krb5/keytab/file/ktf_get_en.c | 26 |
2 files changed, 25 insertions, 7 deletions
diff --git a/src/lib/krb5/keytab/file/ChangeLog b/src/lib/krb5/keytab/file/ChangeLog index d4e6a7b2a..4c345eaa2 100644 --- a/src/lib/krb5/keytab/file/ChangeLog +++ b/src/lib/krb5/keytab/file/ChangeLog @@ -1,3 +1,9 @@ +Wed Sep 28 21:14:49 1994 Theodore Y. Ts'o (tytso@dcl) + + * ktf_get_en.c (krb5_ktfile_get_entry): Modified to return the + most recent key (with the greatest kvno), instead of the + first. + Thu Sep 22 21:51:53 1994 Theodore Y. Ts'o (tytso@dcl) * ktf_get_en.c (krb5_ktfile_get_entry): diff --git a/src/lib/krb5/keytab/file/ktf_get_en.c b/src/lib/krb5/keytab/file/ktf_get_en.c index 59e20aed0..2660a455f 100644 --- a/src/lib/krb5/keytab/file/ktf_get_en.c +++ b/src/lib/krb5/keytab/file/ktf_get_en.c @@ -42,7 +42,7 @@ OLDDECLARG(krb5_principal, principal) OLDDECLARG(krb5_kvno, kvno) OLDDECLARG(krb5_keytab_entry *, entry) { - krb5_keytab_entry cur_entry; + krb5_keytab_entry cur_entry, new_entry; krb5_error_code kerror = 0; /* Open the keyfile for reading */ @@ -53,25 +53,37 @@ OLDDECLARG(krb5_keytab_entry *, entry) * For efficiency and simplicity, we'll use a while true that * is exited with a break statement. */ + cur_entry.principal = 0; while (TRUE) { - if (kerror = krb5_ktfileint_read_entry(id, &cur_entry)) + if (kerror = krb5_ktfileint_read_entry(id, &new_entry)) break; - if (((kvno == IGNORE_VNO) || (kvno == cur_entry.vno)) && - krb5_principal_compare(principal, cur_entry.principal)) { - /* found a match */ - break; + if (krb5_principal_compare(principal, cur_entry.principal)) { + if (kvno == IGNORE_VNO) { + if (cur_entry.vno < new_entry.vno) { + krb5_kt_free_entry(&cur_entry); + cur_entry = new_entry; + } + } else { + cur_entry = new_entry; + break; + } + } else { + krb5_kt_free_entry(&new_entry); } - krb5_kt_free_entry(&cur_entry); } if (kerror) { if (kerror == KRB5_KT_END) kerror = KRB5_KT_NOTFOUND; (void) krb5_ktfileint_close(id); + if (cur_entry.principal) + krb5_kt_free_entry(&cur_entry); return kerror; } if ((kerror = krb5_ktfileint_close(id)) != 0) { krb5_kt_free_entry(&cur_entry); + if (cur_entry.principal) + krb5_kt_free_entry(&cur_entry); return kerror; } *entry = cur_entry; |
