You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficserver.apache.org by am...@apache.org on 2012/03/28 19:05:50 UTC

git commit: TS-1168: Fix UrlRewrite blind tunnel handling to be IPv6 compliant.

Updated Branches:
  refs/heads/master 441413b3a -> ebd4601e0


TS-1168: Fix UrlRewrite blind tunnel handling to be IPv6 compliant.


Project: http://git-wip-us.apache.org/repos/asf/trafficserver/repo
Commit: http://git-wip-us.apache.org/repos/asf/trafficserver/commit/ebd4601e
Tree: http://git-wip-us.apache.org/repos/asf/trafficserver/tree/ebd4601e
Diff: http://git-wip-us.apache.org/repos/asf/trafficserver/diff/ebd4601e

Branch: refs/heads/master
Commit: ebd4601e03863e6cb30b6f020d592651e10bd642
Parents: 441413b
Author: Alan M. Carroll <am...@network-geographics.com>
Authored: Wed Mar 28 11:37:26 2012 -0500
Committer: Alan M. Carroll <am...@network-geographics.com>
Committed: Wed Mar 28 12:03:13 2012 -0500

----------------------------------------------------------------------
 CHANGES                        |    2 ++
 proxy/http/remap/UrlRewrite.cc |   31 +++++++++++++------------------
 2 files changed, 15 insertions(+), 18 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/trafficserver/blob/ebd4601e/CHANGES
----------------------------------------------------------------------
diff --git a/CHANGES b/CHANGES
index 9b36f98..2aa958c 100644
--- a/CHANGES
+++ b/CHANGES
@@ -1,6 +1,8 @@
                                                          -*- coding: utf-8 -*-
 Changes with Apache Traffic Server 3.1.4
 
+  *) [TS-1168] Change UrlRewrite::BuildTable to be IPv6 compliant.
+
   *) [TS-1167] Updates parent socks server setup to be IPv6 compliant.
 
   *) [TS-1166] Remove proxy/Stuffer.[cc,h] because they were unused.

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/ebd4601e/proxy/http/remap/UrlRewrite.cc
----------------------------------------------------------------------
diff --git a/proxy/http/remap/UrlRewrite.cc b/proxy/http/remap/UrlRewrite.cc
index e1796ca..a739695 100644
--- a/proxy/http/remap/UrlRewrite.cc
+++ b/proxy/http/remap/UrlRewrite.cc
@@ -1376,32 +1376,26 @@ UrlRewrite::BuildTable()
     // and gives a new remap rule with the IPv4 addr.
     if ((maptype == FORWARD_MAP || maptype == FORWARD_MAP_REFERER || maptype == FORWARD_MAP_WITH_RECV_PORT) &&
         fromScheme == URL_SCHEME_TUNNEL && (fromHost_lower[0]<'0' || fromHost_lower[0]> '9')) {
-      ink_gethostbyname_r_data d;
-      struct hostent *h;
-      h = ink_gethostbyname_r(fromHost_lower, &d);
-      // We only handle IPv4 addresses which are 4-byte long.
-      if ((h != NULL) && (h->h_length == 4)) {
-        char ipv4_name[128];
-        url_mapping *u_mapping;
-        for (int i = 0; h->h_addr_list[i] != NULL; i++) {
-          ipv4_name[0] = '\0';
-          int ip_len = snprintf(ipv4_name, sizeof(ipv4_name), "%hhu.%hhu.%hhu.%hhu",
-                                (unsigned char) h->h_addr_list[i][0],
-                                (unsigned char) h->h_addr_list[i][1],
-                                (unsigned char) h->h_addr_list[i][2],
-                                (unsigned char) h->h_addr_list[i][3]);
-          if (ip_len > 0 && ip_len < (int) sizeof(ipv4_name)) {       // Create a new url mapping with the IPv4 address.
+      addrinfo* ai_records; // returned records.
+      ip_text_buffer ipb; // buffer for address string conversion.
+      if (0 == getaddrinfo(fromHost_lower, 0, 0, &ai_records)) {
+        for ( addrinfo* ai_spot = ai_records ; ai_spot ; ai_spot = ai_spot->ai_next) {
+          if (ats_is_ip(ai_spot->ai_addr) &&
+              !ats_is_ip_any(ai_spot->ai_addr)) {
+            url_mapping *u_mapping;
+
+            ats_ip_ntop(ai_spot->ai_addr, ipb, sizeof ipb);
             u_mapping = NEW(new url_mapping);
             u_mapping->fromURL.create(NULL);
             u_mapping->fromURL.copy(&new_mapping->fromURL);
-            u_mapping->fromURL.host_set(ipv4_name, strlen(ipv4_name));
+            u_mapping->fromURL.host_set(ipb, strlen(ipb));
             u_mapping->toUrl.create(NULL);
             u_mapping->toUrl.copy(&new_mapping->toUrl);
             if (bti.paramv[3] != NULL)
               u_mapping->tag = ats_strdup(&(bti.paramv[3][0]));
             bool insert_result = (maptype != FORWARD_MAP_WITH_RECV_PORT) ? 
-              TableInsert(forward_mappings.hash_lookup, u_mapping, ipv4_name) :
-              TableInsert(forward_mappings_with_recv_port.hash_lookup, u_mapping, ipv4_name);
+              TableInsert(forward_mappings.hash_lookup, u_mapping, ipb) :
+              TableInsert(forward_mappings_with_recv_port.hash_lookup, u_mapping, ipb);
             if (!insert_result) {
               errStr = "Unable to add mapping rule to lookup table";
               goto MAP_ERROR;
@@ -1410,6 +1404,7 @@ UrlRewrite::BuildTable()
             SetHomePageRedirectFlag(u_mapping, u_mapping->toUrl);
           }
         }
+        freeaddrinfo(ai_records);
       }
     }