svn commit: r259553 - user/ae/inet6/sys/net
Andrey V. Elsukov
ae at FreeBSD.org
Wed Dec 18 14:45:03 UTC 2013
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;
}
More information about the svn-src-user
mailing list