On 2024-02-14 16:28, Jim Garrison via Cygwin wrote:
Win 11 Cygwin "dig" and "host": Option -6 causes command to hang

TL;DR
-----

It appears "dig" and "host" both depend on the existence of /etc/resolv.conf, but only when the -6 option (send queries over IPv6) is specified.

/etc/resolv.conf does not exist on either my old Win 10 or relatively new Win 11 systems.

I have a vague recollection that at some point, maybe Windows 7 or even XP, there was a Cygwin /etc/resolv.conf that was a link to C:\windows\system32\drivers\etc\resolv.conf, but I don't think this has been true for quite a while if it ever was.  Also resolv.conf does not exist in the windows location either.

Details
-------

Sample:

     # Default query over IPv4
     $ host google.com
     google.com has address 74.125.197.102
     google.com has address 74.125.197.100
     google.com has address 74.125.197.138
     google.com has address 74.125.197.101
     google.com has address 74.125.197.139
     google.com has address 74.125.197.113
     google.com has IPv6 address 2607:f8b0:400e:c03::64
     google.com has IPv6 address 2607:f8b0:400e:c03::71
     google.com has IPv6 address 2607:f8b0:400e:c03::65
     google.com has IPv6 address 2607:f8b0:400e:c03::66
     google.com mail is handled by 10 smtp.google.com.


     # Query over IPv6
     $ host -6 google.com
     ;; connection timed out; no servers could be reached

Ditto!

Without IPv6 nameservers in /etc/resolv.conf I get:

$ host -6 google.com
;; connection timed out; no servers could be reached
Failing assertion due to probable leaked memory in context 0xa00020be0 ("dig") (stats[4].gets == 1).
mem.c:1121: INSIST(ctx->stats[i].gets == 0U) failed.

but with IPv6 nameservers in /etc/resolv.conf I get:

$ host -6 google.com
google.com has address 142.251.211.238
google.com has IPv6 address 2607:f8b0:400a:804::200e
google.com mail is handled by 10 smtp.google.com.

     # Query over IPv6 with explicit DNS server
     $ host -6 google.com 2601:xxx:xxx:xxx:201:2eff:fe70:3bfe
     Using domain server:
     Name: 2601:xxx:xxx:xxx:201:2eff:fe70:3bfe
     Address: 2601:xxx:xxx:xxx:201:2eff:fe70:3bfe#53
     Aliases:

     google.com has address 74.125.197.139
     google.com has address 74.125.197.113
     google.com has address 74.125.197.102
     google.com has address 74.125.197.100
     google.com has address 74.125.197.138
     google.com has address 74.125.197.101
     google.com has IPv6 address 2607:f8b0:400e:c03::71
     google.com has IPv6 address 2607:f8b0:400e:c03::65
     google.com has IPv6 address 2607:f8b0:400e:c03::66
     google.com has IPv6 address 2607:f8b0:400e:c03::64
     google.com mail is handled by 10 smtp.google.com.

