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, "[EMAIL PROTECTED]", &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);