3da827
diff -up rpcbind-0.2.0/src/rpcb_svc_com.c.orig rpcbind-0.2.0/src/rpcb_svc_com.c
3da827
--- rpcbind-0.2.0/src/rpcb_svc_com.c.orig	2015-11-30 14:57:10.267576072 -0500
3da827
+++ rpcbind-0.2.0/src/rpcb_svc_com.c	2015-11-30 14:59:06.305393416 -0500
3da827
@@ -1204,12 +1204,33 @@ check_rmtcalls(struct pollfd *pfds, int
3da827
 	return (ncallbacks_found);
3da827
 }
3da827
 
3da827
+/*
3da827
+ * This is really a helper function defined in libtirpc, 
3da827
+ * but unfortunately, it hasn't been exported yet.
3da827
+ */
3da827
+static struct netbuf *
3da827
+__rpc_set_netbuf(struct netbuf *nb, const void *ptr, size_t len)
3da827
+{
3da827
+	if (nb->len != len) {
3da827
+		if (nb->len)
3da827
+			mem_free(nb->buf, nb->len);
3da827
+		nb->buf = mem_alloc(len);
3da827
+		if (nb->buf == NULL)
3da827
+			return NULL;
3da827
+
3da827
+		nb->maxlen = nb->len = len;
3da827
+	}
3da827
+	memcpy(nb->buf, ptr, len);
3da827
+	return nb;
3da827
+}
3da827
+
3da827
 static void
3da827
 xprt_set_caller(SVCXPRT *xprt, struct finfo *fi)
3da827
 {
3da827
+	const struct netbuf *caller = fi->caller_addr;
3da827
 	u_int32_t *xidp;
3da827
 
3da827
-	*(svc_getrpccaller(xprt)) = *(fi->caller_addr);
3da827
+	__rpc_set_netbuf(svc_getrpccaller(xprt), caller->buf, caller->len);
3da827
 	xidp = __rpcb_get_dg_xidp(xprt);
3da827
 	*xidp = fi->caller_xid;
3da827
 }