Date: Wed, 18 Dec 2013 14:45:03 +0000 (UTC) From: "Andrey V. Elsukov" <ae@FreeBSD.org> To: src-committers@freebsd.org, svn-src-user@freebsd.org Subject: svn commit: r259553 - user/ae/inet6/sys/net Message-ID: <201312181445.rBIEj3TE034145@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: ae Date: Wed Dec 18 14:45:03 2013 New Revision: 259553 URL: http://svnweb.freebsd.org/changeset/base/259553 Log: Update rtsock code to use sockaddr_in6 with jail's functions. Modified: user/ae/inet6/sys/net/rtsock.c Modified: user/ae/inet6/sys/net/rtsock.c ============================================================================== --- user/ae/inet6/sys/net/rtsock.c Wed Dec 18 14:40:32 2013 (r259552) +++ user/ae/inet6/sys/net/rtsock.c Wed Dec 18 14:45:03 2013 (r259553) @@ -508,7 +508,6 @@ rtm_get_jailed(struct rt_addrinfo *info, #ifdef INET6 case AF_INET6: { - struct in6_addr ia6; struct ifaddr *ifa; int found; @@ -519,35 +518,30 @@ rtm_get_jailed(struct rt_addrinfo *info, */ IF_ADDR_RLOCK(ifp); TAILQ_FOREACH(ifa, &ifp->if_addrhead, ifa_link) { - struct sockaddr *sa; - sa = ifa->ifa_addr; - if (sa->sa_family != AF_INET6) + if (ifa->ifa_addr->sa_family != AF_INET6) continue; - bcopy(&((struct sockaddr_in6 *)sa)->sin6_addr, - &ia6, sizeof(struct in6_addr)); - if (prison_check_ip6(cred, &ia6) == 0) { + if (prison_if(cred, ifa->ifa_addr) == 0) { found = 1; break; } } IF_ADDR_RUNLOCK(ifp); + bzero(&saun->sin6, sizeof(struct sockaddr_in6)); + saun->sin6.sin6_len = sizeof(struct sockaddr_in6); + saun->sin6.sin6_family = AF_INET6; if (!found) { /* * As a last resort return the 'default' jail address. */ - ia6 = ((struct sockaddr_in6 *)rt->rt_ifa->ifa_addr)-> - sin6_addr; - if (prison_get_ip6(cred, &ia6) != 0) + if (prison_get_ip6(cred, &saun->sin6) != 0) return (ESRCH); + } else { + struct sockaddr_in6 *sin6; + + sin6 = (struct sockaddr_in6 *)ifa->ifa_addr; + saun->sin6.sin6_addr = sin6->sin6_addr; + saun->sin6.sin6_scope_id = sin6->sin6_scope_id; } - bzero(&saun->sin6, sizeof(struct sockaddr_in6)); - saun->sin6.sin6_len = sizeof(struct sockaddr_in6); - saun->sin6.sin6_family = AF_INET6; - bcopy(&ia6, &saun->sin6.sin6_addr, sizeof(struct in6_addr)); - /* - saun->sin6.sin6_sin6_scope_id = in6_getscopezone(ifp, - in6_addrscope(&ia6)); - */ info->rti_info[RTAX_IFA] = (struct sockaddr *)&saun->sin6; break; }
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201312181445.rBIEj3TE034145>