|
From: Luis S. <lui...@gm...> - 2008-08-20 10:51:00
|
My first impression is that everything is ok. Thanks for the quick reply.
Kind Regards
Luis
On Tue, Aug 19, 2008 at 8:17 PM, Brian Wellington <bwe...@xb...>wrote:
> On Tue, 19 Aug 2008, Luis Silva wrote:
>
> :) Ok sorry for this. The problem is that I sent this email first and got
>> an
>> error and forgot to format the second time. I'm sending you the code in
>> attached.
>>
>
> OK. I think you're correct that a type 4 NXDOMAIN could be cached
> incorrectly. Does the patch below look correct?
>
> Brian
>
> Index: org/xbill/DNS/Cache.java
> ===================================================================
> RCS file: /cvsroot/dnsjava/dnsjava/org/xbill/DNS/Cache.java,v
> retrieving revision 1.116
> diff -u -r1.116 Cache.java
> --- org/xbill/DNS/Cache.java 5 Dec 2006 01:05:06 -0000 1.116
> +++ org/xbill/DNS/Cache.java 19 Aug 2008 19:16:56 -0000
> @@ -628,7 +628,8 @@
> int type = answers[i].getType();
> Name name = answers[i].getName();
> cred = getCred(Section.ANSWER, isAuth);
> - if ((type == qtype || qtype == Type.ANY) &&
> + if (rcode == Rcode.NOERROR &&
> + (type == qtype || qtype == Type.ANY) &&
> name.equals(curname))
> {
> addRRset(answers[i], cred);
> @@ -679,14 +680,13 @@
> }
> if (!completed) {
> /* This is a negative response or a referral. */
> - int cachetype = (rcode == Rcode.NXDOMAIN) ? 0 : qtype;
> - if (soa != null || ns == null) {
> + if (rcode == Rcode.NXDOMAIN) {
> /* Negative response */
> cred = getCred(Section.AUTHORITY, isAuth);
> SOARecord soarec = null;
> if (soa != null)
> soarec = (SOARecord) soa.first();
> - addNegative(curname, cachetype, soarec, cred);
> + addNegative(curname, 0, soarec, cred);
> if (response == null) {
> int responseType;
> if (rcode == Rcode.NXDOMAIN)
> @@ -695,8 +695,8 @@
> responseType = SetResponse.NXRRSET;
> response = SetResponse.ofType(responseType);
> }
> - /* NXT records are not cached yet. */
> - } else {
> + /* DNSSEC records are not cached. */
> + } else if (ns != null) {
>
> /* Referral response */
> cred = getCred(Section.AUTHORITY, isAuth);
> addRRset(ns, cred);
>
|