[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]


To: JINMEI Tatuya / $B?@L@C#:H(B <jinmei@isl.rdc.toshiba.co.jp>, Brad Knowles <brad.knowles@skynet.be>
Cc: Mohsen.Souissi@nic.fr, dnsop@cafax.se, namedroppers@ops.ietf.org, ngtrans@sunroof.eng.sun.com, ipng@sunroof.eng.sun.com, vladimir.ksinant@6wind.com, rfc1886@nic.fr, g6@g6.asso.fr
From: Brad Knowles <brad.knowles@skynet.be>
Date: Tue, 23 Jul 2002 23:59:47 +0200
In-Reply-To: <y7vd6teu3jy.wl@ocean.jinmei.org>
Sender: owner-dnsop@cafax.se
Subject: Re: RFC 1886 Interop Tests & Results

At 7:44 PM +0900 2002/07/23, JINMEI Tatuya / 
=?ISO-2022-JP?B?GyRCP0BMQEMjOkgbKEI=?= wrote:

>  What exactly do you mean by BIND 9.2.1?
>
>  1. the resolver library under lib/bind
>  2. the resolver routine in lwresd
>  3. both 1 and 2

	Well, lwresd is just BIND by another name, so it should be the 
same library call.  Starting in the bind-9.2.1 directory and 
searching for relevant strings, we find:

% find . -name \*.c -print | xargs egrep -i 'ip6\.(arpa|int)'
./bin/named/query.c: * Convert the ip6.int name 'name' into the 
corresponding IPv6 address
./bin/named/query.c:    /* Try IP6.ARPA first. */
./bin/named/query.c:            /* Try IP6.INT next. */
./bin/named/query.c:             * of NXDOMAIN and NXRRSET results 
from the IP6.INT
./bin/named/query.c:             * and IP6.ARPA lookups, it could 
still be wrong with
./bin/tests/lwres_test.c:       test_gabn("foo.ip6.int.");
./lib/bind/resolv/res_init.c: 
strcpy(statp->_u._ext.ext->nsuffix, "ip6.int");
./lib/bind/resolv/res_init.c: 
strcpy(statp->_u._ext.ext->bsuffix, "ip6.arpa");
./lib/bind/resolv/res_init.c:   return ("ip6.int");
./lib/bind/resolv/res_init.c:   return ("ip6.arpa");
./lib/dns/byaddr.c:                     strcpy(cp, "ip6.int.");
./lib/dns/byaddr.c:                     strcpy(cp, "].ip6.arpa.");


	Specifically, looking in bind-9.2.1/bin/named/query.c, starting 
on line 3770, we see:

         /* Try IP6.ARPA first. */
         result = dns_byaddr_create(client->mctx,
                                    &client->query.synth.na,
                                    client->view,
                                    0, client->task,
                                    synth_rev_byaddrdone_arpa,
                                    client, &byaddr_dummy);
         if (result == ISC_R_SUCCESS)
                 return; /* Wait for completion event. */

	Then, starting on line 3796, we see:

                 /* Try IP6.INT next. */
                 result = dns_byaddr_create(client->mctx,
                                            &client->query.synth.na,
                                            client->view,
                                            DNS_BYADDROPT_IPV6NIBBLE,
                                            client->task,
                                            synth_rev_byaddrdone_int,
                                            client, &byaddr_dummy);
                 if (result != ISC_R_SUCCESS)
                         synth_finish(client, result);

	Then starting on line 3821, we see:

         } else if (bevent->result == DNS_R_NCACHENXDOMAIN ||
                    bevent->result == DNS_R_NCACHENXRRSET ||
                    bevent->result == DNS_R_NXDOMAIN ||
                    bevent->result == DNS_R_NXRRSET) {
                 /*
                  * We could give a NOERROR/NODATA response instead
                  * in some cases, but since there may be any combination
                  * of NXDOMAIN and NXRRSET results from the IP6.INT
                  * and IP6.ARPA lookups, it could still be wrong with
                  * respect to one or the other.
                  */
                 synth_finish(client, DNS_R_NXDOMAIN);

	Looking at bind-9.2.1/lib/bind/resolv/res_init.c, starting on 
line 194, we see:

         if (statp->_u._ext.ext != NULL) {
                 memset(statp->_u._ext.ext, 0, sizeof(*statp->_u._ext.ext));
                 statp->_u._ext.ext->nsaddrs[0].sin = statp->nsaddr;
                 strcpy(statp->_u._ext.ext->nsuffix, "ip6.int");
                 strcpy(statp->_u._ext.ext->bsuffix, "ip6.arpa");
         }

	Then starting on line 608, we see:

const char *
res_get_nibblesuffix(res_state statp) {
         if (statp->_u._ext.ext)
                 return (statp->_u._ext.ext->nsuffix);
         return ("ip6.int");
}

const char *
res_get_bitstringsuffix(res_state statp) {
         if (statp->_u._ext.ext)
                 return (statp->_u._ext.ext->bsuffix);
         return ("ip6.arpa");
}

	Moving on to bind-9.2.1/lib/dns/byaddr.c starting on line 93, we see:

         } else if (address->family == AF_INET6) {
                 if (nibble) {
                         cp = textname;
                         for (i = 15; i >= 0; i--) {
                                 *cp++ = hex_digits[bytes[i] & 0x0f];
                                 *cp++ = '.';
                                 *cp++ = hex_digits[(bytes[i] >> 4) & 0x0f];
                                 *cp++ = '.';
                         }
                         strcpy(cp, "ip6.int.");
                 } else {
                         cp = textname;
                         *cp++ = '\\';
                         *cp++ = '[';
                         *cp++ = 'x';
                         for (i = 0; i < 16; i += 2) {
                                 *cp++ = hex_digits[(bytes[i] >> 4) & 0x0f];
                                 *cp++ = hex_digits[bytes[i] & 0x0f];
                                 *cp++ = hex_digits[(bytes[i+1] >> 4) & 0x0f];
                                 *cp++ = hex_digits[bytes[i+1] & 0x0f];
                         }
                         strcpy(cp, "].ip6.arpa.");
                 }
         } else

>  In my understanding (I've quickly checked the code again, too), both 1
>  and 2 only tries ip6.arpa with bitstring labels.

	I'm not sure why nibble and bitstring forms are handled 
differently within the libraries, but clearly within the nameserver 
itself, it does check both domains.

-- 
Brad Knowles, <brad.knowles@skynet.be>

"They that can give up essential liberty to obtain a little temporary
safety deserve neither liberty nor safety."
     -Benjamin Franklin, Historical Review of Pennsylvania.

Home | Date list | Subject list