svn commit: lorikeet r348 - in trunk/heimdal/lib/krb5: .
abartlet at samba.org
abartlet at samba.org
Wed Jun 22 02:09:50 GMT 2005
Author: abartlet
Date: 2005-06-22 02:09:49 +0000 (Wed, 22 Jun 2005)
New Revision: 348
WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=lorikeet&rev=348
Log:
Add a new 'wildcard' varient on the in-memory keytab. This will match
on kvno, but not on the name. This avoids us trying to list all the
names we may be known under.
Perhaps not a perfect solution (we should know the list of names we
have registered in the kerberos server) but it gets us going for now.
Andrew Bartlett
Modified:
trunk/heimdal/lib/krb5/context.c
trunk/heimdal/lib/krb5/keytab_memory.c
trunk/heimdal/lib/krb5/krb5.h
Changeset:
Modified: trunk/heimdal/lib/krb5/context.c
===================================================================
--- trunk/heimdal/lib/krb5/context.c 2005-06-18 11:04:54 UTC (rev 347)
+++ trunk/heimdal/lib/krb5/context.c 2005-06-22 02:09:49 UTC (rev 348)
@@ -231,6 +231,7 @@
krb5_kt_register (p, &krb5_wrfkt_ops);
krb5_kt_register (p, &krb5_javakt_ops);
krb5_kt_register (p, &krb5_mkt_ops);
+ krb5_kt_register (p, &krb5_mktw_ops);
krb5_kt_register (p, &krb5_akf_ops);
krb5_kt_register (p, &krb4_fkt_ops);
krb5_kt_register (p, &krb5_srvtab_fkt_ops);
Modified: trunk/heimdal/lib/krb5/keytab_memory.c
===================================================================
--- trunk/heimdal/lib/krb5/keytab_memory.c 2005-06-18 11:04:54 UTC (rev 347)
+++ trunk/heimdal/lib/krb5/keytab_memory.c 2005-06-22 02:09:49 UTC (rev 348)
@@ -174,3 +174,56 @@
mkt_add_entry,
mkt_remove_entry
};
+
+static krb5_error_code
+mktw_get_entry(krb5_context context,
+ krb5_keytab id,
+ krb5_const_principal principal,
+ krb5_kvno kvno,
+ krb5_enctype enctype,
+ krb5_keytab_entry *entry)
+{
+ krb5_keytab_entry tmp;
+ krb5_error_code ret;
+ krb5_kt_cursor cursor;
+
+ ret = krb5_kt_start_seq_get (context, id, &cursor);
+ if (ret)
+ return KRB5_KT_NOTFOUND; /* XXX i.e. file not found */
+
+ entry->vno = 0;
+ while (krb5_kt_next_entry(context, id, &tmp, &cursor) == 0) {
+ if (krb5_kt_compare(context, &tmp, NULL, 0, enctype)) {
+ if (kvno == tmp.vno) {
+ krb5_kt_copy_entry_contents (context, &tmp, entry);
+ krb5_kt_free_entry (context, &tmp);
+ krb5_kt_end_seq_get(context, id, &cursor);
+ return 0;
+ } else if (kvno == 0 && tmp.vno > entry->vno) {
+ if (entry->vno)
+ krb5_kt_free_entry (context, entry);
+ krb5_kt_copy_entry_contents (context, &tmp, entry);
+ }
+ }
+ krb5_kt_free_entry(context, &tmp);
+ }
+ krb5_kt_end_seq_get (context, id, &cursor);
+ if (entry->vno) {
+ return 0;
+ } else {
+ return KRB5_KT_NOTFOUND;
+ }
+};
+
+const krb5_kt_ops krb5_mktw_ops = {
+ "MEMORY_WILDCARD",
+ mkt_resolve,
+ mkt_get_name,
+ mkt_close,
+ mktw_get_entry, /* get */
+ mkt_start_seq_get,
+ mkt_next_entry,
+ mkt_end_seq_get,
+ mkt_add_entry,
+ mkt_remove_entry
+};
Modified: trunk/heimdal/lib/krb5/krb5.h
===================================================================
--- trunk/heimdal/lib/krb5/krb5.h 2005-06-18 11:04:54 UTC (rev 347)
+++ trunk/heimdal/lib/krb5/krb5.h 2005-06-22 02:09:49 UTC (rev 348)
@@ -698,6 +698,7 @@
extern const krb5_kt_ops krb5_wrfkt_ops;
extern const krb5_kt_ops krb5_javakt_ops;
extern const krb5_kt_ops krb5_mkt_ops;
+extern const krb5_kt_ops krb5_mktw_ops;
extern const krb5_kt_ops krb5_akf_ops;
extern const krb5_kt_ops krb4_fkt_ops;
extern const krb5_kt_ops krb5_srvtab_fkt_ops;
More information about the samba-cvs
mailing list