I ran the failing command above in strace and saw that it's trying to open /etc/resolv.conf

     [...]
       206  515079 [main] host 2426 open: open(/etc/resolv.conf, 0x0)
        58  515137 [main] host 2426 normalize_posix_path: src /etc/resolv.conf
       59  515196 [main] host 2426 normalize_posix_path: /etc/resolv.conf = normalize_posix_path (/etc/resolv.conf)        63  515259 [main] host 2426 mount_info::conv_to_win32_path: conv_to_win32_path (/etc/resolv.conf)        68  515327 [main] host 2426 mount_info::cygdrive_win32_path: src '/etc/resolv.conf', dst ''        61  515388 [main] host 2426 mount_info::conv_to_win32_path: src_path /etc/resolv.conf, dst C:\cygwin64\etc\resolv.conf, flags 0x30008, rc 0        81  515469 [main] host 2426 symlink_info::check: 0xC0000034 = NtCreateFile (\??\C:\cygwin64\etc\resolv.conf)        82  515551 [main] host 2426 symlink_info::check: 0xC0000034 = NtQueryInformationFile (\??\C:\cygwin64\etc\resolv.conf)        90  515641 [main] host 2426 symlink_info::check: 0xC0000034 = NtCreateFile (\??\C:\cygwin64\etc\resolv.conf.exe)        81  515722 [main] host 2426 symlink_info::check: 0xC0000034 = NtQueryInformationFile (\??\C:\cygwin64\etc\resolv.conf.exe)        90  515812 [main] host 2426 symlink_info::check: 0xC0000034 = NtCreateFile (\??\C:\cygwin64\etc\resolv.conf.lnk)        81  515893 [main] host 2426 symlink_info::check: 0xC0000034 = NtQueryInformationFile (\??\C:\cygwin64\etc\resolv.conf.lnk)        88  515981 [main] host 2426 symlink_info::check: 0xC0000034 = NtCreateFile (\??\C:\cygwin64\etc\resolv.conf.exe.lnk)        82  516063 [main] host 2426 symlink_info::check: 0xC0000034 = NtQueryInformationFile (\??\C:\cygwin64\etc\resolv.conf.exe.lnk)        81  516144 [main] host 2426 symlink_info::check: 0 = symlink.check(C:\cygwin64\etc\resolv.conf, 0x7FFFFB4B0) (mount_flags 0x30008, path_flags 0x0)        64  516208 [main] host 2426 mount_info::conv_to_win32_path: conv_to_win32_path (/etc)        59  516267 [main] host 2426 mount_info::cygdrive_win32_path: src '/etc', dst ''        60  516327 [main] host 2426 mount_info::conv_to_win32_path: src_path /etc, dst C:\cygwin64\etc, flags 0x30008, rc 0        69  516396 [main] host 2426 symlink_info::check: 0x0 = NtCreateFile (\??\C:\cygwin64\etc)
       233  516629 [main] host 2426 symlink_info::check: not a symlink
       65  516694 [main] host 2426 symlink_info::check: 0 = symlink.check(C:\cygwin64\etc, 0x7FFFFB4B0) (mount_flags 0x30008, path_flags 0x0)        62  516756 [main] host 2426 path_conv::check: this->path(C:\cygwin64\etc\resolv.conf), has_acls(1)
        61  516817 [main] host 2426 build_fh_pc: fh 0x80000BE18, dev 000000C3
       60  516877 [main] host 2426 fhandler_base::open: (\??\C:\cygwin64\etc\resolv.conf, 0x0)        89  516966 [main] host 2426 seterrno_from_nt_status: /cygdrive/d/a/scallywag/cygwin/cygwin-3.5.0-1.x86_64/src/newlib-cygwin/winsup/cygwin/fhandler/base.cc:717 status 0xC0000034 -> windows error 2        75  517041 [main] host 2426 geterrno_from_win_error: windows error 2 == errno 2        59  517100 [main] host 2426 fhandler_base::open: 0xC0000034 = NtCreateFile (0x7FF84CA3A060, 0x80100000, \??\C:\cygwin64\etc\resolv.conf, io, NULL, 0x0, 0x7, 0x1, 0x4020, NULL, 0)        85  517185 [main] host 2426 fhandler_base::open: 0 = fhandler_base::open(\??\C:\cygwin64\etc\resolv.conf, 0x0)        90  517275 [main] host 2426 fhandler_base::open_fs: 0 = fhandler_disk_file::open(\??\C:\cygwin64\etc\resolv.conf, 0x0)
        90  517365 [main] host 2426 open: -1 = open(/etc/resolv.conf, 0x0), 
errno 2
     [...]

I confirmed this was the problem by creating /etc/resolv.conf (within the Cygwin root, not a symlink) and included the search domain and IPv4 and IPv6 dns servers, after which the -6 option no longer timed out.

I added a Cygwin postinstall script:

        /etc/postinstall/0p_l_etc_resolv_conf.dash

to create resolv.conf from `ipconfig /all` DNS servers, an internal list of open public DNS servers, and search domains, update:

        /var/run/resolvconf/resolv.conf

when changed, and `ln -frsvt /etc/`, also run from a Scheduled Task on System Restart.

--
Take care. Thanks, Brian Inglis              Calgary, Alberta, Canada

La perfection est atteinte                   Perfection is achieved
non pas lorsqu'il n'y a plus rien à ajouter  not when there is no more to add
mais lorsqu'il n'y a plus rien à retirer     but when there is no more to cut
                                -- Antoine de Saint-Exupéry

--
Problem reports:      https://cygwin.com/problems.html
FAQ:                  https://cygwin.com/faq/
Documentation:        https://cygwin.com/docs.html
Unsubscribe info:     https://cygwin.com/ml/#unsubscribe-simple

Reply via email to