From: Alan T. DeKok Date: Fri, 23 Mar 2018 15:01:02 +0000 (-0400) Subject: set correct src/dst ip/port for TCP, too. May help with #2199 X-Git-Tag: release_3_0_17~38 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a2676c233babd2a40df202ed943cc3cc4bd24cfc;p=thirdparty%2Ffreeradius-server.git set correct src/dst ip/port for TCP, too. May help with #2199 --- diff --git a/src/lib/packet.c b/src/lib/packet.c index c258c60ae4b..6d5a0e5fbdf 100644 --- a/src/lib/packet.c +++ b/src/lib/packet.c @@ -925,8 +925,25 @@ RADIUS_PACKET *fr_packet_list_recv(fr_packet_list_t *pl, fd_set *set) #ifdef WITH_TCP if (pl->sockets[start].proto == IPPROTO_TCP) { packet = fr_tcp_recv(pl->sockets[start].sockfd, 0); + + /* + * We always know src/dst ip/port for TCP + * sockets. So just fill them in. Since + * we read the packet from the TCP + * socket, we invert src/dst. + */ + packet->dst_ipaddr = pl->sockets[start].src_ipaddr; + packet->dst_port = pl->sockets[start].src_port; + packet->src_ipaddr = pl->sockets[start].dst_ipaddr; + packet->src_port = pl->sockets[start].dst_port; + } else #endif + + /* + * Rely on rad_recv() to fill in the required + * fields. + */ packet = rad_recv(NULL, pl->sockets[start].sockfd, 0); if (!packet) continue;