diff options
author | jojemann <none@none> | 2007-03-26 05:47:53 -0700 |
---|---|---|
committer | jojemann <none@none> | 2007-03-26 05:47:53 -0700 |
commit | d3675867b91fd66d2450b26b70c27019ceeb261c (patch) | |
tree | d6b2a162b51b90e625a360470d5c58b4b75b5a59 | |
parent | 55730e4c5996512c75a1b9e00003b9f31c7b0417 (diff) | |
download | illumos-gate-d3675867b91fd66d2450b26b70c27019ceeb261c.tar.gz |
6483377 ipfilter option reply-to not working
-rw-r--r-- | usr/src/uts/common/inet/ipf/ip_fil_solaris.c | 10 | ||||
-rw-r--r-- | usr/src/uts/common/inet/ipf/ip_nat.c | 16 | ||||
-rw-r--r-- | usr/src/uts/common/inet/ipf/ip_state.c | 1 |
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 |