svn commit: lorikeet r503 - in trunk/heimdal/lib/krb5: .

abartlet at samba.org abartlet at samba.org
Sat Dec 3 00:32:35 GMT 2005


Author: abartlet
Date: 2005-12-03 00:32:32 +0000 (Sat, 03 Dec 2005)
New Revision: 503

WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=lorikeet&rev=503

Log:
Test krb5_kt_remove_entry in the test_keytab, and therefore find a
MEMORY keytab bug on systems where realloc(ptr, 0) is equivilant to
free().

Andrew Bartlett

Modified:
   trunk/heimdal/lib/krb5/keytab_memory.c
   trunk/heimdal/lib/krb5/test_keytab.c


Changeset:
Modified: trunk/heimdal/lib/krb5/keytab_memory.c
===================================================================
--- trunk/heimdal/lib/krb5/keytab_memory.c	2005-12-01 21:36:07 UTC (rev 502)
+++ trunk/heimdal/lib/krb5/keytab_memory.c	2005-12-03 00:32:32 UTC (rev 503)
@@ -217,6 +217,9 @@
     e = realloc(d->entries, d->num_entries * sizeof(*d->entries));
     if(e != NULL)
 	d->entries = e;
+    if (d->num_entries == 0) 
+	d->entries = 0;
+	    
     return 0;
 }
 

Modified: trunk/heimdal/lib/krb5/test_keytab.c
===================================================================
--- trunk/heimdal/lib/krb5/test_keytab.c	2005-12-01 21:36:07 UTC (rev 502)
+++ trunk/heimdal/lib/krb5/test_keytab.c	2005-12-03 00:32:32 UTC (rev 503)
@@ -65,11 +65,11 @@
  */
 
 static void
-test_memory_keytab(krb5_context context, const char *keytab)
+test_memory_keytab(krb5_context context, const char *keytab, const char *keytab2)
 {
     krb5_error_code ret;
-    krb5_keytab id, id2;
-    krb5_keytab_entry entry, entry2;
+    krb5_keytab id, id2, id3;
+    krb5_keytab_entry entry, entry2, entry3;
 
     ret = krb5_kt_resolve(context, keytab, &id);
     if (ret)
@@ -119,7 +119,24 @@
 	krb5_err(context, 1, ret, "krb5_kt_close");
 
 
+    ret = krb5_kt_resolve(context, keytab2, &id3);
+    if (ret)
+	krb5_err(context, 1, ret, "krb5_kt_resolve");
 
+    memset(&entry3, 0, sizeof(entry3));
+    ret = krb5_parse_name(context, "lha3 at SU.SE", &entry3.principal);
+    if (ret)
+	krb5_err(context, 1, ret, "krb5_parse_name");
+    entry3.vno = 1;
+    ret = krb5_generate_random_keyblock(context,
+					ETYPE_AES256_CTS_HMAC_SHA1_96,
+					&entry3.keyblock);
+    if (ret)
+	krb5_err(context, 1, ret, "krb5_generate_random_keyblock");
+
+    krb5_kt_add_entry(context, id3, &entry3);
+
+
     ret = krb5_kt_resolve(context, keytab, &id);
     if (ret)
 	krb5_err(context, 1, ret, "krb5_kt_resolve");
@@ -132,11 +149,23 @@
     if (ret == 0)
 	krb5_errx(context, 1, "krb5_kt_get_entry when if should fail");
 
+    krb5_kt_remove_entry(context, id, &entry);
+    if (ret == 0)
+	krb5_errx(context, 1, "krb5_kt_get_entry when if should fail");
+
     ret = krb5_kt_close(context, id);
     if (ret)
 	krb5_err(context, 1, ret, "krb5_kt_close");
 
     krb5_kt_free_entry(context, &entry);
+
+    krb5_kt_remove_entry(context, id3, &entry3);
+
+    ret = krb5_kt_close(context, id3);
+    if (ret)
+	krb5_err(context, 1, ret, "krb5_kt_close");
+
+
 }
 
 int
@@ -155,7 +184,7 @@
     test_empty_keytab(context, "FILE:foo");
     test_empty_keytab(context, "KRB4:foo");
 
-    test_memory_keytab(context, "MEMORY:foo");
+    test_memory_keytab(context, "MEMORY:foo", "MEMORY:foo2");
 
     krb5_free_context(context);
 



More information about the samba-cvs mailing list