]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
3841. [cleanup] Refactor zone.c:add_opt to use dns_message_buildopt.
authorMark Andrews <marka@isc.org>
Wed, 7 May 2014 23:38:05 +0000 (09:38 +1000)
committerMark Andrews <marka@isc.org>
Wed, 7 May 2014 23:39:06 +0000 (09:39 +1000)
                        [RT #35924]

(cherry picked from commit faa01edd13613c077c3cb663c36f36bd527d1a4b)

CHANGES
lib/dns/zone.c

diff --git a/CHANGES b/CHANGES
index 7a40a2815229e94880742fe1e9bbe01ce590210b..73fd14f79b05dd53e9a4d6dc4f80c104363674b2 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,6 @@
+3841.  [cleanup]       Refactor zone.c:add_opt to use dns_message_buildopt.
+                       [RT #35924]
+
 3840.  [port]          Check for arc4random_addrandom() before using it;
                        it's been removed from OpenBSD 5.5. [RT #35907]
 
index 279a3304040670e65984888f15cd0b675c6bc93e..98fb0c9ea52e261fe58c4bb5b55bce0c124db4f5 100644 (file)
@@ -11395,70 +11395,25 @@ create_query(dns_zone_t *zone, dns_rdatatype_t rdtype,
 
 static isc_result_t
 add_opt(dns_message_t *message, isc_uint16_t udpsize, isc_boolean_t reqnsid) {
-       dns_rdataset_t *rdataset = NULL;
-       dns_rdatalist_t *rdatalist = NULL;
-       dns_rdata_t *rdata = NULL;
        isc_result_t result;
-
-       result = dns_message_gettemprdatalist(message, &rdatalist);
-       if (result != ISC_R_SUCCESS)
-               goto cleanup;
-       result = dns_message_gettemprdata(message, &rdata);
-       if (result != ISC_R_SUCCESS)
-               goto cleanup;
-       result = dns_message_gettemprdataset(message, &rdataset);
-       if (result != ISC_R_SUCCESS)
-               goto cleanup;
-       dns_rdataset_init(rdataset);
-
-       rdatalist->type = dns_rdatatype_opt;
-       rdatalist->covers = 0;
-
-       /*
-        * Set Maximum UDP buffer size.
-        */
-       rdatalist->rdclass = udpsize;
-
-       /*
-        * Set EXTENDED-RCODE, VERSION, DO and Z to 0.
-        */
-       rdatalist->ttl = 0;
+       dns_rdataset_t *rdataset = NULL;
+       dns_ednsopt_t ednsopts[DNS_EDNSOPTIONS];
+       int count = 0;
 
        /* Set EDNS options if applicable */
        if (reqnsid) {
-               unsigned char data[4];
-               isc_buffer_t buf;
-
-               isc_buffer_init(&buf, data, sizeof(data));
-               isc_buffer_putuint16(&buf, DNS_OPT_NSID);
-               isc_buffer_putuint16(&buf, 0);
-               rdata->data = data;
-               rdata->length = sizeof(data);
-       } else {
-               rdata->data = NULL;
-               rdata->length = 0;
+               INSIST(count < DNS_EDNSOPTIONS);
+               ednsopts[count].code = DNS_OPT_NSID;
+               ednsopts[count].length = 0;
+               ednsopts[count].value = NULL;
+               count++;
        }
-
-       rdata->rdclass = rdatalist->rdclass;
-       rdata->type = rdatalist->type;
-       rdata->flags = 0;
-
-       ISC_LIST_INIT(rdatalist->rdata);
-       ISC_LIST_APPEND(rdatalist->rdata, rdata, link);
-       RUNTIME_CHECK(dns_rdatalist_tordataset(rdatalist, rdataset)
-                     == ISC_R_SUCCESS);
+       result = dns_message_buildopt(message, &rdataset, 0, udpsize, 0,
+                                     ednsopts, count);
+       if (result != ISC_R_SUCCESS)
+               return (result);
 
        return (dns_message_setopt(message, rdataset));
-
- cleanup:
-       if (rdatalist != NULL)
-               dns_message_puttemprdatalist(message, &rdatalist);
-       if (rdataset != NULL)
-               dns_message_puttemprdataset(message, &rdataset);
-       if (rdata != NULL)
-               dns_message_puttemprdata(message, &rdata);
-
-       return (result);
 }
 
 static void