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 Versions: 3.1.4 Environment: Apache built with IPv6 support. Reporter: Deron Meranda 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