[DragonFlyBSD - Bug #3294] drill(1) with IPv6 NS fails with UDP but works with TCP

bugtracker-admin at leaf.dragonflybsd.org bugtracker-admin at leaf.dragonflybsd.org
Mon Oct 25 07:45:08 PDT 2021


Issue #3294 has been updated by y0n3t4n1.


I spent some time playing with LDNS example code and comparing the net.c with resolv/res_send.c in libc, and found that LDNS sends the query with sendto, while the libc resolver uses connect+send, unless RES_INSECURE1 is specified.

So with the code at the bottom of this comment, this succeeds
```
./r aaaa leaf.dragonflybsd.org.
```
while this fails
```
./r -1 aaaa leaf.dragonflybsd.org.
```


```c
#include <sys/types.h>
#include <netinet/in.h>
#include <arpa/nameser.h>
#include <err.h>
#include <errno.h>
#include <resolv.h>
#include <stdio.h>
#include <unistd.h>

int main(int ac, char **av)
{
        u_char answer[1024];
        int ch;
        const char *me = av[0];

        if (res_init() != 0)
                err(-1, "res_init");
        while ((ch = getopt(ac, av, "12t")) != -1) {
                switch (ch) {
                case '1':
                        _res.options |= RES_INSECURE1;
                        break;
                case '2':
                        _res.options |= RES_INSECURE2;
                        break;
                case 't':
                        _res.options |= RES_USEVC;
                        break;
                default:
                        errx(-1, "unknown switch %c", ch);
                }
        }
        ac -= optind, av += optind;
        if (ac < 2)
                errx(-1, "usage: %s resource type domain...", me);

        int ok = 0;
        int query_type = res_nametotype(*av, &ok);
        if (!ok)
                errx(-1, "unknown query type: %s", *av);

        fp_resstat(&_res, stdout);
        while (++av, --ac > 0) {
                int l = res_query(*av, C_IN, query_type, answer, sizeof answer);
                if (l == -1) {
                        warnx("res_query: %s", *av);
                        continue;
                }
                res_pquery(&_res, answer, l, stdout);
        }
}
```

----------------------------------------
Bug #3294: drill(1) with IPv6 NS fails with UDP but works with TCP
http://bugs.dragonflybsd.org/issues/3294#change-14177

* Author: liweitianux
* Status: New
* Priority: Normal
* Target version: 6.2
* Start date: 2021-08-13
----------------------------------------
YONETANI Tomokazu reported this issue on users@ mailing list: https://lists.dragonflybsd.org/pipermail/users/2021-August/404805.html

<pre>
$ drill  @2001:4860:4860::8888 aaaa leaf.dragonflybsd.org | egrep -v
'^(\;|$)'
Error: error sending query: Could not send or receive, because of network
error
</pre>

unless using TCP query:

<pre>
$ drill -t @2001:4860:4860::8888 aaaa leaf.dragonflybsd.org | egrep -v
'^(\;|$)'
leaf.dragonflybsd.org. 3599 IN AAAA 2001:470:1:43b:1::68
</pre>

Similar DNS queries on other boxes running different OSes don't have the same problem, and tcpdump output shows the response from the DNS server, so I doubt it's an network issue.

<pre>
$ uname -a
DragonFly c60 6.0-RELEASE DragonFly v6.0.0.33.gc7b638-RELEASE #0: Wed Aug 4
20:25:25 JST 2021 root at c60:/usr/obj/build/usr/src/sys/X86_64_GENERIC x86_64
</pre>

----

I also confirmed this issue on leaf, which running master as of Aug 4.



-- 
You have received this notification because you have either subscribed to it, or are involved in it.
To change your notification preferences, please click here: http://bugs.dragonflybsd.org/my/account


More information about the Bugs mailing list