From: Miek Gieben Date: Mon, 14 Mar 2005 13:09:40 +0000 (+0000) Subject: implement fail for the resolver X-Git-Tag: release-0.50~257 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=85a1096cf3cd4ae7c8e596be091416ebbd67de0b;p=thirdparty%2Fldns.git implement fail for the resolver --- diff --git a/ldns/resolver.h b/ldns/resolver.h index b5ae041b..eab88363 100644 --- a/ldns/resolver.h +++ b/ldns/resolver.h @@ -72,7 +72,8 @@ struct ldns_struct_resolver bool _dnsrch; /** timeout for socket connections */ struct timeval _timeout; - + /** \brief only try the first nameserver */ + bool _fail; /** keep some things for axfr */ int _socket; int _axfr_soa_count; @@ -90,6 +91,7 @@ uint16_t ldns_resolver_port(ldns_resolver *); bool ldns_resolver_recursive(ldns_resolver *); bool ldns_resolver_debug(ldns_resolver *); bool ldns_resolver_usevc(ldns_resolver *); +bool ldns_resolver_fail(ldns_resolver *); size_t ldns_resolver_nameserver_count(ldns_resolver *); @@ -133,6 +135,7 @@ void ldns_resolver_set_dnssec(ldns_resolver *, bool); void ldns_resolver_set_retrans(ldns_resolver *, uint8_t); void ldns_resolver_set_retry(ldns_resolver *, uint8_t); void ldns_resolver_set_ip6(ldns_resolver *, uint8_t); +void ldns_resolver_set_fail(ldns_resolver *, bool); /** * Prepares the resolver for an axfr query diff --git a/net.c b/net.c index e9f7aab5..69cbba41 100644 --- a/net.c +++ b/net.c @@ -103,7 +103,14 @@ ldns_send(ldns_resolver *r, ldns_pkt *query_pkt) ldns_pkt_set_answerfrom(reply, ns_array[i]); ldns_pkt_set_when(reply, ctime((time_t*)&tv_s.tv_sec)); break; + } else { + if (ldns_resolver_fail(r)) { + /* if fail is set bail out, after the first + * one */ + break; + } } + } ldns_buffer_free(qb); return reply; diff --git a/resolver.c b/resolver.c index 33474526..8fafcdaf 100644 --- a/resolver.c +++ b/resolver.c @@ -74,6 +74,12 @@ ldns_resolver_dnsrch(ldns_resolver *r) return r->_dnsrch; } +bool +ldns_resolver_fail(ldns_resolver *r) +{ + return r->_fail; +} + bool ldns_resolver_defnames(ldns_resolver *r) { @@ -285,6 +291,12 @@ ldns_resolver_set_ip6(ldns_resolver *r, uint8_t ip6) r->_ip6 = ip6; } +void +ldns_resolver_set_fail(ldns_resolver *r, bool f) +{ + r->_fail =f; +} + void ldns_resolver_set_searchlist_count(ldns_resolver *r, size_t c) { @@ -402,6 +414,7 @@ ldns_resolver_new(void) ldns_resolver_set_defnames(r, false); ldns_resolver_set_retry(r, 4); ldns_resolver_set_retrans(r, 5); + ldns_resolver_set_fail(r, false); r->_timeout.tv_sec = LDNS_DEFAULT_TIMEOUT_SEC; r->_timeout.tv_usec = LDNS_DEFAULT_TIMEOUT_USEC;