Uploaded image for project: 'mod_python'
  1. mod_python
  2. MODPYTHON-64

local_addr and remote_addr not using APR to make IP address strings, breaks with IPv6

    Details

    • Type: Bug
    • Status: Closed
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: 3.1.4
    • Fix Version/s: 3.2.7
    • Component/s: core
    • Labels:
      None
    • Environment:
      Apache built with IPv6 support.

      Description

      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;

        Activity

        Hide
        dmeranda Deron Meranda added a comment -

        changed issue to core

        Show
        dmeranda Deron Meranda added a comment - changed issue to core
        Hide
        nlehuen Nicolas Lehuen added a comment -

        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 ?

        Show
        nlehuen Nicolas Lehuen added a comment - 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 ?

          People

          • Assignee:
            Unassigned
            Reporter:
            dmeranda Deron Meranda
          • Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved:

              Development