The branch, master has been updated via 8ac431a Fix bug # 9666 - Broken filtering of link-local addresses. from 61f34e2 s3:pylibsmb: make sure we get tevent debug messages
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master - Log ----------------------------------------------------------------- commit 8ac431a22e45611d4bbded67c4c8bd864c343a8f Author: Timur Bakeyev <ti...@freebsd.org> Date: Wed Feb 27 16:25:07 2013 -0800 Fix bug # 9666 - Broken filtering of link-local addresses. This patch should address the problem with Link Local addresses on FreeBSD and Linux. Reviewed-by: Jeremy Allison <j...@samba.org> Reviewed-by: Richard Sharpe <rsha...@samba.org> Autobuild-User(master): Jeremy Allison <j...@samba.org> Autobuild-Date(master): Thu Feb 28 20:56:57 CET 2013 on sn-devel-104 ----------------------------------------------------------------------- Summary of changes: lib/socket/interfaces.c | 28 +++++++++++++++------------- 1 files changed, 15 insertions(+), 13 deletions(-) Changeset truncated at 500 lines: diff --git a/lib/socket/interfaces.c b/lib/socket/interfaces.c index 74c6423..e62da3c 100644 --- a/lib/socket/interfaces.c +++ b/lib/socket/interfaces.c @@ -186,6 +186,21 @@ static int _get_interfaces(TALLOC_CTX *mem_ctx, struct iface_struct **pifaces) memcpy(&ifaces[total].ip, ifptr->ifa_addr, copy_size); memcpy(&ifaces[total].netmask, ifptr->ifa_netmask, copy_size); + /* calculate broadcast address */ +#if defined(HAVE_IPV6) + if (ifptr->ifa_addr->sa_family == AF_INET6) { + struct sockaddr_in6 *sin6 = + (struct sockaddr_in6 *)ifptr->ifa_addr; + struct in6_addr *in6 = + (struct in6_addr *)&sin6->sin6_addr; + + if (IN6_IS_ADDR_LINKLOCAL(in6) || IN6_IS_ADDR_V4COMPAT(in6)) { + continue; + } + /* IPv6 does not have broadcast it uses multicast. */ + memset(&ifaces[total].bcast, '\0', copy_size); + } else +#endif if (ifaces[total].flags & (IFF_BROADCAST|IFF_LOOPBACK)) { make_bcast(&ifaces[total].bcast, &ifaces[total].ip, @@ -195,19 +210,6 @@ static int _get_interfaces(TALLOC_CTX *mem_ctx, struct iface_struct **pifaces) 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 does not have broadcast it uses multicast. */ - memset(&ifaces[total].bcast, '\0', copy_size); -#endif } else { continue; } -- Samba Shared Repository