[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Exim and IPv6 Help
>While I am the maintainer of the OpenBSD port of exim, I have no
>experience of IPv6 outside book reading. If this turns out to be an exim
>/ OpenBSD compatibility issue it should really go to ports@, while if
>this is an OpenBSD IPv6 vs any other OS IPv6 issues then we are probably
>in the right place.
actually, there are other operating systems implemented this way
(= AF_INET6 socket does not grab IPv4 traffic). that includes
at least NetBSD, Win2000 IPv6 beta, KAME/bsdi3, KAME/freebsd2.
i'd suggest exim to listen to both AF_INET and AF_INET6 addresses
>Given Phil (I see you are cc'ed) comments about further release of the
>3.xx branch, if there is an agreed on solution to this that can be added
>as a patch to the existing port (which is *still* not up to 3.31 - mea
>culpa) then drop me a line and I will check (to my ability - see IPv6
>comment above) and commit.
I guess I found the problem with the patch:
>> - if (bind(listen_sockets[sk], (struct sockaddr *)&sin,
>sizeof(sin)) < 0)
>> + if (bind(listen_sockets[sk], (struct sockaddr *)&sin,
>> + #ifdef HAVE_IPV6
>> + ipv6_socket? sizeof(sin.v6) : sizeof(sin.v4)
>> + #else
>> + sizeof(sin)
>> + #endif
>> + ) < 0)
you need to decide the "sizeof" part (3rd arg) dynamically according to
the address family of the listen_sockets[sk]. "ipv6_socket" is, I
guess, a constant. If you use ipv6_socket to determine address family,
you will mistakenly use sizeof(struct sockaddr_in6) while you are
passing sockaddr_in to the 2nd argument.