[Exim] 4.14: IPv6 on glibc 2.2.4 (SuSE-Linux 7.3) systems br…

Top Page
Delete this message
Reply to this message
Author: Lutz Pressler
Date:  
To: exim-users
Subject: [Exim] 4.14: IPv6 on glibc 2.2.4 (SuSE-Linux 7.3) systems broken
Hi,

I'm afraid, but the change in IPv6 socket initialization
(46 b of ChangeLog-4.14)
Exim calls getaddrinfo() instead of inet_pton() to convert a textual
IPv6 address for actual use. This function recognizes the percent
convention in some operating systems.

seems to have broken IPv6 support on (older) Linux systems.

Tested on a SuSE 7.3 system with latest available glibc (2.2.4)

configure-file containing
"local_interfaces = <; 0.0.0.0 ; 2001:638:603:abcd::1"

leads to

# strace -fF -e bind,listen /opt/exim4/bin/exim-4.14-1 -bd
bind(1, {sin_family=AF_INET, sin_port=htons(25),
  sin_addr=inet_addr("0.0.0.0")}}, 16) = 0
listen(1, 20)                           = 0
bind(2, {sin_family=AF_INET, sin_port=htons(25),
  sin_addr=inet_addr("255.255.255.255")}}, 16) = -1 EINVAL (Invalid argument)


Using IPv6 address only, equivalent behaviour is to be seen.
Why is bind called with AF_INET? Probably getaddrinfo is broken in this
libc version.

Anybody else able to confirm this effect? Haven't been able to test with
more modern glibc versions or using more involved debugging methods yet.

Maybe it is necessary to make the old mechanism optionally available, too?

Regards - and thanks for the improvements in 4.14 anyway :),
Lutz

--
  _              |  Lutz Pressler          |  Tel: ++49-551-3700002
 |_     |\ |     |  Service Network GmbH   |  FAX: ++49-551-3700009
 ._|ER  | \|ET   |  Bahnhofsallee 1b       |   mailto:lp@SerNet.DE
Service Network  |  D-37081 Goettingen     |  http://www.SerNet.DE/