Author: stas
Date: Fri Jan  8 00:21:55 2016
New Revision: 293401
URL: https://svnweb.freebsd.org/changeset/base/293401

Log:
  MFC r292047: RPC: populate local address for rendezvous transporter.

Modified:
  stable/10/lib/libc/rpc/svc_vc.c
Directory Properties:
  stable/10/   (props changed)

Modified: stable/10/lib/libc/rpc/svc_vc.c
==============================================================================
--- stable/10/lib/libc/rpc/svc_vc.c     Fri Jan  8 00:07:37 2016        
(r293400)
+++ stable/10/lib/libc/rpc/svc_vc.c     Fri Jan  8 00:21:55 2016        
(r293401)
@@ -292,8 +292,8 @@ rendezvous_request(xprt, msg)
        int sock, flags;
        struct cf_rendezvous *r;
        struct cf_conn *cd;
-       struct sockaddr_storage addr;
-       socklen_t len;
+       struct sockaddr_storage addr, sslocal;
+       socklen_t len, slen;
        struct __rpc_sockinfo si;
        SVCXPRT *newxprt;
        fd_set cleanfds;
@@ -358,6 +358,20 @@ again:
                __xdrrec_setnonblock(&cd->xdrs, cd->maxrec);
        } else
                cd->nonblock = FALSE;
+       slen = sizeof(struct sockaddr_storage);
+       if(_getsockname(sock, (struct sockaddr *)(void *)&sslocal, &slen) < 0) {
+               warnx("svc_vc_create: could not retrieve local addr");
+               newxprt->xp_ltaddr.maxlen = newxprt->xp_ltaddr.len = 0;
+       } else {
+               newxprt->xp_ltaddr.maxlen = newxprt->xp_ltaddr.len = 
sslocal.ss_len;
+               newxprt->xp_ltaddr.buf = mem_alloc((size_t)sslocal.ss_len);
+               if (newxprt->xp_ltaddr.buf == NULL) {
+                       warnx("svc_vc_create: no mem for local addr");
+                       newxprt->xp_ltaddr.maxlen = newxprt->xp_ltaddr.len = 0;
+               } else {
+                       memcpy(newxprt->xp_ltaddr.buf, &sslocal, 
(size_t)sslocal.ss_len);
+               }
+       }
 
        gettimeofday(&cd->last_recv_time, NULL);
 
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to