changeset 3894:7c0146a89509

6483377 ipfilter option reply-to not working
author jojemann
date Mon, 26 Mar 2007 05:47:53 -0700
parents 4115db3e65ea
children 811da2ad2260
files usr/src/uts/common/inet/ipf/ip_fil_solaris.c usr/src/uts/common/inet/ipf/ip_nat.c usr/src/uts/common/inet/ipf/ip_state.c
diffstat 3 files changed, 8 insertions(+), 19 deletions(-) [+]
line wrap: on
line diff
--- a/usr/src/uts/common/inet/ipf/ip_fil_solaris.c	Sun Mar 25 23:58:42 2007 -0700
+++ b/usr/src/uts/common/inet/ipf/ip_fil_solaris.c	Mon Mar 26 05:47:53 2007 -0700
@@ -1754,20 +1754,14 @@
 
 		saveifp = fin->fin_ifp;
 		fin->fin_ifp = (void *)inj_data.ni_physical;
+		fin->fin_flx &= ~FI_STATE;
 		fin->fin_out = 1;
 		(void) fr_acctpkt(fin, &pass);
 		fin->fin_fr = NULL;
 		if (!fr || !(fr->fr_flags & FR_RETMASK))
 			(void) fr_checkstate(fin, &pass);
-		switch (fr_checknatout(fin, NULL))
-		{
-		/* FALLTHROUGH */
-		case 0 :
-		case 1 :
-			break;
-		case -1 :
+		if (fr_checknatout(fin, NULL) == -1)
 			goto bad_fastroute;
-		}
 		fin->fin_out = 0;
 		fin->fin_ifp = saveifp;
 
--- a/usr/src/uts/common/inet/ipf/ip_nat.c	Sun Mar 25 23:58:42 2007 -0700
+++ b/usr/src/uts/common/inet/ipf/ip_nat.c	Mon Mar 26 05:47:53 2007 -0700
@@ -1044,7 +1044,7 @@
 		(void) strncpy(n->in_ifnames[1], n->in_ifnames[0], LIFNAMSIZ);
 		n->in_ifps[1] = n->in_ifps[0];
 	} else {
-		n->in_ifps[1] = fr_resolvenic(n->in_ifnames[0], 4, ifs);
+		n->in_ifps[1] = fr_resolvenic(n->in_ifnames[1], 4, ifs);
 	}
 
 	if (n->in_plabel[0] != '\0') {
@@ -3208,16 +3208,9 @@
 	int nflags;
 	void *ifp;
 	u_int hv;
-	frentry_t *fr;
 	ipf_stack_t *ifs = fin->fin_ifs;
 
-	fr = fin->fin_fr;
-
-	if ((fr != NULL) && !(fr->fr_flags & FR_DUP) &&
-	    fr->fr_tif.fd_ifp && fr->fr_tif.fd_ifp != (void *)-1)
-		ifp = fr->fr_tif.fd_ifp;
-	else
-		ifp = fin->fin_ifp;
+	ifp = fin->fin_ifp;
 
 	srcip = src.s_addr;
 	sflags = flags & IPN_TCPUDPICMP;
@@ -3569,8 +3562,9 @@
 	fr = fin->fin_fr;
 	sifp = fin->fin_ifp;
 	if ((fr != NULL) && !(fr->fr_flags & FR_DUP) &&
-	    fr->fr_tif.fd_ifp && fr->fr_tif.fd_ifp != (void *)-1)
-		fin->fin_ifp = fr->fr_tif.fd_ifp;
+	    fr->fr_tifs[fin->fin_rev].fd_ifp &&
+	    fr->fr_tifs[fin->fin_rev].fd_ifp != (void *)-1)
+		fin->fin_ifp = fr->fr_tifs[fin->fin_rev].fd_ifp;
 	ifp = fin->fin_ifp;
 
 	if (!(fin->fin_flx & FI_SHORT) && (fin->fin_off == 0)) {
--- a/usr/src/uts/common/inet/ipf/ip_state.c	Sun Mar 25 23:58:42 2007 -0700
+++ b/usr/src/uts/common/inet/ipf/ip_state.c	Mon Mar 26 05:47:53 2007 -0700
@@ -703,6 +703,7 @@
 
 		fr_resolvedest(&fr->fr_tif, fr->fr_v, ifs);
 		fr_resolvedest(&fr->fr_dif, fr->fr_v, ifs);
+		fr_resolvedest(&fr->fr_rif, fr->fr_v, ifs);
 
 		/*
 		 * send a copy back to userland of what we ended up