Author: mturk
Date: Tue Apr  8 07:52:56 2014
New Revision: 1585657

URL: http://svn.apache.org/r1585657
Log:
Use port when calling getaddrinfo and skip bogus addresses

Modified:
    tomcat/jk/trunk/native/common/jk_connect.c

Modified: tomcat/jk/trunk/native/common/jk_connect.c
URL: 
http://svn.apache.org/viewvc/tomcat/jk/trunk/native/common/jk_connect.c?rev=1585657&r1=1585656&r2=1585657&view=diff
==============================================================================
--- tomcat/jk/trunk/native/common/jk_connect.c (original)
+++ tomcat/jk/trunk/native/common/jk_connect.c Tue Apr  8 07:52:56 2014
@@ -430,6 +430,8 @@ int jk_resolve(const char *host, int por
          */
         struct addrinfo hints, *ai_list, *ai = NULL;
         int error;
+        char  pbuf[12];
+        char *pbufptr = NULL;
 
         memset(&hints, 0, sizeof(hints));
         hints.ai_socktype = SOCK_STREAM;
@@ -440,7 +442,11 @@ int jk_resolve(const char *host, int por
         else
 #endif
             hints.ai_family = JK_INET;
-        error = getaddrinfo(host, NULL, &hints, &ai_list);
+        if (port > 0) {
+            snprintf(pbuf, port, sizeof(pbuf));
+            pbufptr = pbuf;
+        }
+        error = getaddrinfo(host, pbufptr, &hints, &ai_list);
 #if JK_HAVE_IPV6
         /* XXX:
          * Is the check for EAI_FAMILY/WSAEAFNOSUPPORT correct
@@ -461,12 +467,13 @@ int jk_resolve(const char *host, int por
             ai = ai_list;
             while (ai) {
                 if (ai->ai_family == AF_INET6) {
-                    family = JK_INET6;
-                    break;
-                }
-                else {
-                    ai = ai->ai_next;
+                    /* ignore elements without required address info */
+                    if((ai->ai_addr != NULL) && (ai->ai_addrlen > 0)) {        
                
+                        family = JK_INET6;
+                        break;
+                    }
                 }
+                ai = ai->ai_next;
             }
         }
 #endif
@@ -474,12 +481,13 @@ int jk_resolve(const char *host, int por
             ai = ai_list;
             while (ai) {
                 if (ai->ai_family == AF_INET) {
-                    family = JK_INET;
-                    break;
-                }
-                else {
-                    ai = ai->ai_next;
+                    /* ignore elements without required address info */
+                    if((ai->ai_addr != NULL) && (ai->ai_addrlen > 0)) {        
                
+                        family = JK_INET;
+                        break;
+                    }
                 }
+                ai = ai->ai_next;
             }
         }
         if (ai == NULL) {



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to