Created: (MODPYTHON-64) local_addr and remote_addr not using APR to make IP address st
Web Server forum
Back To The Forum Home!Search!Private Messaging System

Web Server Talk Web Server Talk > Web Servers reviews > Apache Server configuration support > Apache Mod-Python > Created: (MODPYTHON-64) local_addr and remote_addr not using APR to make IP address st




  Last Thread   Next Thread Next
  Show Printable Version Email this Page Subscribe to this Thread      Post New Thread    Post A Reply      

    Created: (MODPYTHON-64) local_addr and remote_addr not using APR to make IP address st  
Deron Meranda (JIRA)


View Ip Address Report This Message To A Moderator Edit/Delete Message


 
07-14-05 10:47 PM

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;







[ Post a follow-up to this message ]



    Sponsored Links  




 





   All times are GMT. The time now is 09:57 AM.      Post New Thread    Post A Reply      
  Last Thread   Next Thread Next


Most Popular forums 

Forum Jump:
Rate This Thread:

Forum Rules:
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts
HTML code is OFF
vB code is ON
Smilies are ON
[IMG] code is OFF
 
Medical and Health forum | Computer Games Reviews | Graphics design forum

Back To The Top
Home | Usercp | Faq | Register