summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjojemann <none@none>2007-03-26 05:47:53 -0700
committerjojemann <none@none>2007-03-26 05:47:53 -0700
commitd3675867b91fd66d2450b26b70c27019ceeb261c (patch)
treed6b2a162b51b90e625a360470d5c58b4b75b5a59
parent55730e4c5996512c75a1b9e00003b9f31c7b0417 (diff)
downloadillumos-gate-d3675867b91fd66d2450b26b70c27019ceeb261c.tar.gz
6483377 ipfilter option reply-to not working
-rw-r--r--usr/src/uts/common/inet/ipf/ip_fil_solaris.c10
-rw-r--r--usr/src/uts/common/inet/ipf/ip_nat.c16
-rw-r--r--usr/src/uts/common/inet/ipf/ip_state.c1
3 files changed, 8 insertions, 19 deletions
diff --git a/usr/src/uts/common/inet/ipf/ip_fil_solaris.c b/usr/src/uts/common/inet/ipf/ip_fil_solaris.c
index 8c6853969d..2c4619543e 100644
--- a/usr/src/uts/common/inet/ipf/ip_fil_solaris.c
+++ b/usr/src/uts/common/inet/ipf/ip_fil_solaris.c
@@ -1754,20 +1754,14 @@ frdest_t *fdp;
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;
diff --git a/usr/src/uts/common/inet/ipf/ip_nat.c b/usr/src/uts/common/inet/ipf/ip_nat.c
index 4e008bfe9b..8ea6f48d7a 100644
--- a/usr/src/uts/common/inet/ipf/ip_nat.c
+++ b/usr/src/uts/common/inet/ipf/ip_nat.c
@@ -1044,7 +1044,7 @@ ipf_stack_t *ifs;
(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 @@ struct in_addr src , dst;
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 @@ u_32_t *passp;
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)) {
diff --git a/usr/src/uts/common/inet/ipf/ip_state.c b/usr/src/uts/common/inet/ipf/ip_state.c
index e225d5fd0d..4392746761 100644
--- a/usr/src/uts/common/inet/ipf/ip_state.c
+++ b/usr/src/uts/common/inet/ipf/ip_state.c
@@ -703,6 +703,7 @@ ipf_stack_t *ifs;
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