Commit 3008c3b7 authored by Nick Mathewson's avatar Nick Mathewson 🦀
Browse files

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
parent 08c75f43
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -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
+15 −6
Original line number Diff line number Diff line
@@ -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) {