The branch, master has been updated
       via  251209b s4-resolver: make it work back with ipv4 only DNS records
      from  6b11c91 tdb2: don't be fascist when TDB_VERSION1 is specified.

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit 251209bd6f6e66ca9bcf28cd652d85d1cd729fdc
Author: Matthieu Patou <[email protected]>
Date:   Wed Nov 2 09:39:23 2011 +0100

    s4-resolver: make it work back with ipv4 only DNS records
    
    It turns out that if there is no AAAA record the dns server (bind and MS
    windows at least) do not return the A record when just asked for AAAA.
    
    Autobuild-User: Matthieu Patou <[email protected]>
    Autobuild-Date: Wed Nov  2 11:15:34 CET 2011 on sn-devel-104

-----------------------------------------------------------------------

Summary of changes:
 source4/libcli/resolve/dns_ex.c |   41 +++++++++++++++++++++++---------------
 1 files changed, 25 insertions(+), 16 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source4/libcli/resolve/dns_ex.c b/source4/libcli/resolve/dns_ex.c
index 60e9afd..993ef43 100644
--- a/source4/libcli/resolve/dns_ex.c
+++ b/source4/libcli/resolve/dns_ex.c
@@ -178,29 +178,38 @@ static struct dns_records_container 
get_a_aaaa_records(TALLOC_CTX *mem_ctx,
           to avoid them in the parent */
        reply = rk_dns_lookup(name, "AAAA");
 
-       if (!reply) {
-               return ret;
-       }
+       count = count2 = 0;
+
+       if (reply) {
+
+               count = count_dns_rr(reply->head, rk_ns_t_aaaa);
+               count2 = count_dns_rr(reply->head, rk_ns_t_a);
+
+               if (!count2) {
+                       /*
+                       * DNS server didn't returned A when asked for AAAA 
records.
+                       * Most of the server do it, let's ask for A specificaly.
+                       */
+                       reply2 = rk_dns_lookup(name, "A");
 
-       count = count_dns_rr(reply->head, rk_ns_t_aaaa);
-       count2 = count_dns_rr(reply->head, rk_ns_t_a);
+                       if (!reply2) {
+                               return ret;
+                       }
 
-       if (!count2) {
-               /*
-                * DNS server didn't returned A when asked for AAAA records.
-                * Most of the server do it, let's ask for A specificaly.
-                */
-               reply2 = rk_dns_lookup(name, "A");
+                       count2 = count_dns_rr(reply2->head, rk_ns_t_a);
+               } else {
+                       reply2 = NULL;
+               }
+       } else {
 
-               if (!reply2) {
+               reply = rk_dns_lookup(name, "A");
+               if (!reply) {
                        return ret;
                }
 
-               count2 = count_dns_rr(reply2->head, rk_ns_t_a);
-       } else {
                reply2 = NULL;
+               count = count_dns_rr(reply->head, rk_ns_t_a);
        }
-
        count += count2;
 
        if (count == 0) {
@@ -322,7 +331,7 @@ static struct dns_records_container 
get_srv_records(TALLOC_CTX *mem_ctx,
 
                        addrs = talloc_realloc(mem_ctx, addrs, char*, total);
                        for (j=0; j < c.count; j++) {
-                               addrs[total - j] = talloc_steal(addrs, 
c.list[j]);
+                               addrs[total - j - 1] = talloc_steal(addrs, 
c.list[j]);
                        }
                }
        }


-- 
Samba Shared Repository

Reply via email to