--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/components/bind/patches/rndc-keys.patch Sun Jun 24 06:59:24 2012 -0700
@@ -0,0 +1,51 @@
+--- a/bin/named/controlconf.c Fri Jun 1 10:05:49 2012
++++ b/bin/named/controlconf.c Tue Jun 5 17:27:55 2012
+@@ -371,12 +371,14 @@
+ secret.rend = secret.rstart + key->secret.length;
+ result = isccc_cc_fromwire(&ccregion, &request, &secret);
+ if (result == ISC_R_SUCCESS)
+ break;
+ isc_mem_put(listener->mctx, secret.rstart, REGION_SIZE(secret));
+- log_invalid(&conn->ccmsg, result);
+- goto cleanup;
++ if (result != ISCCC_R_BADAUTH) {
++ log_invalid(&conn->ccmsg, result);
++ goto cleanup;
++ }
+ }
+
+ if (key == NULL) {
+ log_invalid(&conn->ccmsg, ISCCC_R_BADAUTH);
+ goto cleanup;
+--- a/lib/isccc/cc.c Wed Jun 6 01:41:54 2012
++++ b/lib/isccc/cc.c Wed Jun 6 01:43:22 2012
+@@ -397,12 +397,10 @@
+ if (first_tag && secret != NULL && strcmp(key, "_auth") == 0)
+ checksum_rstart = source->rstart;
+ first_tag = ISC_FALSE;
+ }
+
+- *alistp = alist;
+-
+ if (secret != NULL) {
+ if (checksum_rstart != NULL)
+ result = verify(alist, checksum_rstart,
+ (source->rend - checksum_rstart),
+ secret);
+--- a/lib/isccc/cc.c Wed Jun 6 01:45:26 2012
++++ b/lib/isccc/cc.c Wed Jun 6 01:43:22 2012
+@@ -408,11 +408,13 @@
+ result = ISCCC_R_BADAUTH;
+ } else
+ result = ISC_R_SUCCESS;
+
+ bad:
+- if (result != ISC_R_SUCCESS)
++ if (result == ISC_R_SUCCESS)
++ *alistp = alist;
++ else
+ isccc_sexpr_free(&alist);
+
+ return (result);
+ }
+