[asterisk-commits] dns core: Allow zero-length DNS responses. (asterisk[master])
SVN commits to the Asterisk project
asterisk-commits at lists.digium.com
Fri Jul 31 11:42:42 CDT 2015
Joshua Colp has submitted this change and it was merged.
Change subject: dns_core: Allow zero-length DNS responses.
......................................................................
dns_core: Allow zero-length DNS responses.
A testsuite test recently failed due to a crash that occurred in the DNS
core. The problem was that the test could not resolve an address, did
not set a result on the DNS query, and then indicated the query was
completed. The DNS core does not handle the case of a query with no
result gracefully, and so there is a crash.
This changeset makes the DNS system resolver set a result with a
zero-length answer in the case that a DNS resolution failure occurs
early. The DNS core now also will accept such a response without
treating it as invalid input. A unit test was updated to no longer treat
setting a zero-length response as off-nominal.
Change-Id: Ie56641e22debdaa61459e1c9a042e23b78affbf6
---
M include/asterisk/dns_resolver.h
M main/dns.c
M main/dns_core.c
M tests/test_dns.c
4 files changed, 10 insertions(+), 23 deletions(-)
Approvals:
Kevin Harwell: Looks good to me, but someone else must approve
Anonymous Coward #1000019: Verified
Joshua Colp: Looks good to me, approved
diff --git a/include/asterisk/dns_resolver.h b/include/asterisk/dns_resolver.h
index 819ce7a..2d5f57f 100644
--- a/include/asterisk/dns_resolver.h
+++ b/include/asterisk/dns_resolver.h
@@ -90,6 +90,10 @@
* \param answer The raw DNS answer
* \param answer_size The size of the raw DNS answer
*
+ * Zero-sized and NULL answers are permitted by this function. This may be
+ * necessary if the query fails at an early stage and no actual DNS response
+ * has been received from a DNS server.
+ *
* \retval 0 success
* \retval -1 failure
*/
diff --git a/main/dns.c b/main/dns.c
index 409ed44..e1b7770 100644
--- a/main/dns.c
+++ b/main/dns.c
@@ -559,6 +559,7 @@
if (dns_response_len < 0) {
ast_log(LOG_ERROR, "DNS search failed for %s\n", dname);
+ response_handler(context, (unsigned char *)"", 0, ns_r_nxdomain);
return AST_DNS_SEARCH_FAILURE;
}
diff --git a/main/dns_core.c b/main/dns_core.c
index 0b471db..cfce8ef 100644
--- a/main/dns_core.c
+++ b/main/dns_core.c
@@ -399,10 +399,10 @@
return -1;
}
- if (!answer || answer_size == 0) {
- ast_debug(2, "Query '%p': Could not set result information since no DNS answer was provided\n",
- query);
- return -1;
+ if (!answer) {
+ answer = "";
+ answer_size = 0;
+ ast_debug(2, "Query '%p': Assuming zero-sized answer on NULL input\n", query);
}
ast_dns_result_free(query->result);
diff --git a/tests/test_dns.c b/tests/test_dns.c
index 4e2c4a4..9bbb7da 100644
--- a/tests/test_dns.c
+++ b/tests/test_dns.c
@@ -365,9 +365,7 @@
info->description =
"This test performs the following:\n"
"\t* Attempt to add a DNS result that is both bogus and secure\n"
- "\t* Attempt to add a DNS result that has no canonical name\n"
- "\t* Attempt to add a DNS result that has no answer\n"
- "\t* Attempt to add a DNS result with a zero answer size";
+ "\t* Attempt to add a DNS result that has no canonical name";
return AST_TEST_NOT_RUN;
case TEST_EXECUTE:
break;
@@ -386,22 +384,6 @@
if (!ast_dns_resolver_set_result(&some_query, 0, 0, ns_r_noerror, NULL,
DNS_ANSWER, DNS_ANSWER_SIZE)) {
ast_test_status_update(test, "Successfully added result with no canonical name\n");
- result = ast_dns_query_get_result(&some_query);
- ast_dns_result_free(result);
- return AST_TEST_FAIL;
- }
-
- if (!ast_dns_resolver_set_result(&some_query, 0, 0, ns_r_noerror, NULL,
- NULL, DNS_ANSWER_SIZE)) {
- ast_test_status_update(test, "Successfully added result with no answer\n");
- result = ast_dns_query_get_result(&some_query);
- ast_dns_result_free(result);
- return AST_TEST_FAIL;
- }
-
- if (!ast_dns_resolver_set_result(&some_query, 0, 0, ns_r_noerror, NULL,
- DNS_ANSWER, 0)) {
- ast_test_status_update(test, "Successfully added result with answer size of zero\n");
result = ast_dns_query_get_result(&some_query);
ast_dns_result_free(result);
return AST_TEST_FAIL;
--
To view, visit https://gerrit.asterisk.org/985
To unsubscribe, visit https://gerrit.asterisk.org/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: Ie56641e22debdaa61459e1c9a042e23b78affbf6
Gerrit-PatchSet: 3
Gerrit-Project: asterisk
Gerrit-Branch: master
Gerrit-Owner: Mark Michelson <mmichelson at digium.com>
Gerrit-Reviewer: Anonymous Coward #1000019
Gerrit-Reviewer: Joshua Colp <jcolp at digium.com>
Gerrit-Reviewer: Kevin Harwell <kharwell at digium.com>
Gerrit-Reviewer: Mark Michelson <mmichelson at digium.com>
Gerrit-Reviewer: Richard Mudgett <rmudgett at digium.com>
More information about the asterisk-commits
mailing list