Module Name:    src
Committed By:   darrenr
Date:           Sat Jun 28 08:02:09 UTC 2014

Modified Files:
        src/sys/external/bsd/ipf/netinet: ip_nat.c

Log Message:
#537 NAT rules with sticky have incorrect hostmap IP address


To generate a diff of this commit:
cvs rdiff -u -r1.11 -r1.12 src/sys/external/bsd/ipf/netinet/ip_nat.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/external/bsd/ipf/netinet/ip_nat.c
diff -u src/sys/external/bsd/ipf/netinet/ip_nat.c:1.11 src/sys/external/bsd/ipf/netinet/ip_nat.c:1.12
--- src/sys/external/bsd/ipf/netinet/ip_nat.c:1.11	Thu Feb 27 01:40:07 2014
+++ src/sys/external/bsd/ipf/netinet/ip_nat.c	Sat Jun 28 08:02:09 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: ip_nat.c,v 1.11 2014/02/27 01:40:07 joerg Exp $	*/
+/*	$NetBSD: ip_nat.c,v 1.12 2014/06/28 08:02:09 darrenr Exp $	*/
 
 /*
  * Copyright (C) 2012 by Darren Reed.
@@ -113,7 +113,7 @@ extern struct ifnet vpnif;
 #if !defined(lint)
 #if defined(__NetBSD__)
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ip_nat.c,v 1.11 2014/02/27 01:40:07 joerg Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ip_nat.c,v 1.12 2014/06/28 08:02:09 darrenr Exp $");
 #else
 static const char sccsid[] = "@(#)ip_nat.c	1.11 6/5/96 (C) 1995 Darren Reed";
 static const char rcsid[] = "@(#)Id: ip_nat.c,v 1.1.1.2 2012/07/22 13:45:27 darrenr Exp";
@@ -2894,10 +2894,11 @@ ipf_nat_newrdr(fr_info_t *fin, nat_t *na
 	 */
 	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;
@@ -3004,7 +3005,7 @@ ipf_nat_newrdr(fr_info_t *fin, nat_t *na
 	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;

Reply via email to