Possible bug in 3.2.7
Remy Zandwijk
remy.zandwijk at falw.vu.nl
Thu Jan 15 13:16:34 GMT 2009
Developers,
I believe there is a bug in Samba 3.2.7. Please refer to:
http://marc.info/?l=samba&m=123188218612431&w=2
"Calling Samba print server with an aliased DNS-name fails"
I invested some time to investigate this problem.
Somewhere in the process a call to the function 'is_myname_or_ipaddr' from
lib/util_sock.c is made. Since I am calling the server by it's DNS CNAME, /*
Handle possible CNAME records - convert to an IP addr. */ applies.
A call to 'print_sockaddr' is made, which calls print_sockaddr_len, which
calls sys_getnameinfo and finaly a call to getnameinfo is made.
The getnameinfo system call fails with error 11, which is a system error. The
reason why this call fails is that the buffer which is being used to store the
IP-address of the CNAME is too small.
Tracing back to the place were the buffer size is determined, we see that this
is done in lib/util_sock.c, line 2066 and further:
print_sockaddr(name,
sizeof(name),
&ss);
Since I am compiling 64-bit and 'name' is a char*, the buffer size is always
8. I believe this is wrong, since an IP-address string will not (most of the
time) fit in 8 bytes.
To test this, I replace 'sizeof' by 'strlen'. This resolves my problem: I can
connect to the server by it's CNAME and I can connect to shared printers.
However, I think 'strlen' is inappropriate too. A CNAME 'a.b.nl' is only 6
bytes in length, so an IP-address will still not fit.
Browsing through the code, I found more places were 'sizeof' is being used. I
did not investigate this, but I imagine this could be wrong too.
Please confirm this indeed is a bug. And please CC me in replies, since I am
not member of the samba-technical list.
Best regards,
Remy Zandwijk
More information about the samba-technical
mailing list