[zorp-hu] Zorp 3.3.6 - port valasztas hostnev alapjan

Lázár Imre imre at balabit.hu
2011. Feb. 24., Cs, 13:24:31 CET


2011-02-23 19:01 keltezéssel, Farkas Dániel írta:
> Nalam ez teljesen hatastalan, probaltam korabban is, amikor raakadtam.

Összeraktam egy host header alapján máshova csatlakozó HTTP proxyt,
a most kiadott 3.9-es verzióval.
Az idevágó osztály a következő:

class InterHttpProxy(HttpProxy):
         def config(self):
                 HttpProxy.config(self)
                 require_host_header = FALSE
                 self.hostlist = {"host1.domain.hu":("192.168.1.1", 80), 
"host2.domain.hu":("192.168.1.2", 80), "host3.domain.hu":("192.168.1.3", 80), 
"host4.domain.hu":("192.168.1.4", 80)}
         def setServerAddress(self, host, port):
                 if self.hostlist.has_key(host):
                         newhost = self.hostlist[host][0]
                         port = self.hostlist[host][1]
                         host = newhost
                 else:
                         proxyLog(self, HTTP_ERROR, 3, "Unknown target host; 
host='%s'", host)
                         return FALSE
                 return HttpProxy.setServerAddress(self, host, port)

Ennek elvileg működnie kellene, de nem teszi, a logban ez található:

2011-02-24T10:12:01+01:00 fw zorp/inter[5832]: core.error(3): 
(svc/inter_HTTP:191/http): connect() failed; fd='40', error='Invalid argument'
2011-02-24T10:12:01+01:00 fw zorp/inter[5832]: core.error(2): 
(svc/inter_HTTP:191/http): Connection to remote end failed; local='NULL', 
remote='AF_INET(0.0.0.1:80)', error='Invalid argument'

Mint látod, a célszerver címe 0.0.0.1-re változik, holott nem ez az elvárt.
Ha te is ebbe a hibába futottál bele, akkor itt egy patch, ami ezt megoldja:

--- a/pylib/Zorp/Resolver.py    2011-02-24 10:13:54.081516501 +0100
+++ b/pylib/Zorp/Resolver.py    2011-02-24 10:11:25.721598563 +0100
@@ -35,7 +35,7 @@

   from Zorp import *
   from SockAddr import SockAddrInet
-from socket import gethostbyname
+from socket import gethostbyname, gethostbyname_ex
   import types

   # NOTE: This is IPv4 specific
@@ -207,7 +207,7 @@
</method>
           """
                   try:
-            ip_list = gethostbyname(host)
+            ip_list = gethostbyname_ex(host)[2]
               if self.multi:
                       return map(lambda ip: SockAddrInet(ip, port), ip_list)
               else:


Nekem ezzel jól működik.

Üdv,

i.


További információk a(z) zorp-hu levelezőlistáról