pure ipv6 interface not accepted by samba (3 & 4)
Jeremy Allison
jra at samba.org
Fri Oct 14 15:13:32 MDT 2011
On Fri, Oct 14, 2011 at 08:41:47PM +0200, Matthieu Patou wrote:
> Hello,
>
> I tried today to start samba4 on one of my computer it has a 6to4
> IPv6 interface and samba was not binding.
>
> Most of the problem is in lib/socket/interfaces.c, in this code:
>
> if (ifaces[total].flags & (IFF_BROADCAST|IFF_LOOPBACK)) {
> make_bcast(&ifaces[total].bcast,
> &ifaces[total].ip,
> &ifaces[total].netmask);
> } else if ((ifaces[total].flags & IFF_POINTOPOINT) &&
> ifptr->ifa_dstaddr ) {
> memcpy(&ifaces[total].bcast,
> ifptr->ifa_dstaddr,
> copy_size);
> }
>
> The 6to4 interface has the flags IFF_POINTTOPOINT interface but no
> ifa_dstaddr as it's not at the IPv6 level a point to point interface
> (at least from my understanding), as we don't have a IFF_BROADCAST
> flag set (I have the impression that this flag is only set on a
> interface that has also an IPv4 address) the first test is not valid
> also, which result in a skipped interface.
>
> I made the following patch in my repo: http://bit.ly/rl0DCs, it's
> basically this:
>
> memcpy(&ifaces[total].bcast,
> ifptr->ifa_dstaddr,
> copy_size);
> +#if defined(HAVE_IPV6)
> + } else if (ifptr->ifa_addr->sa_family == AF_INET6) {
> + const struct sockaddr_in6 *sin6 = (const
> struct sockaddr_in6*)(ifptr->ifa_addr);
> + const struct in6_addr *in6 = (const struct
> in6_addr *)&sin6->sin6_addr;
> +
> + if (IN6_IS_ADDR_LINKLOCAL(in6) ||
> IN6_IS_ADDR_V4COMPAT(in6)) {
> + continue;
> + }
> + /* IPv6 do not have broadcast bydefault
> there is special broadcast address for it*/
> + memset(&ifaces[total].bcast, 0, copy_size);
> +#endif
> } else {
> continue;
> }
>
> My idea is to say we don't care about broadcast when we do IPv6
> because this exact notion do not exists, and in order not to have
> the local link nor the V4compat address we skip this kind of
> addresses.
>
> The result: on my computer I'm now able to start samba4 and have it
> running as a domain controller and listenning on my 6to4 interface.
Thanks Matthieu, looks good to me. Pushed (something similar)
to master.
Log a bug if you need this in 3.6.next.
Jeremy.
More information about the samba-technical
mailing list