summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJohn Kohl <jtkohl@mit.edu>1990-04-26 17:17:35 +0000
committerJohn Kohl <jtkohl@mit.edu>1990-04-26 17:17:35 +0000
commitedfaf185ccf72b3c9c80b40eb4bc7d60f7cab0ef (patch)
tree5b5b95d5bec5ac5a39f7f1aaab740295f5e9fbee
parent6790d12b750381afb998b57c33468a6357c84300 (diff)
downloadkrb5-edfaf185ccf72b3c9c80b40eb4bc7d60f7cab0ef.tar.gz
krb5-edfaf185ccf72b3c9c80b40eb4bc7d60f7cab0ef.tar.xz
krb5-edfaf185ccf72b3c9c80b40eb4bc7d60f7cab0ef.zip
finish implementation
git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@592 dc483132-0cff-0310-8789-dd5450dbe970
-rw-r--r--src/lib/krb5/keytab/file/ktf_get_en.c39
1 files changed, 30 insertions, 9 deletions
diff --git a/src/lib/krb5/keytab/file/ktf_get_en.c b/src/lib/krb5/keytab/file/ktf_get_en.c
index 069bc67aa..a4e919225 100644
--- a/src/lib/krb5/keytab/file/ktf_get_en.c
+++ b/src/lib/krb5/keytab/file/ktf_get_en.c
@@ -19,17 +19,22 @@ static char rcsid_krb5_ktfile_get_entry_c[] =
#include <krb5/copyright.h>
#include <krb5/krb5.h>
+#include <krb5/krb5_err.h>
+#include <krb5/ext-proto.h>
#include "ktfile.h"
krb5_error_code
-krb5_ktfile_get_entry(id, principal, kvno, entry)
- krb5_keytab id;
- krb5_principal principal;
- krb5_kvno kvno;
- krb5_keytab_entry *entry;
+krb5_ktfile_get_entry(DECLARG(krb5_keytab, id),
+ DECLARG(krb5_principal, principal),
+ DECLARG(krb5_kvno, kvno),
+ DECLARG(krb5_keytab_entry *, entry))
+OLDDECLARG(krb5_keytab, id)
+OLDDECLARG(krb5_principal, principal)
+OLDDECLARG(krb5_kvno, kvno)
+OLDDECLARG(krb5_keytab_entry *, entry)
{
- krb5_keytab_entry cur_entry;
+ krb5_keytab_entry *cur_entry;
krb5_error_code kerror = 0; /* XXX */
bzero((char *)&cur_entry, sizeof(krb5_keytab_entry));
@@ -43,8 +48,24 @@ krb5_ktfile_get_entry(id, principal, kvno, entry)
* is exited with a break statement.
*/
while (TRUE) {
- if (kerror = krb5_ktfileint_read_entry(id, &entry))
+ if (kerror = krb5_ktfileint_read_entry(id, &cur_entry))
break;
- if (((kvno == IGNORE_VNO) || (kvno == entry.kvno)) &&
- (principal XXXXX here XXXXX
+ if (((kvno == IGNORE_VNO) || (kvno == cur_entry->vno)) &&
+ krb5_principal_compare(principal, cur_entry->principal)) {
+ /* found a match */
+ break;
+ }
+ krb5_kt_free_entry(cur_entry);
+ }
+ if (kerror && kerror != KRB5_KT_END) {
+ (void) krb5_ktfileint_close(id);
+ return kerror;
+ }
+ if (!(kerror = krb5_ktfileint_close(id))) {
+ *entry = *cur_entry;
+ xfree(cur_entry);
+ } else
+ krb5_kt_free_entry(cur_entry);
+ return kerror;
+}