--- Begin Message ---
Package: nscd
Version: 2.7-18
Severity: normal
Hi,
due to complicated circumstances it is perhaps not important to go into
here, I have an nscd instance, compiled for i386, that should serve a mix of
i386 and amd64 clients over the same unix domain socket (imagine, for
example, chroots with different architectures).
Apparently, some structure is aligned in an unfortunate way or maybe missing
a 'packed' attribute; while 32bit clients can query nscd fine, queries from
64bit clients fail.
I have obtained straces of the two kinds of behaviour.
Good (i386 client):
connect(3, {sa_family=AF_FILE, path="/var/run/nscd/socket"...}, 110) = 0
send(3, "\x02\x00\x00\x00\x0b\x00\x00\x00\x07\x00\x00\x00\x70\x61\x73\x73\x77\x64\x00"..., 19, MSG_NOSIGNAL) = 19
poll([{fd=3, events=POLLIN|POLLERR|POLLHUP}], 1, 5000) = 1 ([{fd=3, revents=POLLIN|POLLHUP}])
recvmsg(3, {msg_name(0)=NULL, msg_iov(2)=[{"\x70\x61\x73\x73\x77\x64\x00"..., 7}, {"\xb8\x4f\x03\x00\x00\x00\x00\x00"..., 8}], msg_controllen=16, {cmsg_len=16, cmsg_level=SOL_SOCKET, cmsg_type=SCM_RIGHTS, {4}}, msg_flags=0}, MSG_CMSG_CLOEXEC) = 15
mmap2(NULL, 217016, PROT_READ, MAP_SHARED, 4, 0) = 0xf7d8a000
close(4) = 0
close(3) = 0
fstat64(1, {st_dev=makedev(0, 10), st_ino=22, st_mode=S_IFCHR|0620, st_nlink=1, st_uid=0, st_gid=5, st_blksize=1024, st_blocks=0, st_rdev=makedev(136, 20), st_atime=2009/01/20-18:46:57, st_mtime=2009/01/20-18:46:57, st_ctime=2009/01/20-18:31:00}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xf7f06000
write(1, "foobar:x:1061:1061:foo bar:/home/foobar:/bin/bash\n"..., 55) = 55
exit_group(0) = ?
Bad (amd64 client):
connect(3, {sa_family=AF_FILE, path="/var/run/nscd/socket"...}, 110) = 0
sendto(3, "\x02\x00\x00\x00\x0b\x00\x00\x00\x07\x00\x00\x00\x70\x61\x73\x73\x77\x64\x00"..., 19, MSG_NOSIGNAL, NULL, 0) = 19
poll([{fd=3, events=POLLIN|POLLERR|POLLHUP}], 1, 5000) = 1 ([{fd=3, revents=POLLIN|POLLHUP}])
recvmsg(3, {msg_name(0)=NULL, msg_iov(2)=[{"\x70\x61\x73\x73\x77\x64\x00"..., 7}, {"\xb8\x4f\x03\x00\x00\x00\x00\x00"..., 8}], msg_controllen=24, {cmsg_len=20, cmsg_level=SOL_SOCKET, cmsg_type=SCM_RIGHTS, {4}}, msg_flags=0}, MSG_CMSG_CLOEXEC) = 15
mmap(NULL, 217016, PROT_READ, MAP_SHARED, 4, 0) = 0x2ac05280d000
close(4) = 0
close(3) = 0
exit_group(2) = ?
I imagine the problem may be related to
msg_controllen=16, {cmsg_len=16, cmsg_level=SOL_SOCKET, ...
vs.
msg_controllen=24, {cmsg_len=20, cmsg_level=SOL_SOCKET, ...
It would be great not to have to run two instances of nscd that both cache
the same backend.
-- System Information:
Debian Release: lenny/sid
APT prefers unstable
APT policy: (500, 'unstable')
Architecture: i386
Kernel: Linux 2.6.22.19-vs2.2.0.7-stop
Locale: LANG=C, LC_CTYPE=C
Shell: /bin/sh linked to /bin/bash
Best regards,
Andras
--
Andras Korn <korn at chardonnay.math.bme.hu>
<http://chardonnay.math.bme.hu/~korn/> QOTD:
All generalizations are false (incl. this one)
--- End Message ---