You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficserver.apache.org by zw...@apache.org on 2014/03/03 15:37:35 UTC

[1/4] git commit: TS-2595 Skip domain expansion if original name ends with dot.

Repository: trafficserver
Updated Branches:
  refs/heads/master af3e7aa87 -> b74425c05


TS-2595 Skip domain expansion if original name ends with dot.


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

Branch: refs/heads/master
Commit: 7405d0025e176e8dbb31f9f9c8d7f3d0a78ccc37
Parents: dfdc985
Author: Thach Tran <tr...@gmail.com>
Authored: Sun Mar 2 15:38:00 2014 +0700
Committer: Leif Hedstrom <zw...@apache.org>
Committed: Mon Mar 3 14:36:28 2014 +0000

----------------------------------------------------------------------
 iocore/dns/DNS.cc | 61 ++++++++++++++++++++++----------------------------
 1 file changed, 27 insertions(+), 34 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/trafficserver/blob/7405d002/iocore/dns/DNS.cc
----------------------------------------------------------------------
diff --git a/iocore/dns/DNS.cc b/iocore/dns/DNS.cc
index 5f857be..4ddf05f 100644
--- a/iocore/dns/DNS.cc
+++ b/iocore/dns/DNS.cc
@@ -1043,14 +1043,20 @@ DNSEntry::mainEvent(int event, Event *e)
         SET_HANDLER((DNSEntryHandler) & DNSEntry::delayEvent);
         return handleEvent(event, e);
       }
