mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-30 15:43:32 +01:00
r12000@catbus: nickm | 2007-02-28 15:12:21 -0500
Try to fix eventdns bug 326 again, this time by noting that rcode 2 (serverfailed) does not really mean "The server is useless." svn:r9687
This commit is contained in:
parent
08c75f4349
commit
3008c3b768
@ -14,6 +14,10 @@ Changes in version 0.1.2.9-??? - 2007-??-??
|
||||
to INT32_MAX.
|
||||
- Fix a potential race condition in the rpm installer. Found by
|
||||
Stefan Nordhausen.
|
||||
- Try to fix eventdns warnings once and for all: do not treat a dns rcode
|
||||
of 2 as indicating that the server is completely bad; it sometimes
|
||||
means that the server is just bad for the request in question. (may fix
|
||||
the last of bug 326.)
|
||||
|
||||
|
||||
Changes in version 0.1.2.8-beta - 2007-02-26
|
||||
|
@ -696,7 +696,6 @@ reply_handle(struct request *const req, u16 flags, u32 ttl, struct reply *reply)
|
||||
}
|
||||
|
||||
switch(error) {
|
||||
case DNS_ERR_SERVERFAILED:
|
||||
case DNS_ERR_NOTIMPL:
|
||||
case DNS_ERR_REFUSED:
|
||||
// we regard these errors as marking a bad nameserver
|
||||
@ -708,6 +707,15 @@ reply_handle(struct request *const req, u16 flags, u32 ttl, struct reply *reply)
|
||||
if (!request_reissue(req)) return;
|
||||
}
|
||||
break;
|
||||
case DNS_ERR_SERVERFAILED:
|
||||
// rcode 2 (servfailed) sometimes means "we are broken" and
|
||||
// sometimes (with some binds) means "that request was very
|
||||
// confusing." Treat this as a timeout, not a failure.
|
||||
/*XXXX refactor the parts of */
|
||||
log(EVDNS_LOG_DEBUG, "Got a SERVERFAILED from nameserver %s; "
|
||||
"will allow the request to time out.",
|
||||
debug_nota(req->ns->address));
|
||||
break;
|
||||
default:
|
||||
// we got a good reply from the nameserver
|
||||
nameserver_up(req->ns);
|
||||
@ -1876,9 +1884,9 @@ evdns_request_transmit(struct request *req) {
|
||||
case 2:
|
||||
// failed in some other way
|
||||
retcode = 1;
|
||||
// fall through
|
||||
break;
|
||||
default:
|
||||
// all ok
|
||||
// transmitted; we need to check for timeout.
|
||||
log(EVDNS_LOG_DEBUG,
|
||||
"Setting timeout for request %lx", (unsigned long) req);
|
||||
evtimer_set(&req->timeout_event, evdns_request_timeout_callback, req);
|
||||
@ -1888,11 +1896,12 @@ evdns_request_transmit(struct request *req) {
|
||||
(unsigned long) req);
|
||||
// ???? Do more?
|
||||
}
|
||||
}
|
||||
|
||||
req->tx_count++;
|
||||
req->transmit_me = 0;
|
||||
return retcode;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
nameserver_probe_callback(int result, char type, int count, int ttl, void *addresses, void *arg) {
|
||||
|
Loading…
Reference in New Issue
Block a user