source3/libaddns: don't depend on the order in resp->answers[]
authorStefan Metzmacher <metze@samba.org>
Fri, 9 Nov 2012 07:59:36 +0000 (08:59 +0100)
committerKarolin Seeger <kseeger@samba.org>
Fri, 14 Dec 2012 09:01:39 +0000 (10:01 +0100)
Signed-off-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
(cherry picked from commit eecc1d294256210ee8c2f6ab79d21b835258a6d4)

The last 2 patches address bug #9402 - lib/addns doesn't work samba4 with a
bind9 server.
(cherry picked from commit cf4773f929b2ac01bfe22e8113ccd3843c92bf56)

source3/libaddns/dnsgss.c

index fe7c6ca536e56610dbc7d87cea0285e3f09de6a4..a8b2ea18bcb40388ffbb39dc5b71afb893d2c118 100644 (file)
@@ -164,6 +164,8 @@ static DNS_ERROR dns_negotiate_gss_ctx_int( TALLOC_CTX *mem_ctx,
                        struct dns_request *resp;
                        struct dns_buffer *buf;
                        struct dns_tkey_record *tkey;
+                       struct dns_rrec *tkey_answer = NULL;
+                       uint16_t i;
 
                        err = dns_receive(mem_ctx, conn, &buf);
                        if (!ERR_DNS_IS_OK(err)) goto error;
@@ -174,9 +176,16 @@ static DNS_ERROR dns_negotiate_gss_ctx_int( TALLOC_CTX *mem_ctx,
                        /*
                         * TODO: Compare id and keyname
                         */
-                       
-                       if ((resp->num_answers == 0) ||
-                           (resp->answers[0]->type != QTYPE_TKEY)) {
+
+                       for (i=0; i < resp->num_answers; i++) {
+                               if (resp->answers[i]->type != QTYPE_TKEY) {
+                                       continue;
+                               }
+
+                               tkey_answer = resp->answers[i];
+                       }
+
+                       if (tkey_answer == NULL) {
                                err = ERROR_DNS_INVALID_MESSAGE;
                                goto error;
                        }