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