]>
Commit | Line | Data |
---|---|---|
3911f511 JR |
1 | commit f8ff8f0de33606ff544dc87c0a9993fd3a0f5475 |
2 | Author: Steve Dickson <steved@redhat.com> | |
3 | Date: Mon Jul 30 07:26:45 2007 -0400 | |
4 | ||
5 | - Make sure remote address (xp_rtaddr) is populated | |
6 | with the correct type of address. | |
7 | ||
8 | Signed-off-by: Steve Dickson <steved@redhat.com> | |
9 | ||
10 | diff --git a/src/svc_vc.c b/src/svc_vc.c | |
11 | index 48494e1..3d77aef 100644 | |
12 | --- a/src/svc_vc.c | |
13 | +++ b/src/svc_vc.c | |
14 | @@ -239,7 +239,10 @@ svc_fd_create(fd, sendsize, recvsize) | |
15 | warnx("svc_fd_create: no mem for local addr"); | |
16 | goto freedata; | |
17 | } | |
18 | - memcpy(ret->xp_rtaddr.buf, &sin6, (size_t)sizeof(ss)); | |
19 | + if (ss.ss_family == AF_INET) | |
20 | + memcpy(ret->xp_rtaddr.buf, &ss, (size_t)sizeof(ss)); | |
21 | + else | |
22 | + memcpy(ret->xp_rtaddr.buf, &sin6, (size_t)sizeof(ss)); | |
23 | #ifdef PORTMAP | |
24 | if (sin6.sin6_family == AF_INET6 || sin6.sin6_family == AF_LOCAL) { | |
25 | memcpy(&ret->xp_raddr, ret->xp_rtaddr.buf, | |
26 | @@ -343,20 +346,23 @@ again: | |
27 | newxprt = makefd_xprt(sock, r->sendsize, r->recvsize); | |
28 | if (addr.ss_family == AF_INET) { | |
29 | map_ipv4_to_ipv6((struct sockaddr_in *)&addr, &sin6); | |
30 | - len = sizeof(struct sockaddr_in6); | |
31 | } else { | |
32 | memcpy(&sin6, &addr, len); | |
33 | } | |
34 | newxprt->xp_rtaddr.buf = mem_alloc(len); | |
35 | if (newxprt->xp_rtaddr.buf == NULL) | |
36 | return (FALSE); | |
37 | - memcpy(newxprt->xp_rtaddr.buf, &sin6, len); | |
38 | + | |
39 | + if (addr.ss_family == AF_INET) | |
40 | + memcpy(newxprt->xp_rtaddr.buf, &addr, len); | |
41 | + else | |
42 | + memcpy(newxprt->xp_rtaddr.buf, &sin6, len); | |
43 | newxprt->xp_rtaddr.maxlen = newxprt->xp_rtaddr.len = len; | |
44 | #ifdef PORTMAP | |
45 | if (sin6.sin6_family == AF_INET6 || sin6.sin6_family == AF_LOCAL) { | |
46 | memcpy(&newxprt->xp_raddr, newxprt->xp_rtaddr.buf, | |
47 | sizeof(struct sockaddr_in6)); | |
48 | - newxprt->xp_addrlen = len; | |
49 | + newxprt->xp_addrlen = sizeof(struct sockaddr_in6); | |
50 | } | |
51 | #endif /* PORTMAP */ | |
52 | if (__rpc_fd2sockinfo(sock, &si) && si.si_proto == IPPROTO_TCP) { |