[zorp-hu] 3.9-es bug (volt: Zorp 3.3.6 - port valasztas hostnev alapjan)

Kosa Attila zsiga at kosaek.hu
2011. Ápr. 13., Sze, 09:28:03 CEST


On Thu, Feb 24, 2011 at 01:24:31PM +0100, Lázár Imre wrote:
> 
> Ö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.

En ezzel a minimalis konfiggal probaltam ki kezdeskent:

class IntraHttp(HttpProxy):
        def config(self):
                HttpProxy.config(self)
                self.transparent_mode = 1

Es ugyanugy a fenti hibaba futottam bele. Igaz, nekem nem
0.0.0.1, hanem 0.0.0.6 lett. Felraktam ezt a javitast, es
megjavult. (Csak zarojelben - a patch nem ette meg a fentit,
a </method> rossz helyen van.)

Szilárd Pfeiffer irta 21 Feb 2011 18:05:10:
Amit kérünk, hogy adassék meg nekünk a lehetőség arra, hogy
bizonyítsuk (a mostani kiadás tényén túl is), szeretnénk a GPL
változattal aktívan foglalkozni.


Bocsanatot kerek a kerdesert, de ha ket sor kijavitasa masfel
honap alatt nem kerul bele a letoltheto forrasba, akkor az
nevezheto aktiv foglalkozasnak?

-- 
		Udvozlettel
				    Zsiga


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