[ http://issues.apache.org/jira/browse/MODPYTHON-64?page=all ] Nicolas Lehuen resolved MODPYTHON-64: -------------------------------------
Fix Version: 3.2 Resolution: Fixed Fixed using the proposed patch and tested thanks to the test_internal unit tests. Should be tested on IPv6, though the unit test is expected to fail (can someone tell me what is the equivalent of 127.0.0.1 and 0.0.0.0 in IPv6 ? > local_addr and remote_addr not using APR to make IP address strings, breaks > with IPv6 > ------------------------------------------------------------------------------------- > > Key: MODPYTHON-64 > URL: http://issues.apache.org/jira/browse/MODPYTHON-64 > Project: mod_python > Type: Bug > Components: core > Versions: 3.1.4 > Environment: Apache built with IPv6 support. > Reporter: Deron Meranda > Fix For: 3.2 > > In the connection object the local_addr and remote_addr members are not > correctly built. This has the result that under IPv6-enabled Apache the IP > address > strings are always zero-length. > I think the following diff fixes this by using the appropriate APR functions, > apr_sockaddr_ip_get() and apr_sockaddr_port_get(), to build these strings > (although I'm not an APR expert). This patch does appear to work correctly > for me. > --- connobject.c.orig 2004-02-16 14:47:27.000000000 -0500 > +++ connobject.c 2005-07-14 11:22:09.076148325 -0400 > @@ -292,12 +292,15 @@ > static PyObject *makeipaddr(struct apr_sockaddr_t *addr) > { > - long x = ntohl(addr->sa.sin.sin_addr.s_addr); > - char buf[100]; > - sprintf(buf, "%d.%d.%d.%d", > - (int) (x>>24) & 0xff, (int) (x>>16) & 0xff, > - (int) (x>> 8) & 0xff, (int) (x>> 0) & 0xff); > - return PyString_FromString(buf); > + char *str = NULL; > + apr_status_t rc; > + PyObject *ret = NULL; > + > + rc = apr_sockaddr_ip_get( &str, addr ); > + if (rc==APR_SUCCESS) { > + ret = PyString_FromString( str ); > + } > + return ret; > } > /** > @@ -311,7 +314,9 @@ > PyObject *addrobj = makeipaddr(addr); > PyObject *ret = NULL; > if (addrobj) { > - ret = Py_BuildValue("Oi", addrobj, ntohs(addr->sa.sin.sin_port)); > + apr_port_t port; > + apr_sockaddr_port_get(&port, addr); > + ret = Py_BuildValue("Oi", addrobj, port ); > Py_DECREF(addrobj); > } > return ret; -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://issues.apache.org/jira/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira