Win 11 Cygwin dns-utils "dig" and "host": Option -6 causes command to timeout
Brian Inglis
Brian.Inglis@SystematicSW.ab.ca
Thu Feb 15 01:08:11 GMT 2024
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
More information about the Cygwin
mailing list