>From bd132ff33450af17a715a960eaffc9c5c488c0a4 Mon Sep 17 00:00:00 2001 From: Michael Waeber Date: Mon, 22 Jun 2015 15:06:51 +0200 Subject: [PATCH] dns_gethostbyname fixed to work without configured DNS server. Bug: If the ppp netif is shut down, e.g. because of a GPRS connection loss, the DNS server address is set to the unspecified address (0.0.0.0) in ppp.c cdns(). If a client application calls dns_gethostbyname() the assertion in dns_send() is triggered. This fix changes the behaviour: If no DNS server is configured, dns_gethostbyname() succeed with "not found". --- src/core/dns.c | 29 ++++++++++++++++++++++------- 1 file changed, 22 insertions(+), 7 deletions(-) diff --git a/src/core/dns.c b/src/core/dns.c index 21170cf..ab8ab58 100644 --- a/src/core/dns.c +++ b/src/core/dns.c @@ -949,11 +949,19 @@ dns_check_entry(u8_t i) /* wait longer for the next retry */ entry->tmr = entry->retries; - /* send DNS packet for this entry */ - err = dns_send(entry); - if (err != ERR_OK) { - LWIP_DEBUGF(DNS_DEBUG | LWIP_DBG_LEVEL_WARNING, - ("dns_send returned error: %s\n", lwip_strerr(err))); + if (!ip_addr_isany(&dns_servers[entry->server_idx])) { + /* send DNS packet for this entry */ + err = dns_send(entry); + if (err != ERR_OK) { + LWIP_DEBUGF(DNS_DEBUG | LWIP_DBG_LEVEL_WARNING, + ("dns_send returned error: %s\n", lwip_strerr(err))); + } + } else { + /* DNS server not valid anymore, e.g. PPP netif has been shut down */ + /* call specified callback function if provided */ + dns_call_found(i, NULL); + /* flush this entry */ + entry->state = DNS_STATE_UNUSED; } } break; @@ -1313,8 +1321,15 @@ dns_gethostbyname(const char *hostname, ip_addr_t *addr, dns_found_callback foun return ERR_OK; } - /* queue query with specified callback */ - return dns_enqueue(hostname, hostnamelen, found, callback_arg); + if (!ip_addr_isany_val(dns_servers[0])) { + /* queue query with specified callback */ + return dns_enqueue(hostname, hostnamelen, found, callback_arg); + } else { + /* No (primary) DNS server available */ + /* @todo: IPv6 support... */ + ip_addr_set_any(0, addr); + return ERR_OK; + } } #endif /* LWIP_DNS */ -- 1.9.0.msysgit.0