summaryrefslogtreecommitdiffstats
path: root/sys/contrib
diff options
context:
space:
mode:
authorcy <cy@FreeBSD.org>2014-10-12 17:21:15 +0000
committercy <cy@FreeBSD.org>2014-10-12 17:21:15 +0000
commitb41a810b86e24c26d3e84feff9937cf22d642615 (patch)
tree42f3a9b805a3b392faa1331f13a3e8eb9bdf8be5 /sys/contrib
parenta223c6d9ec51c46b10d0b0c19690c3e7616d5c7d (diff)
downloadFreeBSD-src-b41a810b86e24c26d3e84feff9937cf22d642615.zip
FreeBSD-src-b41a810b86e24c26d3e84feff9937cf22d642615.tar.gz
MFC r272555
ipfilter bug #537 NAT rules with sticky have incorrect hostmap IP address. This fixes when an IP address mapping is put in the hostmap table for sticky NAT rules, it ends up having the wrong byte order. Obtained from: ipfilter CVS repo (r1.102), NetBSD CVS repo (r1.12)
Diffstat (limited to 'sys/contrib')
-rw-r--r--sys/contrib/ipfilter/netinet/ip_nat.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/sys/contrib/ipfilter/netinet/ip_nat.c b/sys/contrib/ipfilter/netinet/ip_nat.c
index d664708..6c93810 100644
--- a/sys/contrib/ipfilter/netinet/ip_nat.c
+++ b/sys/contrib/ipfilter/netinet/ip_nat.c
@@ -2946,10 +2946,11 @@ ipf_nat_newrdr(fin, nat, ni)
*/
if (np->in_flags & IPN_SPLIT) {
in.s_addr = np->in_dnip;
+ inb.s_addr = htonl(in.s_addr);
if ((np->in_flags & (IPN_ROUNDR|IPN_STICKY)) == IPN_STICKY) {
hm = ipf_nat_hostmap(softn, NULL, fin->fin_src,
- fin->fin_dst, in, (u_32_t)dport);
+ fin->fin_dst, inb, (u_32_t)dport);
if (hm != NULL) {
in.s_addr = hm->hm_ndstip.s_addr;
move = 0;
@@ -3050,13 +3051,14 @@ ipf_nat_newrdr(fin, nat, ni)
return -1;
}
+ inb.s_addr = htonl(in.s_addr);
nat->nat_ndstaddr = htonl(in.s_addr);
nat->nat_odstip = fin->fin_dst;
nat->nat_nsrcip = fin->fin_src;
nat->nat_osrcip = fin->fin_src;
if ((nat->nat_hm == NULL) && ((np->in_flags & IPN_STICKY) != 0))
nat->nat_hm = ipf_nat_hostmap(softn, np, fin->fin_src,
- fin->fin_dst, in, (u_32_t)dport);
+ fin->fin_dst, inb, (u_32_t)dport);
if (flags & IPN_TCPUDP) {
nat->nat_odport = dport;
OpenPOWER on IntegriCloud