Walter Hofmann wrote:
> First, to answer your questions:
> 
> - ping is netkit-ping 0.10-10.3.
> - a full strace of the failing ping (as root) is below
> 
> My own theory:
> 
> - It is not a problem with ping, other programs fail as well.
> - It fails after trying to send to 224.0.0.251. This is a multicast 
>   address. My name server is at 127.0.0.1. So it is not the usual 
>   UDP packet to the name server, but one by libnss-mdns.
> - The sendmsg call probably fails because of some firewall rule which 
>   prohibits multicast UDP.
> - Instead of failing this attempt and continuing with the usual "dns" 
>   method the whole name resolution process fails -- this is the bug.

Part of the problem is that your /etc/resolv.conf has "search local".
This means that every dns lookup is first tried in the "local" domain,
so it's trying to look up google.com.local.

If I configure my system the same, with "search local" and avahi disabled,
I can get similar results:

connect(4, {sa_family=AF_FILE, path="/var/run/avahi-daemon/socket"}, 110) = -1 
ENOENT (No such file or directory)
...
open("/etc/resolv.conf", O_RDONLY)      = 5
fstat64(5, {st_mode=S_IFREG|0644, st_size=36, ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 
0xb7fad000
read(5, "search local\nnameserver 192.168."..., 4096) = 36
read(5, "", 4096)                       = 0
close(5)                                = 0
munmap(0xb7fad000, 4096)                = 0
open("/dev/urandom", O_RDONLY)          = 5
read(5, "In", 2)                        = 2
close(5)                                = 0
...
sendmsg(4, {msg_name(16)={sa_family=AF_INET, sin_port=htons(5353), 
sin_addr=inet_addr("224.0.0.251")}, 
msg_iov(1)=[{"nI\0\0\0\1\0\0\0\0\0\0\3www\6google\3com\5loca"..., 38}], 
msg_controllen=24, {cmsg_len=24, cmsg
_level=SOL_IP, cmsg_type=, ...}, msg_flags=0}, MSG_DONTROUTE) = 38
gettimeofday({1160855134, 926700}, NULL) = 0
recvmsg(4, 0xbfedc138, 0)               = -1 EAGAIN (Resource temporarily 
unavailable)
gettimeofday({1160855134, 926857}, NULL) = 0
select(5, [4], NULL, NULL, {0, 999843}) = 0 (Timeout)
close(4)                                = 0
write(2, "ping: unknown host www.google.co"..., 34) = 34
exit_group(2)                           = ?

If I enable avahi, it still fails, although differently:

connect(4, {sa_family=AF_FILE, path="/var/run/avahi-daemon/socket"}, 110) = 0
fcntl64(4, F_GETFL)                     = 0x2 (flags O_RDWR)
fstat64(4, {st_mode=S_IFSOCK|0777, st_size=0, ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 
0xb7fd4000
_llseek(4, 0, 0xbf9dab10, SEEK_CUR)     = -1 ESPIPE (Illegal seek)
write(4, "RESOLVE-HOSTNAME-IPV4 www.google"..., 43) = 43
read(4, "-15 Timeout reached\n", 1024)  = 20
close(4)                                = 0
munmap(0xb7fd4000, 4096)                = 0
write(2, "ping: unknown host www.google.co"..., 34ping: unknown host 
www.google.com

Could nss-mdns be changed to check for a resolv.conf with "search local" and
somehow avoid all the unnecessary mdns queries for every (!!) dns lookup that
are entailed? Or maybe it could return immediately for domains like 
google.com.local while doing its thing for foo.local?

(I'd like to be able to put "search local" in my resolv.conf, for networks
that don't have any other dns than mdns, so it seems like a legitimate thing
to want to do.)

-- 
see shy jo
execve("/bin/ping", ["ping", "www.google.com"], [/* 42 vars */]) = 0
uname({sys="Linux", node="kodama", ...}) = 0
brk(0)                                  = 0x805d000
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
mmap2(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 
0xb7f47000
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY)      = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=90581, ...}) = 0
mmap2(NULL, 90581, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb7f30000
close(3)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
open("/lib/tls/i686/cmov/libc.so.6", O_RDONLY) = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\240O\1"..., 512) = 512
fstat64(3, {st_mode=S_IFREG|0644, st_size=1241580, ...}) = 0
mmap2(NULL, 1247388, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 
0xb7dff000
mmap2(0xb7f26000, 28672, PROT_READ|PROT_WRITE, 
MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x127) = 0xb7f26000
mmap2(0xb7f2d000, 10396, PROT_READ|PROT_WRITE, 
MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xb7f2d000
close(3)                                = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 
0xb7dfe000
mprotect(0xb7f26000, 20480, PROT_READ)  = 0
set_thread_area({entry_number:-1 -> 6, base_addr:0xb7dfe8e0, limit:1048575, 
seg_32bit:1, contents:0, read_exec_only:0, limit_in_pages:1, seg_not_present:0, 
useable:1}) = 0
munmap(0xb7f30000, 90581)               = 0
getuid32()                              = 0
brk(0)                                  = 0x805d000
brk(0x807e000)                          = 0x807e000
open("/etc/nsswitch.conf", O_RDONLY)    = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=503, ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 
0xb7f46000
read(3, "# /etc/nsswitch.conf\n#\n# Example"..., 4096) = 503
read(3, "", 4096)                       = 0
close(3)                                = 0
munmap(0xb7f46000, 4096)                = 0
open("/etc/ld.so.cache", O_RDONLY)      = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=90581, ...}) = 0
mmap2(NULL, 90581, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb7f30000
close(3)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
open("/usr/lib/libnss_db.so.2", O_RDONLY) = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\0\21\0"..., 512) = 512
fstat64(3, {st_mode=S_IFREG|0644, st_size=16540, ...}) = 0
mmap2(NULL, 19820, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 
0xb7df9000
mmap2(0xb7dfd000, 4096, PROT_READ|PROT_WRITE, 
MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x3) = 0xb7dfd000
close(3)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
open("/lib/tls/i686/cmov/libnss_files.so.2", O_RDONLY) = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\200\33"..., 512) = 512
fstat64(3, {st_mode=S_IFREG|0644, st_size=38372, ...}) = 0
mmap2(NULL, 41620, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 
0xb7dee000
mmap2(0xb7df7000, 8192, PROT_READ|PROT_WRITE, 
MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x8) = 0xb7df7000
close(3)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
open("/usr/lib/libdb-4.3.so", O_RDONLY) = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\220o\1"..., 512) = 512
fstat64(3, {st_mode=S_IFREG|0644, st_size=928628, ...}) = 0
mmap2(NULL, 932188, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 
0xb7d0a000
mmap2(0xb7deb000, 12288, PROT_READ|PROT_WRITE, 
MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0xe0) = 0xb7deb000
close(3)                                = 0
munmap(0xb7f30000, 90581)               = 0
open("/etc/mtab", O_RDONLY)             = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=720, ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 
0xb7f46000
read(3, "/dev/hda1 / ext3 rw,user_xattr,e"..., 4096) = 720
close(3)                                = 0
munmap(0xb7f46000, 4096)                = 0
open("/proc/stat", O_RDONLY)            = 3
fstat64(3, {st_mode=S_IFREG|0444, st_size=0, ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 
0xb7f46000
read(3, "cpu  1380328 6194 134437 9768600"..., 1024) = 722
read(3, "", 1024)                       = 0
close(3)                                = 0
munmap(0xb7f46000, 4096)                = 0
open("/var/lib/misc/protocols.db", O_RDWR|O_LARGEFILE) = -1 ENOENT (No such 
file or directory)
open("/var/lib/misc/protocols.db", O_RDWR|O_LARGEFILE) = -1 ENOENT (No such 
file or directory)
open("/var/lib/misc/protocols.db", O_RDWR|O_LARGEFILE) = -1 ENOENT (No such 
file or directory)
stat64("/var/lib/misc/protocols.db", 0xbfdf07a8) = -1 ENOENT (No such file or 
directory)
open("/etc/protocols", O_RDONLY)        = 3
fcntl64(3, F_GETFD)                     = 0
fcntl64(3, F_SETFD, FD_CLOEXEC)         = 0
fstat64(3, {st_mode=S_IFREG|0644, st_size=2478, ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 
0xb7f46000
read(3, "# Internet (IP) protocols\n#\n# Up"..., 4096) = 2478
close(3)                                = 0
munmap(0xb7f46000, 4096)                = 0
socket(PF_INET, SOCK_RAW, IPPROTO_ICMP) = 3
getuid32()                              = 0
setuid32(0)                             = 0
gettimeofday({1160853787, 365230}, NULL) = 0
getpid()                                = 9238
open("/etc/resolv.conf", O_RDONLY)      = 4
fstat64(4, {st_mode=S_IFREG|0644, st_size=42, ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 
0xb7f46000
read(4, "search kitenet.net\nnameserver 19"..., 4096) = 42
read(4, "", 4096)                       = 0
close(4)                                = 0
munmap(0xb7f46000, 4096)                = 0
socket(PF_FILE, SOCK_STREAM, 0)         = 4
fcntl64(4, F_GETFL)                     = 0x2 (flags O_RDWR)
fcntl64(4, F_SETFL, O_RDWR|O_NONBLOCK)  = 0
connect(4, {sa_family=AF_FILE, path="/var/run/nscd/socket"}, 110) = -1 ENOENT 
(No such file or directory)
close(4)                                = 0
socket(PF_FILE, SOCK_STREAM, 0)         = 4
fcntl64(4, F_GETFL)                     = 0x2 (flags O_RDWR)
fcntl64(4, F_SETFL, O_RDWR|O_NONBLOCK)  = 0
connect(4, {sa_family=AF_FILE, path="/var/run/nscd/socket"}, 110) = -1 ENOENT 
(No such file or directory)
close(4)                                = 0
open("/etc/host.conf", O_RDONLY)        = 4
fstat64(4, {st_mode=S_IFREG|0644, st_size=9, ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 
0xb7f46000
read(4, "multi on\n", 4096)             = 9
read(4, "", 4096)                       = 0
close(4)                                = 0
munmap(0xb7f46000, 4096)                = 0
open("/etc/hosts", O_RDONLY)            = 4
fcntl64(4, F_GETFD)                     = 0
fcntl64(4, F_SETFD, FD_CLOEXEC)         = 0
fstat64(4, {st_mode=S_IFREG|0644, st_size=750, ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 
0xb7f46000
read(4, "127.0.0.1\tkodama.kitenet.net loc"..., 4096) = 750
read(4, "", 4096)                       = 0
close(4)                                = 0
munmap(0xb7f46000, 4096)                = 0
open("/etc/ld.so.cache", O_RDONLY)      = 4
fstat64(4, {st_mode=S_IFREG|0644, st_size=90581, ...}) = 0
mmap2(NULL, 90581, PROT_READ, MAP_PRIVATE, 4, 0) = 0xb7f30000
close(4)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
open("/usr/lib/libnss_mdns4_minimal.so.2", O_RDONLY) = 4
read(4, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\360\26"..., 512) = 512
fstat64(4, {st_mode=S_IFREG|0644, st_size=22164, ...}) = 0
mmap2(NULL, 21024, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 4, 0) = 
0xb7d04000
mmap2(0xb7d09000, 4096, PROT_READ|PROT_WRITE, 
MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 4, 0x5) = 0xb7d09000
close(4)                                = 0
munmap(0xb7f30000, 90581)               = 0
open("/etc/resolv.conf", O_RDONLY)      = 4
fstat64(4, {st_mode=S_IFREG|0644, st_size=42, ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 
0xb7f46000
read(4, "search kitenet.net\nnameserver 19"..., 4096) = 42
read(4, "", 4096)                       = 0
close(4)                                = 0
munmap(0xb7f46000, 4096)                = 0
open("/etc/ld.so.cache", O_RDONLY)      = 4
fstat64(4, {st_mode=S_IFREG|0644, st_size=90581, ...}) = 0
mmap2(NULL, 90581, PROT_READ, MAP_PRIVATE, 4, 0) = 0xb7f30000
close(4)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
open("/lib/tls/i686/cmov/libnss_dns.so.2", O_RDONLY) = 4
read(4, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\340\r\0"..., 512) = 512
fstat64(4, {st_mode=S_IFREG|0644, st_size=17840, ...}) = 0
mmap2(NULL, 20616, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 4, 0) = 
0xb7cfe000
mmap2(0xb7d02000, 8192, PROT_READ|PROT_WRITE, 
MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 4, 0x3) = 0xb7d02000
close(4)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
open("/lib/tls/i686/cmov/libresolv.so.2", O_RDONLY) = 4
read(4, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\200$\0"..., 512) = 512
fstat64(4, {st_mode=S_IFREG|0644, st_size=67364, ...}) = 0
mmap2(NULL, 75976, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 4, 0) = 
0xb7ceb000
mmap2(0xb7cfa000, 8192, PROT_READ|PROT_WRITE, 
MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 4, 0xf) = 0xb7cfa000
mmap2(0xb7cfc000, 6344, PROT_READ|PROT_WRITE, 
MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xb7cfc000
close(4)                                = 0
munmap(0xb7f30000, 90581)               = 0
socket(PF_INET, SOCK_DGRAM, IPPROTO_IP) = 4
connect(4, {sa_family=AF_INET, sin_port=htons(53), 
sin_addr=inet_addr("192.168.1.1")}, 28) = 0
fcntl64(4, F_GETFL)                     = 0x2 (flags O_RDWR)
fcntl64(4, F_SETFL, O_RDWR|O_NONBLOCK)  = 0
gettimeofday({1160853787, 371328}, NULL) = 0
poll([{fd=4, events=POLLOUT, revents=POLLOUT}], 1, 0) = 1
send(4, "\217\243\1\0\0\1\0\0\0\0\0\0\3www\6google\3com\0\0\1\0"..., 32, 0) = 32
poll([{fd=4, events=POLLIN, revents=POLLIN}], 1, 5000) = 1
ioctl(4, FIONREAD, [94])                = 0
recvfrom(4, "\217\243\201\200\0\1\0\3\0\0\0\0\3www\6google\3com\0\0"..., 1024, 
0, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("192.168.1.1")}, 
[16]) = 94
close(4)                                = 0
setsockopt(3, SOL_SOCKET, SO_BROADCAST, [1], 4) = 0
setsockopt(3, SOL_SOCKET, SO_RCVBUF, [49152], 4) = 0
fstat64(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 7), ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 
0xb7f46000
write(1, "PING www.l.google.com (64.233.17"..., 53) = 53
rt_sigaction(SIGINT, {0x80492b0, [INT], SA_RESTART}, {SIG_DFL}, 8) = 0
rt_sigaction(SIGALRM, {0x8048f60, [ALRM], SA_RESTART}, {SIG_DFL}, 8) = 0
gettimeofday({1160853787, 375560}, NULL) = 0
sendto(3, "\10\0\275~\26$\0\0E19\33\0\5\273\10\10\t\n\v\f\r\16\17"..., 64, 0, 
{sa_family=AF_INET, sin_port=htons(0), sin_addr=inet_addr("64.233.179.99")}, 
16) = 64
rt_sigaction(SIGALRM, {0x8048f60, [ALRM], SA_RESTART}, {0x8048f60, [ALRM], 
SA_RESTART}, 8) = 0
alarm(1)                                = 0
recvfrom(3, "[EMAIL PROTECTED]@\351\263c\300\250\1\2\0\0\305"..., 192, 0, 
{sa_family=AF_INET, sin_port=htons(0), sin_addr=inet_addr("64.233.179.99")}, 
[16]) = 84
gettimeofday({1160853787, 412290}, NULL) = 0
write(1, "64 bytes from 64.233.179.99: icm"..., 61) = 61
recvfrom(3, 0x805f288, 192, 0, 0xbfdf0df4, 0xbfdf0e1c) = ? ERESTARTSYS (To be 
restarted)
--- SIGINT (Interrupt) @ 0 (0) ---
rt_sigaction(SIGINT, {SIG_IGN}, {0x80492b0, [INT], SA_RESTART}, 8) = 0
write(1, "\n", 1)                       = 1
write(1, "--- www.l.google.com ping statis"..., 41) = 41
write(1, "1 packets transmitted, 1 packets"..., 58) = 58
write(1, "round-trip min/avg/max = 36.7/36"..., 43) = 43
munmap(0xb7f46000, 4096)                = 0
exit_group(0)                           = ?

Attachment: signature.asc
Description: Digital signature

Reply via email to