From c20d81fd0679cb3fee53c91e0757d973842f7869 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20K=C4=99pie=C5=84?= Date: Thu, 31 Jan 2019 15:43:58 +0100 Subject: [PATCH] Track QUESTION section presence using a boolean The 'nmsg' field of the xfrout_ctx_t structure is an integer, even though it is only ever compared against 0 (for tracking whether the QUESTION section has already been sent to the client). Use a boolean instead as it is more appropriate and also enables 'nmsg' to be repurposed. --- lib/ns/xfrout.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/lib/ns/xfrout.c b/lib/ns/xfrout.c index e681004807..0212887e91 100644 --- a/lib/ns/xfrout.c +++ b/lib/ns/xfrout.c @@ -662,7 +662,8 @@ typedef struct { dns_dbversion_t *ver; isc_quota_t *quota; rrstream_t *stream; /* The XFR RR stream */ - bool end_of_stream; /* EOS has been reached */ + bool question_added; /* QUESTION section sent? */ + bool end_of_stream; /* EOS has been reached */ isc_buffer_t buf; /* Buffer for message owner names and rdatas */ isc_buffer_t txlenbuf; /* Transmit length buffer */ @@ -672,10 +673,10 @@ typedef struct { unsigned int nmsg; /* Number of messages sent */ dns_tsigkey_t *tsigkey; /* Key used to create TSIG */ isc_buffer_t *lasttsig; /* the last TSIG */ - bool verified_tsig; /* verified request MAC */ - bool many_answers; + bool verified_tsig; /* verified request MAC */ + bool many_answers; int sends; /* Send in progress */ - bool shuttingdown; + bool shuttingdown; const char *mnemonic; /* Style of transfer */ } xfrout_ctx_t; @@ -1180,6 +1181,7 @@ xfrout_ctx_create(isc_mem_t *mctx, ns_client_t *client, unsigned int id, dns_zone_attach(zone, &xfr->zone); dns_db_attach(db, &xfr->db); dns_db_attachversion(db, ver, &xfr->ver); + xfr->question_added = false; xfr->end_of_stream = false; xfr->tsigkey = tsigkey; xfr->lasttsig = lasttsig; @@ -1344,7 +1346,7 @@ sendstream(xfrout_ctx_t *xfr) { * BIND 8.2.1 will not recognize an IXFR if it does not * have a question section. */ - if (xfr->nmsg == 0) { + if (!xfr->question_added) { dns_name_t *qname = NULL; isc_region_t r; @@ -1376,6 +1378,7 @@ sendstream(xfrout_ctx_t *xfr) { ISC_LIST_APPEND(qname->list, qrdataset, link); dns_message_addname(msg, qname, DNS_SECTION_QUESTION); + xfr->question_added = true; } else { /* * Reserve space for the 12-byte message header