You are viewing a plain text version of this content. The canonical link for it is here.
Posted to mod_python-dev@quetz.apache.org by "Deron Meranda (JIRA)" <ji...@apache.org> on 2005/07/14 17:50:10 UTC

[jira] Updated: (MODPYTHON-64) local_addr and remote_addr not using APR to make IP address strings, breaks with IPv6

     [ http://issues.apache.org/jira/browse/MODPYTHON-64?page=all ]

Deron Meranda updated MODPYTHON-64:
-----------------------------------

    Component: core

changed issue to core

> 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

>
> 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