<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 TRANSITIONAL//EN">
<HTML>
<HEAD>
  <META HTTP-EQUIV="Content-Type" CONTENT="text/html; CHARSET=UTF-8">
  <META NAME="GENERATOR" CONTENT="GtkHTML/3.16.1">
</HEAD>
<BODY>
<B>:-O&nbsp; I'm so sorry!!!! Was mistaken a direction in diff!</B><BR>
<B>My previous post consider cancelled.</B><BR>
<B>This is the right patch:</B><BR>
<BR>
diff -ru squid-2.6.STABLE16/src/comm.c squid-2.6.STABLE16.tproxy-freebind/src/comm.c<BR>
--- squid-2.6.STABLE16/src/comm.c&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2007-04-17 12:39:56.000000000 +0300<BR>
+++ squid-2.6.STABLE16.tproxy-freebind/src/comm.c&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2007-12-18 09:31:55.000000000 +0200<BR>
@@ -162,7 +162,7 @@<BR>
&nbsp;&nbsp;&nbsp;&nbsp; int flags,<BR>
&nbsp;&nbsp;&nbsp;&nbsp; const char *note)<BR>
{<BR>
-&nbsp;&nbsp;&nbsp; return comm_openex(sock_type, proto, addr, port, flags, 0, note);<BR>
+&nbsp;&nbsp;&nbsp; return comm_openex(sock_type, proto, addr, port, flags, 0, note,0);<BR>
}<BR>
<BR>
<BR>
@@ -175,7 +175,8 @@<BR>
&nbsp;&nbsp;&nbsp;&nbsp; u_short port,<BR>
&nbsp;&nbsp;&nbsp;&nbsp; int flags,<BR>
&nbsp;&nbsp;&nbsp;&nbsp; unsigned char TOS,<BR>
-&nbsp;&nbsp;&nbsp; const char *note)<BR>
+&nbsp;&nbsp;&nbsp; const char *note,<BR>
+&nbsp;&nbsp;&nbsp; struct in_addr* tproxy)<BR>
{<BR>
&nbsp;&nbsp;&nbsp;&nbsp; int new_socket;<BR>
&nbsp;&nbsp;&nbsp;&nbsp; int tos = 0;<BR>
@@ -209,6 +210,16 @@<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; debug(5, 0) (&quot;comm_open: setsockopt(IP_TOS) not supported on this platform\n&quot;);<BR>
#endif<BR>
&nbsp;&nbsp;&nbsp;&nbsp; }<BR>
+&nbsp;&nbsp;&nbsp; {<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #define IP_FREEBIND 15<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int x=1;<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (setsockopt(new_socket, SOL_IP, IP_FREEBIND, &amp;x, sizeof(x)) == -1) {<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; debug(20, 1) (&quot;tproxy ip ,port&nbsp; ERROR ASSIGN\n&quot;);<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else if (tproxy){<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; addr.s_addr = tproxy-&gt;s_addr;<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; port=0;<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>
+&nbsp;&nbsp;&nbsp; }<BR>
&nbsp;&nbsp;&nbsp;&nbsp; /* update fdstat */<BR>
&nbsp;&nbsp;&nbsp;&nbsp; debug(5, 5) (&quot;comm_open: FD %d is a new socket\n&quot;, new_socket);<BR>
&nbsp;&nbsp;&nbsp;&nbsp; fd_open(new_socket, FD_SOCKET, note);<BR>
diff -ru squid-2.6.STABLE16/src/forward.c squid-2.6.STABLE16.tproxy-freebind/src/forward.c<BR>
--- squid-2.6.STABLE16/src/forward.c&nbsp;&nbsp;&nbsp; 2007-09-06 00:28:34.000000000 +0300<BR>
+++ squid-2.6.STABLE16.tproxy-freebind/src/forward.c&nbsp;&nbsp;&nbsp; 2007-12-18 14:17:42.000000000 +0200<BR>
@@ -27,7 +27,7 @@<BR>
&nbsp; *&nbsp; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.&nbsp; See the<BR>
&nbsp; *&nbsp; GNU General Public License for more details.<BR>
&nbsp; *<BR>
- *&nbsp; You should have received a copy of the GNU General Public License<BR>
+ *&nbsp; You should have received a copy of theF GNU General Public License<BR>
&nbsp; *&nbsp; along with this program; if not, write to the Free Software<BR>
&nbsp; *&nbsp; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA.<BR>
&nbsp; *<BR>
@@ -556,7 +556,8 @@<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0,<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; COMM_NONBLOCKING,<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tos,<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; url);<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; url,<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (fwdState-&gt;request-&gt;flags.tproxy &amp;&amp; strcmp(host,&quot;127.0.0.2&quot;))?( &amp;( fwdState-&gt;src.sin_addr)):0);<BR>
&nbsp;&nbsp;&nbsp;&nbsp; if (fd &lt; 0) {<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; debug(50, 4) (&quot;fwdConnectStart: %s\n&quot;, xstrerror());<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; err = errorCon(ERR_SOCKET_FAILURE, HTTP_INTERNAL_SERVER_ERROR, fwdState-&gt;request);<BR>
@@ -587,32 +588,6 @@<BR>
&nbsp;&nbsp;&nbsp;&nbsp; if (fs-&gt;peer) {<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; hierarchyNote(&amp;fwdState-&gt;request-&gt;hier, fs-&gt;code, fs-&gt;peer-&gt;name);<BR>
&nbsp;&nbsp;&nbsp;&nbsp; } else {<BR>
-#if LINUX_TPROXY<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (fwdState-&gt;request-&gt;flags.tproxy) {<BR>
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; itp.v.addr.faddr.s_addr = fwdState-&gt;src.sin_addr.s_addr;<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; itp.v.addr.fport = 0;<BR>
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* If these syscalls fail then we just fallback to connecting<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * normally by simply ignoring the errors...<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; itp.op = TPROXY_ASSIGN;<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (setsockopt(fd, SOL_IP, IP_TPROXY, &amp;itp, sizeof(itp)) == -1) {<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; debug(20, 1) (&quot;tproxy ip=%s,0x%x,port=%d ERROR ASSIGN\n&quot;,<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; inet_ntoa(itp.v.addr.faddr),<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; itp.v.addr.faddr.s_addr,<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; itp.v.addr.fport);<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else {<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; itp.op = TPROXY_FLAGS;<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; itp.v.flags = ITP_CONNECT;<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (setsockopt(fd, SOL_IP, IP_TPROXY, &amp;itp, sizeof(itp)) == -1) {<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; debug(20, 1) (&quot;tproxy ip=%x,port=%d ERROR CONNECT\n&quot;,<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; itp.v.addr.faddr.s_addr,<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; itp.v.addr.fport);<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>
-#endif<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; hierarchyNote(&amp;fwdState-&gt;request-&gt;hier, fs-&gt;code, fwdState-&gt;request-&gt;host);<BR>
&nbsp;&nbsp;&nbsp;&nbsp; }<BR>
&nbsp;&nbsp;&nbsp;&nbsp; commConnectStart(fd, host, port, fwdConnectDone, fwdState);<BR>
diff -ru squid-2.6.STABLE16/src/main.c squid-2.6.STABLE16.tproxy-freebind/src/main.c<BR>
--- squid-2.6.STABLE16/src/main.c&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2007-08-31 16:52:10.000000000 +0300<BR>
+++ squid-2.6.STABLE16.tproxy-freebind/src/main.c&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2007-12-05 14:21:51.000000000 +0200<BR>
@@ -487,13 +487,13 @@<BR>
#ifdef _SQUID_OS2_<BR>
&nbsp;&nbsp;&nbsp;&nbsp; return;<BR>
#endif<BR>
-&nbsp;&nbsp;&nbsp; if (geteuid() == 0) {<BR>
+/*&nbsp;&nbsp;&nbsp; if (geteuid() == 0) {<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; debug(0, 0) (&quot;Squid is not safe to run as root!&nbsp; If you must\n&quot;);<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; debug(0, 0) (&quot;start Squid as root, then you must configure\n&quot;);<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; debug(0, 0) (&quot;it to run as a non-priveledged user with the\n&quot;);<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; debug(0, 0) (&quot;'cache_effective_user' option in the config file.\n&quot;);<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fatal(&quot;Don't run Squid as root, set 'cache_effective_user'!&quot;);<BR>
-&nbsp;&nbsp;&nbsp; }<BR>
+&nbsp;&nbsp;&nbsp; }*/<BR>
}<BR>
<BR>
static void<BR>
diff -ru squid-2.6.STABLE16/src/protos.h squid-2.6.STABLE16.tproxy-freebind/src/protos.h<BR>
--- squid-2.6.STABLE16/src/protos.h&nbsp;&nbsp;&nbsp;&nbsp; 2007-07-15 12:52:17.000000000 +0300<BR>
+++ squid-2.6.STABLE16.tproxy-freebind/src/protos.h&nbsp;&nbsp;&nbsp;&nbsp; 2007-12-18 09:26:35.000000000 +0200<BR>
@@ -160,7 +160,7 @@<BR>
extern void comm_init(void);<BR>
extern int comm_listen(int sock);<BR>
extern int comm_open(int, int, struct in_addr, u_short port, int, const char *note);<BR>
-extern int comm_openex(int, int, struct in_addr, u_short, int, unsigned char TOS, const char *);<BR>
+extern int comm_openex(int, int, struct in_addr, u_short, int, unsigned char TOS, const char *,struct in_addr* );<BR>
extern u_short comm_local_port(int fd);<BR>
<BR>
extern void commDeferFD(int fd);<BR>
diff -ru squid-2.6.STABLE16/src/ssl.c squid-2.6.STABLE16.tproxy-freebind/src/ssl.c<BR>
--- squid-2.6.STABLE16/src/ssl.c&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2007-02-03 23:53:38.000000000 +0200<BR>
+++ squid-2.6.STABLE16.tproxy-freebind/src/ssl.c&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2007-12-18 09:27:04.000000000 +0200<BR>
@@ -524,7 +524,8 @@<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0,<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; COMM_NONBLOCKING,<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; getOutgoingTOS(request),<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; url);<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; url,<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0);<BR>
&nbsp;&nbsp;&nbsp;&nbsp; if (sock == COMM_ERROR) {<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; debug(26, 4) (&quot;sslStart: Failed because we're out of sockets.\n&quot;);<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; err = errorCon(ERR_SOCKET_FAILURE, HTTP_INTERNAL_SERVER_ERROR, request);<BR>
<BR>
<BR>
<BR>
<BLOCKQUOTE TYPE=CITE>
    <BR>
    <BR>
    <BR>
    <TABLE CELLSPACING="0" CELLPADDING="0" WIDTH="100%">
<TR>
<TD>
-- <BR>
Andrey Luzgin &lt;<A HREF="mailto:andrey@icomsw.com">andrey@icomsw.com</A>&gt;<BR>
I-com software
</TD>
</TR>
</TABLE>
<PRE>
<FONT COLOR="#000000">_______________________________________________</FONT>
<FONT COLOR="#000000">tproxy mailing list</FONT>
<FONT COLOR="#000000"><A HREF="mailto:tproxy@lists.balabit.hu">tproxy@lists.balabit.hu</A></FONT>
<FONT COLOR="#000000"><A HREF="https://lists.balabit.hu/mailman/listinfo/tproxy">https://lists.balabit.hu/mailman/listinfo/tproxy</A></FONT>
</PRE>
</BLOCKQUOTE>
<TABLE CELLSPACING="0" CELLPADDING="0" WIDTH="100%">
<TR>
<TD>
-- <BR>
Andrey Luzgin &lt;<A HREF="mailto:andrey@icomsw.com">andrey@icomsw.com</A>&gt;<BR>
I-com software
</TD>
</TR>
</TABLE>
</BODY>
</HTML>