-      //if (dns_search && !strnchr(qname,'.',MAXDNAME)){
-      if (dns_search)
+
+      // trailing '.' indicates no domain expansion
+      if (dns_search && ('.' != qname[orig_qname_len - 1])) {
         domains = dnsH->m_res->dnsrch;
-      if (domains && !strnchr(qname, '.', MAXDNAME)) {
-        qname[orig_qname_len] = '.';
-        ink_strlcpy(qname + orig_qname_len + 1, *domains, MAXDNAME - (orig_qname_len + 1));
-        qname_len = strlen(qname);
-        ++domains;
+        // start domain expansion straight away
+        // if lookup name has no '.'
+        if (domains && !strnchr(qname, '.', MAXDNAME)) {
+          qname[orig_qname_len] = '.';
+          qname_len = orig_qname_len + 1 + ink_strlcpy(qname + orig_qname_len + 1, *domains,
+                                                       MAXDNAME - (orig_qname_len + 1));
+          ++domains;
+        }
+      } else {
+        domains = NULL;
       }
       Debug("dns", "enqueing query %s", qname);
       DNSEntry *dup = get_entry(dnsH, qname, qtype);
@@ -1123,36 +1129,23 @@ dns_result(DNSHandler *h, DNSEntry *e, HostEnt *ent, bool retry) {
     } else if (e->domains && *e->domains) {
       do {
         Debug("dns", "domain extending, last tried '%s', original '%.*s'", e->qname, e->orig_qname_len, e->qname);
-        //int l = _strlen(e->qname);
-        char *dot = strchr(e->qname, '.');
-        if (dot) {
-          if (e->orig_qname_len + strlen(*e->domains) + 2 > MAXDNAME) {
-            Debug("dns", "domain too large %.*s + %s", e->orig_qname_len, e->qname, *e->domains);
-            goto LnextDomain;
-          }
-          if (e->qname[e->orig_qname_len - 1] != '.') {
-            e->qname[e->orig_qname_len] = '.';
-            ink_strlcpy(e->qname + e->orig_qname_len + 1, *e->domains, MAXDNAME - (e->orig_qname_len + 1));
-            e->qname_len = strlen(e->qname);
-          } else {
-            ink_strlcpy(e->qname + e->orig_qname_len, *e->domains, MAXDNAME - e->orig_qname_len);
-            e->qname_len = strlen(e->qname);
-          }
+
+        // Make sure the next try fits
+        if (e->orig_qname_len + strlen(*e->domains) + 2 > MAXDNAME) {
+          Debug("dns", "domain too large %.*s + %s", e->orig_qname_len, e->qname, *e->domains);
         } else {
-          if (e->orig_qname_len + strlen(*e->domains) + 2 > MAXDNAME) {
-            Debug("dns", "domain too large %.*s + %s", e->orig_qname_len, e->qname, *e->domains);
-            goto LnextDomain;
-          }
           e->qname[e->orig_qname_len] = '.';
-          ink_strlcpy(e->qname + e->orig_qname_len + 1, *e->domains, MAXDNAME - (e->orig_qname_len + 1));
-          e->qname_len = strlen(e->qname);
+          e->qname_len = e->orig_qname_len + 1 + ink_strlcpy(e->qname + e->orig_qname_len + 1, *e->domains,
+                                                             MAXDNAME - (e->orig_qname_len + 1));
+          ++(e->domains);
+          e->retries = dns_retries;
+          Debug("dns", "new name = %s retries = %d", e->qname, e->retries);
+          write_dns(h);
+
+          return;
         }
-        ++(e->domains);
-        e->retries = dns_retries;
-        Debug("dns", "new name = %s retries = %d", e->qname, e->retries);
-        write_dns(h);
-        return;
-      LnextDomain:
+
+        // Try another one
         ++(e->domains);
       } while (*e->domains);
     } else {


[2/4] git commit: TS-2595 DNS lookup failed with multiple search domains

Posted by zw...@apache.org.
TS-2595 DNS lookup failed with multiple search domains

Expand multiple search domains by appending each to original host name rather
than keep appending one after the other.


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

Branch: refs/heads/master
Commit: dfdc98548bcbd92df1c998afd8239a4a4f7ccc75
Parents: af3e7aa
Author: Thach Tran <tr...@gmail.com>
Authored: Thu Feb 27 16:27:48 2014 +0700
Committer: Leif Hedstrom <zw...@apache.org>
Committed: Mon Mar 3 14:36:28 2014 +0000

----------------------------------------------------------------------
 iocore/dns/DNS.cc           | 28 +++++++++++++++-------------
 iocore/dns/P_DNSProcessor.h |  6 ++++--
 2 files changed, 19 insertions(+), 15 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/trafficserver/blob/dfdc9854/iocore/dns/DNS.cc
----------------------------------------------------------------------
diff --git a/iocore/dns/DNS.cc b/iocore/dns/DNS.cc
index 74d972e..5f857be 100644
--- a/iocore/dns/DNS.cc
+++ b/iocore/dns/DNS.cc
@@ -385,10 +385,12 @@ DNSEntry::init(const char *x, int len, int qtype_arg, Continuation* acont,
       len = len > (MAXDNAME - 1) ? (MAXDNAME - 1) : len;
       memcpy(qname, x, len);
       qname_len = len;
+      orig_qname_len = qname_len;
       qname[len] = 0;
     } else {
       ink_strlcpy(qname, x, MAXDNAME);
       qname_len = strlen(qname);
+      orig_qname_len = qname_len;
     }
   } else {                    //T_PTR
     IpAddr const* ip = reinterpret_cast<IpAddr const*>(x);
@@ -1045,8 +1047,8 @@ DNSEntry::mainEvent(int event, Event *e)
       if (dns_search)
         domains = dnsH->m_res->dnsrch;
       if (domains && !strnchr(qname, '.', MAXDNAME)) {
-        qname[qname_len] = '.';
-        ink_strlcpy(qname + qname_len + 1, *domains, MAXDNAME - (qname_len + 1));
+        qname[orig_qname_len] = '.';
+        ink_strlcpy(qname + orig_qname_len + 1, *domains, MAXDNAME - (orig_qname_len + 1));
         qname_len = strlen(qname);
         ++domains;
       }
@@ -1120,29 +1122,29 @@ dns_result(DNSHandler *h, DNSEntry *e, HostEnt *ent, bool retry) {
       return;
     } else if (e->domains && *e->domains) {
       do {
-        Debug("dns", "domain extending %s", e->qname);
+        Debug("dns", "domain extending, last tried '%s', original '%.*s'", e->qname, e->orig_qname_len, e->qname);
         //int l = _strlen(e->qname);
         char *dot = strchr(e->qname, '.');
         if (dot) {
-          if (e->qname_len + strlen(*e->domains) + 2 > MAXDNAME) {
-            Debug("dns", "domain too large %s + %s", e->qname, *e->domains);
+          if (e->orig_qname_len + strlen(*e->domains) + 2 > MAXDNAME) {
+            Debug("dns", "domain too large %.*s + %s", e->orig_qname_len, e->qname, *e->domains);
             goto LnextDomain;
           }
-          if (e->qname[e->qname_len - 1] != '.') {
-            e->qname[e->qname_len] = '.';
-            ink_strlcpy(e->qname + e->qname_len + 1, *e->domains, MAXDNAME - (e->qname_len + 1));
+          if (e->qname[e->orig_qname_len - 1] != '.') {
+            e->qname[e->orig_qname_len] = '.';
+            ink_strlcpy(e->qname + e->orig_qname_len + 1, *e->domains, MAXDNAME - (e->orig_qname_len + 1));
             e->qname_len = strlen(e->qname);
           } else {
-            ink_strlcpy(e->qname + e->qname_len, *e->domains, MAXDNAME - e->qname_len);
+            ink_strlcpy(e->qname + e->orig_qname_len, *e->domains, MAXDNAME - e->orig_qname_len);
             e->qname_len = strlen(e->qname);
           }
         } else {
-          if (e->qname_len + strlen(*e->domains) + 2 > MAXDNAME) {
-            Debug("dns", "domain too large %s + %s", e->qname, *e->domains);
+          if (e->orig_qname_len + strlen(*e->domains) + 2 > MAXDNAME) {
+            Debug("dns", "domain too large %.*s + %s", e->orig_qname_len, e->qname, *e->domains);
             goto LnextDomain;
           }
-          e->qname[e->qname_len] = '.';
-          ink_strlcpy(e->qname + e->qname_len + 1, *e->domains, MAXDNAME - (e->qname_len + 1));
+          e->qname[e->orig_qname_len] = '.';
+          ink_strlcpy(e->qname + e->orig_qname_len + 1, *e->domains, MAXDNAME - (e->orig_qname_len + 1));
           e->qname_len = strlen(e->qname);
         }
         ++(e->domains);

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/dfdc9854/iocore/dns/P_DNSProcessor.h
----------------------------------------------------------------------
diff --git a/iocore/dns/P_DNSProcessor.h b/iocore/dns/P_DNSProcessor.h
index 7df7e10..9cb27ea 100644
--- a/iocore/dns/P_DNSProcessor.h
+++ b/iocore/dns/P_DNSProcessor.h
@@ -156,6 +156,7 @@ struct DNSEntry: public Continuation
   ink_hrtime send_time;
   char qname[MAXDNAME];
   int qname_len;
+  int orig_qname_len;
   char **domains;
   EThread *submit_thread;
   Action action;
@@ -179,8 +180,9 @@ struct DNSEntry: public Continuation
        qtype(0),
        host_res_style(HOST_RES_NONE),
        retries(DEFAULT_DNS_RETRIES),
-       which_ns(NO_NAMESERVER_SELECTED), submit_time(0), send_time(0), qname_len(0), domains(0),
-       timeout(0), result_ent(0), dnsH(0), written_flag(false), once_written_flag(false), last(false)
+       which_ns(NO_NAMESERVER_SELECTED), submit_time(0), send_time(0), qname_len(0),
+       orig_qname_len(0), domains(0), timeout(0), result_ent(0), dnsH(0), written_flag(false),
+       once_written_flag(false), last(false)
   {
     for (int i = 0; i < MAX_DNS_RETRIES; i++)
       id[i] = -1;


[4/4] git commit: TS-2595 Minor cleanup on strlcpy returns

Posted by zw...@apache.org.
TS-2595 Minor cleanup on strlcpy returns


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

Branch: refs/heads/master
Commit: b74425c05539466a37960f2d2c1f827f8dc65831
Parents: 871cd8b
Author: Leif Hedstrom <zw...@apache.org>
Authored: Mon Mar 3 14:36:23 2014 +0000
Committer: Leif Hedstrom <zw...@apache.org>
Committed: Mon Mar 3 14:37:06 2014 +0000

----------------------------------------------------------------------
 iocore/dns/DNS.cc | 6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/trafficserver/blob/b74425c0/iocore/dns/DNS.cc
----------------------------------------------------------------------
diff --git a/iocore/dns/DNS.cc b/iocore/dns/DNS.cc
index 4ddf05f..a93b6c9 100644
--- a/iocore/dns/DNS.cc
+++ b/iocore/dns/DNS.cc
@@ -384,12 +384,10 @@ DNSEntry::init(const char *x, int len, int qtype_arg, Continuation* acont,
     if (len) {
       len = len > (MAXDNAME - 1) ? (MAXDNAME - 1) : len;
       memcpy(qname, x, len);
-      qname_len = len;
-      orig_qname_len = qname_len;
       qname[len] = 0;
+      orig_qname_len = qname_len = len;
     } else {
-      ink_strlcpy(qname, x, MAXDNAME);
-      qname_len = strlen(qname);
+      qname_len = ink_strlcpy(qname, x, MAXDNAME);
       orig_qname_len = qname_len;
     }
   } else {                    //T_PTR


[3/4] git commit: Added TS-2595 to CHANGES.

Posted by zw...@apache.org.
Added TS-2595 to CHANGES.

This closes #52


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

Branch: refs/heads/master
Commit: 871cd8b5b20375a14148c15520c3159fec4e3fc8
Parents: 7405d00
Author: Leif Hedstrom <zw...@apache.org>
Authored: Mon Mar 3 10:06:48 2014 +0000
Committer: Leif Hedstrom <zw...@apache.org>
Committed: Mon Mar 3 14:37:06 2014 +0000

----------------------------------------------------------------------
 CHANGES | 3 +++
 1 file changed, 3 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/trafficserver/blob/871cd8b5/CHANGES
----------------------------------------------------------------------
diff --git a/CHANGES b/CHANGES
index 4fb3d85..3b21433 100644
--- a/CHANGES
+++ b/CHANGES
@@ -1,6 +1,9 @@
                                                          -*- coding: utf-8 -*-
 Changes with Apache Traffic Server 5.0.0
 
+  *) [TS-2595] DNS lookup failed with multiple search domains. 
+   Author: Thach Tran <tr...@gmail.com>
+
   *) [TS-2019] Fix the "vector inconsistency" errors.
 
   *) [TS-2585] Add overridable configs support to regex_remap plugin.