diff options
Diffstat (limited to 'sys/contrib/ipfilter/netinet/ip_rcmd_pxy.c')
-rw-r--r-- | sys/contrib/ipfilter/netinet/ip_rcmd_pxy.c | 24 |
1 files changed, 12 insertions, 12 deletions
diff --git a/sys/contrib/ipfilter/netinet/ip_rcmd_pxy.c b/sys/contrib/ipfilter/netinet/ip_rcmd_pxy.c index 0ae0210..1d6bc71 100644 --- a/sys/contrib/ipfilter/netinet/ip_rcmd_pxy.c +++ b/sys/contrib/ipfilter/netinet/ip_rcmd_pxy.c @@ -1,5 +1,5 @@ /* - * $Id: ip_rcmd_pxy.c,v 1.4.2.4 2000/11/01 14:34:20 darrenr Exp $ + * $Id: ip_rcmd_pxy.c,v 1.4.2.5 2001/10/30 16:38:14 darrenr Exp $ */ /* * Simple RCMD transparent proxy for in-kernel use. For use with the NAT @@ -83,10 +83,10 @@ nat_t *nat; { char portbuf[8], *s; struct in_addr swip; - u_short sp, dp; int off, dlen; tcphdr_t *tcp, tcph, *tcp2 = &tcph; fr_info_t fi; + u_short sp; nat_t *ipn; mb_t *m; #if SOLARIS @@ -104,7 +104,7 @@ nat_t *nat; (tcp->th_seq != *(u_32_t *)aps->aps_data)) return 0; - off = (ip->ip_hl << 2) + (tcp->th_off << 2); + off = fin->fin_hlen + (tcp->th_off << 2); #if SOLARIS m = fin->fin_qfm; @@ -129,33 +129,33 @@ nat_t *nat; * Add skeleton NAT entry for connection which will come back the * other way. */ - sp = htons(sp); - dp = htons(fin->fin_data[1]); - ipn = nat_outlookup(fin->fin_ifp, IPN_TCP, nat->nat_p, nat->nat_inip, - ip->ip_dst, (dp << 16) | sp, 0); + bcopy((char *)fin, (char *)&fi, sizeof(fi)); + fi.fin_data[0] = sp; + fi.fin_data[1] = fin->fin_data[1]; + ipn = nat_outlookup(&fi, IPN_TCP, nat->nat_p, nat->nat_inip, + ip->ip_dst, 0); if (ipn == NULL) { int slen; slen = ip->ip_len; ip->ip_len = fin->fin_hlen + sizeof(*tcp); - bcopy((char *)fin, (char *)&fi, sizeof(fi)); bzero((char *)tcp2, sizeof(*tcp2)); tcp2->th_win = htons(8192); - tcp2->th_sport = sp; + tcp2->th_sport = htons(sp); tcp2->th_dport = 0; /* XXX - don't specify remote port */ tcp2->th_off = 5; - fi.fin_data[0] = ntohs(sp); fi.fin_data[1] = 0; fi.fin_dp = (char *)tcp2; fi.fin_dlen = sizeof(*tcp2); swip = ip->ip_src; ip->ip_src = nat->nat_inip; - ipn = nat_new(nat->nat_ptr, ip, &fi, IPN_TCP|FI_W_DPORT, + ipn = nat_new(&fi, ip, nat->nat_ptr, NULL, IPN_TCP|FI_W_DPORT, NAT_OUTBOUND); if (ipn != NULL) { ipn->nat_age = fr_defnatage; fi.fin_fr = &rcmdfr; - (void) fr_addstate(ip, &fi, FI_W_DPORT); + (void) fr_addstate(ip, &fi, NULL, + FI_W_DPORT|FI_IGNOREPKT); } ip->ip_len = slen; ip->ip_src = swip; |