[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
[or-cvs] r9736: Remove dnsworkers and related code. there goes another 550 l (in tor/trunk: . src/or)
- To: or-cvs@xxxxxxxxxxxxx
- Subject: [or-cvs] r9736: Remove dnsworkers and related code. there goes another 550 l (in tor/trunk: . src/or)
- From: nickm@xxxxxxxx
- Date: Sun, 4 Mar 2007 21:41:15 -0500 (EST)
- Delivered-to: archiver@seul.org
- Delivered-to: or-cvs-outgoing@seul.org
- Delivered-to: or-cvs@seul.org
- Delivery-date: Sun, 04 Mar 2007 21:41:38 -0500
- Reply-to: or-talk@xxxxxxxxxxxxx
- Sender: owner-or-cvs@xxxxxxxxxxxxx
Author: nickm
Date: 2007-03-04 21:40:58 -0500 (Sun, 04 Mar 2007)
New Revision: 9736
Modified:
tor/trunk/
tor/trunk/ChangeLog
tor/trunk/configure.in
tor/trunk/src/or/Makefile.am
tor/trunk/src/or/config.c
tor/trunk/src/or/connection.c
tor/trunk/src/or/dns.c
tor/trunk/src/or/main.c
tor/trunk/src/or/or.h
tor/trunk/src/or/router.c
tor/trunk/src/or/test.c
Log:
r12080@catbus: nickm | 2007-03-04 21:40:55 -0500
Remove dnsworkers and related code. there goes another 550 lines of code.
Property changes on: tor/trunk
___________________________________________________________________
svk:merge ticket from /tor/trunk [r12080] on 8246c3cf-6607-4228-993b-4d95d33730f1
Modified: tor/trunk/ChangeLog
===================================================================
--- tor/trunk/ChangeLog 2007-03-04 21:08:28 UTC (rev 9735)
+++ tor/trunk/ChangeLog 2007-03-05 02:40:58 UTC (rev 9736)
@@ -11,6 +11,9 @@
This has been deprecated since 0.1.1, and warnings have been issued
since 0.1.2. When we encounter a v0 control message, we now send back
an error and close the connection.
+ - Remove the old "dns worker" server DNS code: it hasn't been default
+ since 0.1.2.2-alpha, and all the servers seem to be using the new
+ eventdns code.
Changes in version 0.1.2.10-rc - 2007-03-??
Modified: tor/trunk/configure.in
===================================================================
--- tor/trunk/configure.in 2007-03-04 21:08:28 UTC (rev 9735)
+++ tor/trunk/configure.in 2007-03-05 02:40:58 UTC (rev 9736)
@@ -19,18 +19,6 @@
CFLAGS="$CFLAGS -g"
fi])
-AC_ARG_ENABLE(eventdns,
- AS_HELP_STRING(--enable-eventdns, enable asynchronous dns module),
- [case "${enableval}" in
- yes) eventdns=true ;;
- no) eventdns=false ;;
- *) AC_MSG_ERROR(bad value for --enable-eventdns) ;;
- esac], [eventdns=true])
-AM_CONDITIONAL(EVENTDNS, test x$eventdns = xtrue)
-if test x$eventdns = xtrue; then
- AC_DEFINE([USE_EVENTDNS], 1, "Define to 1 if we'll be using eventdns.c")
-fi
-
AC_ARG_ENABLE(transparent,
AS_HELP_STRING(--disable-transparent, disable transparent proxy support),
[case "${enableval}" in
@@ -44,14 +32,6 @@
if test x$enable_threads = x; then
case $host in
- *-*-netbsd* | *-*-openbsd* )
- # Don't try multithreading on netbsd -- there is no threadsafe DNS
- # lookup function there.
- if test x$eventdns != xtrue; then
- AC_MSG_NOTICE([You are running OpenBSD or NetBSD; I am assuming that
-getaddrinfo is not threadsafe here, so I will disable threads.])
- enable_threads="no"
- fi ;;
*-*-solaris* )
# Don't try multithreading on solaris -- cpuworkers seem to lock.
AC_MSG_NOTICE([You are running Solaris; Sometimes threading makes
Modified: tor/trunk/src/or/Makefile.am
===================================================================
--- tor/trunk/src/or/Makefile.am 2007-03-04 21:08:28 UTC (rev 9735)
+++ tor/trunk/src/or/Makefile.am 2007-03-05 02:40:58 UTC (rev 9736)
@@ -4,19 +4,13 @@
bin_PROGRAMS = tor
-if EVENTDNS
-EVDNSSRC = eventdns.c
-else
-EVDNSSRC =
-endif
-
tor_SOURCES = buffers.c circuitbuild.c circuitlist.c \
circuituse.c command.c config.c \
connection.c connection_edge.c connection_or.c control.c \
cpuworker.c directory.c dirserv.c dns.c hibernate.c main.c \
onion.c policies.c relay.c rendcommon.c rendclient.c rendmid.c \
rendservice.c rephist.c router.c routerlist.c routerparse.c \
- $(EVDNSSRC) \
+ eventdns.c \
tor_main.c
tor_LDADD = ../common/libor.a ../common/libor-crypto.a -lz -lssl -lcrypto
@@ -27,10 +21,10 @@
cpuworker.c directory.c dirserv.c dns.c hibernate.c main.c \
onion.c policies.c relay.c rendcommon.c rendclient.c rendmid.c \
rendservice.c rephist.c router.c routerlist.c routerparse.c \
- $(EVDNSSRC) \
+ eventdns.c \
test.c
test_LDADD = ../common/libor.a ../common/libor-crypto.a -lz -lssl -lcrypto
-noinst_HEADERS = or.h eventdns.h eventdns_tor.h eventdns.c
+noinst_HEADERS = or.h eventdns.h eventdns_tor.h
Modified: tor/trunk/src/or/config.c
===================================================================
--- tor/trunk/src/or/config.c 2007-03-04 21:08:28 UTC (rev 9735)
+++ tor/trunk/src/or/config.c 2007-03-05 02:40:58 UTC (rev 9736)
@@ -1001,13 +1001,10 @@
cpuworkers_rotate();
if (dns_reset())
return -1;
- }
-#ifdef USE_EVENTDNS
- else {
+ } else {
if (dns_reset())
return -1;
}
-#endif
}
/* Check if we need to parse and add the EntryNodes config option. */
@@ -2714,12 +2711,6 @@
if (options->UseEntryGuards && ! options->NumEntryGuards)
REJECT("Cannot enable UseEntryGuards with NumEntryGuards set to 0");
-#ifndef USE_EVENTDNS
- if (options->ServerDNSResolvConfFile)
- log(LOG_WARN, LD_CONFIG,
- "ServerDNSResolvConfFile only works when eventdns support is enabled.");
-#endif
-
if (check_nickname_list(options->ExitNodes, "ExitNodes", msg))
return -1;
if (check_nickname_list(options->EntryNodes, "EntryNodes", msg))
Modified: tor/trunk/src/or/connection.c
===================================================================
--- tor/trunk/src/or/connection.c 2007-03-04 21:08:28 UTC (rev 9735)
+++ tor/trunk/src/or/connection.c 2007-03-05 02:40:58 UTC (rev 9736)
@@ -51,7 +51,6 @@
case CONN_TYPE_AP: return "Socks";
case CONN_TYPE_DIR_LISTENER: return "Directory listener";
case CONN_TYPE_DIR: return "Directory";
- case CONN_TYPE_DNSWORKER: return "DNS worker";
case CONN_TYPE_CPUWORKER: return "CPU worker";
case CONN_TYPE_CONTROL_LISTENER: return "Control listener";
case CONN_TYPE_CONTROL: return "Control";
@@ -118,12 +117,6 @@
case DIR_CONN_STATE_SERVER_WRITING: return "writing";
}
break;
- case CONN_TYPE_DNSWORKER:
- switch (state) {
- case DNSWORKER_STATE_IDLE: return "idle";
- case DNSWORKER_STATE_BUSY: return "busy";
- }
- break;
case CONN_TYPE_CPUWORKER:
switch (state) {
case CPUWORKER_STATE_IDLE: return "idle";
@@ -496,11 +489,6 @@
if (edge_conn->bridge_for_conn)
connection_dirserv_unlink_from_bridge(edge_conn->bridge_for_conn);
break;
- case CONN_TYPE_DNSWORKER:
- if (conn->state == DNSWORKER_STATE_BUSY) {
- dns_cancel_pending_resolve(conn->address);
- }
- break;
}
}
@@ -2242,8 +2230,6 @@
package_partial);
case CONN_TYPE_DIR:
return connection_dir_process_inbuf(TO_DIR_CONN(conn));
- case CONN_TYPE_DNSWORKER:
- return connection_dns_process_inbuf(conn);
case CONN_TYPE_CPUWORKER:
return connection_cpu_process_inbuf(conn);
case CONN_TYPE_CONTROL:
@@ -2289,8 +2275,6 @@
return connection_edge_finished_flushing(TO_EDGE_CONN(conn));
case CONN_TYPE_DIR:
return connection_dir_finished_flushing(TO_DIR_CONN(conn));
- case CONN_TYPE_DNSWORKER:
- return connection_dns_finished_flushing(conn);
case CONN_TYPE_CPUWORKER:
return connection_cpu_finished_flushing(conn);
case CONN_TYPE_CONTROL:
@@ -2339,8 +2323,6 @@
return connection_edge_reached_eof(TO_EDGE_CONN(conn));
case CONN_TYPE_DIR:
return connection_dir_reached_eof(TO_DIR_CONN(conn));
- case CONN_TYPE_DNSWORKER:
- return connection_dns_reached_eof(conn);
case CONN_TYPE_CPUWORKER:
return connection_cpu_reached_eof(conn);
case CONN_TYPE_CONTROL:
@@ -2513,10 +2495,6 @@
tor_assert(conn->purpose >= _DIR_PURPOSE_MIN);
tor_assert(conn->purpose <= _DIR_PURPOSE_MAX);
break;
- case CONN_TYPE_DNSWORKER:
- tor_assert(conn->state >= _DNSWORKER_STATE_MIN);
- tor_assert(conn->state <= _DNSWORKER_STATE_MAX);
- break;
case CONN_TYPE_CPUWORKER:
tor_assert(conn->state >= _CPUWORKER_STATE_MIN);
tor_assert(conn->state <= _CPUWORKER_STATE_MAX);
Modified: tor/trunk/src/or/dns.c
===================================================================
--- tor/trunk/src/or/dns.c 2007-03-04 21:08:28 UTC (rev 9735)
+++ tor/trunk/src/or/dns.c 2007-03-05 02:40:58 UTC (rev 9736)
@@ -8,32 +8,18 @@
/**
* \file dns.c
* \brief Implements a local cache for DNS results for Tor servers.
- * We provide two asynchronous backend implementations:
- * 1) A farm of 'DNS worker' threads or processes to perform DNS lookups for
- * onion routers and cache the results.
- * 2) A wrapper around Adam Langley's eventdns.c code, to send requests
- * to the nameservers asynchronously.
+ * This is implemetned as a wrapper around Adam Langley's eventdns.c code.
* (We can't just use gethostbyname() and friends because we really need to
* be nonblocking.)
**/
#include "or.h"
#include "../common/ht.h"
-#ifdef USE_EVENTDNS
#include "eventdns.h"
-#endif
/** Longest hostname we're willing to resolve. */
#define MAX_ADDRESSLEN 256
-/** Maximum DNS processes to spawn. */
-#define MAX_DNSWORKERS 100
-/** Minimum DNS processes to spawn. */
-#define MIN_DNSWORKERS 3
-
-/** If more than this many processes are idle, shut down the extras. */
-#define MAX_IDLE_DNSWORKERS 10
-
/** How long will we wait for an answer from the resolver before we decide
* that the resolver is wedged? */
#define RESOLVE_MAX_TIMEOUT 300
@@ -44,14 +30,6 @@
#define DNS_RESOLVE_FAILED_PERMANENT 2
#define DNS_RESOLVE_SUCCEEDED 3
-#ifndef USE_EVENTDNS
-/** How many dnsworkers we have running right now. */
-static int num_dnsworkers=0;
-/** How many of the running dnsworkers have an assigned task right now. */
-static int num_dnsworkers_busy=0;
-/** When did we last rotate the dnsworkers? */
-static time_t last_rotation_time=0;
-#else
/** Have we currently configured nameservers with eventdns? */
static int nameservers_configured = 0;
/** What was the resolv_conf fname we last used when configuring the
@@ -60,7 +38,6 @@
/** What was the mtime on the resolv.conf file we last used when configuring
* the nameservers? Used to check whether we need to reconfigure. */
static time_t resolv_conf_mtime = 0;
-#endif
/** Linked list of connections waiting for a DNS answer. */
typedef struct pending_connection_t {
@@ -118,16 +95,9 @@
static void send_resolved_cell(edge_connection_t *conn, or_circuit_t *circ,
uint8_t answer_type);
static int launch_resolve(edge_connection_t *exitconn, or_circuit_t *circ);
-#ifndef USE_EVENTDNS
-static void dnsworkers_rotate(void);
-static void dnsworker_main(void *data);
-static int spawn_dnsworker(void);
-static int spawn_enough_dnsworkers(void);
-#else
static void add_wildcarded_test_address(const char *address);
static int configure_nameservers(int force);
static int answer_is_wildcarded(const char *ip);
-#endif
#ifdef DEBUG_DNS_CACHE
static void _assert_cache_ok(void);
#define assert_cache_ok() _assert_cache_ok()
@@ -168,7 +138,6 @@
HT_INIT(cache_map, &cache_root);
}
-#ifdef USE_EVENTDNS
/** Helper: called by eventdns when eventdns wants to log something. */
static void
evdns_log_cb(int warn, const char *msg)
@@ -208,19 +177,14 @@
}
log(severity, LD_EXIT, "eventdns: %s", msg);
}
-#endif
/** Initialize the DNS subsystem; called by the OR process. */
int
dns_init(void)
{
init_cache_map();
-#ifdef USE_EVENTDNS
if (server_mode(get_options()))
return configure_nameservers(1);
-#else
- dnsworkers_rotate();
-#endif
return 0;
}
@@ -229,7 +193,6 @@
int
dns_reset(void)
{
-#ifdef USE_EVENTDNS
or_options_t *options = get_options();
if (! server_mode(options)) {
evdns_clear_nameservers_and_suspend();
@@ -241,9 +204,6 @@
if (configure_nameservers(0) < 0)
return -1;
}
-#else
- dnsworkers_rotate();
-#endif
return 0;
}
@@ -338,9 +298,7 @@
if (cached_resolve_pqueue)
smartlist_free(cached_resolve_pqueue);
cached_resolve_pqueue = NULL;
-#ifdef USE_EVENTDNS
tor_free(resolv_conf_fname);
-#endif
}
/** Remove every cached_resolve whose <b>expire</b> time is before <b>now</b>
@@ -635,7 +593,6 @@
if (r == 1)
is_reverse = 1;
-#ifdef USE_EVENTDNS
if (!is_reverse || !is_resolve) {
if (!is_reverse)
log_info(LD_EXIT, "Bad .in-addr.arpa address \"%s\"; sending error.",
@@ -645,12 +602,6 @@
"Attempt to connect to a .in-addr.arpa address \"%s\"; "
"sending error.",
escaped_safe_str(exitconn->_base.address));
-#else
- if (1) {
- log_info(LD_PROTOCOL, "Dnsworker code does not support in-addr.arpa "
- "domain, but received a request for \"%s\"; sending error.",
- escaped_safe_str(exitconn->_base.address));
-#endif
if (exitconn->_base.purpose == EXIT_PURPOSE_RESOLVE)
send_resolved_cell(exitconn, oncirc, RESOLVED_TYPE_ERROR);
@@ -1062,412 +1013,6 @@
assert_cache_ok();
}
-#ifndef USE_EVENTDNS
-/** Find or spawn a dns worker process to handle resolving
- * <b>exitconn</b>-\>address; tell that dns worker to begin resolving.
- */
-static int
-launch_resolve(edge_connection_t *exitconn, or_circuit_t *circ)
-{
- connection_t *dnsconn;
- unsigned char len;
-
- tor_assert(exitconn->_base.state == EXIT_CONN_STATE_RESOLVING);
- assert_connection_ok(TO_CONN(exitconn), 0);
- tor_assert(exitconn->_base.s == -1);
-
- /* respawn here, to be sure there are enough */
- if (spawn_enough_dnsworkers() < 0) {
- goto err;
- }
-
- dnsconn = connection_get_by_type_state(CONN_TYPE_DNSWORKER,
- DNSWORKER_STATE_IDLE);
-
- if (!dnsconn) {
- log_warn(LD_EXIT,"no idle dns workers. Failing.");
- if (exitconn->_base.purpose == EXIT_PURPOSE_RESOLVE)
- send_resolved_cell(exitconn, circ, RESOLVED_TYPE_ERROR_TRANSIENT);
- goto err;
- }
-
- log_debug(LD_EXIT,
- "Connection (fd %d) needs to resolve %s; assigning "
- "to DNSWorker (fd %d)", exitconn->_base.s,
- escaped_safe_str(exitconn->_base.address), dnsconn->s);
-
- tor_free(dnsconn->address);
- dnsconn->address = tor_strdup(exitconn->_base.address);
- dnsconn->state = DNSWORKER_STATE_BUSY;
- /* touch the lastwritten timestamp, since that's how we check to
- * see how long it's been since we asked the question, and sometimes
- * we check before the first call to connection_handle_write(). */
- dnsconn->timestamp_lastwritten = time(NULL);
- num_dnsworkers_busy++;
-
- len = strlen(dnsconn->address);
- connection_write_to_buf((char*)&len, 1, dnsconn);
- connection_write_to_buf(dnsconn->address, len, dnsconn);
-
- return 0;
-err:
- /* also sends end and frees */
- dns_cancel_pending_resolve(exitconn->_base.address);
- return -1;
-}
-
-/******************************************************************/
-
-/*
- * Connection between OR and dnsworker
- */
-
-/** Write handler: called when we've pushed a request to a dnsworker. */
-int
-connection_dns_finished_flushing(connection_t *conn)
-{
- tor_assert(conn);
- tor_assert(conn->type == CONN_TYPE_DNSWORKER);
- connection_stop_writing(conn);
- return 0;
-}
-
-/** Called when a connection to a dnsworker hits an EOF; this only happens
- * when a dnsworker dies unexpectedly. */
-int
-connection_dns_reached_eof(connection_t *conn)
-{
- log_warn(LD_EXIT,"Read eof. DNS worker died unexpectedly.");
- if (conn->state == DNSWORKER_STATE_BUSY) {
- /* don't cancel the resolve here -- it would be cancelled in
- * connection_about_to_close_connection(), since conn is still
- * in state BUSY
- */
- num_dnsworkers_busy--;
- }
- num_dnsworkers--;
- connection_mark_for_close(conn);
- return 0;
-}
-
-/** Read handler: called when we get data from a dnsworker. See
- * if we have a complete answer. If so, call dns_found_answer on the
- * result. If not, wait. Returns 0. */
-int
-connection_dns_process_inbuf(connection_t *conn)
-{
- char success;
- uint32_t addr;
- int ttl;
-
- tor_assert(conn);
- tor_assert(conn->type == CONN_TYPE_DNSWORKER);
-
- if (conn->state != DNSWORKER_STATE_BUSY && buf_datalen(conn->inbuf)) {
- log_warn(LD_BUG,
- "read data (%d bytes) from an idle dns worker (fd %d, "
- "address %s). Please report.", (int)buf_datalen(conn->inbuf),
- conn->s, escaped_safe_str(conn->address));
- tor_fragile_assert();
-
- /* Pull it off the buffer anyway, or it will just stay there.
- * Keep pulling things off because sometimes we get several
- * answers at once (!). */
- while (buf_datalen(conn->inbuf)) {
- connection_fetch_from_buf(&success,1,conn);
- connection_fetch_from_buf((char *)&addr,sizeof(uint32_t),conn);
- log_warn(LD_EXIT,"Discarding idle dns answer (success %d, addr %d.)",
- success, addr);
- }
- return 0;
- }
- if (buf_datalen(conn->inbuf) < 5) /* entire answer available? */
- return 0; /* not yet */
- tor_assert(conn->state == DNSWORKER_STATE_BUSY);
- tor_assert(buf_datalen(conn->inbuf) == 5);
-
- connection_fetch_from_buf(&success,1,conn);
- connection_fetch_from_buf((char *)&addr,sizeof(uint32_t),conn);
-
- log_debug(LD_EXIT, "DNSWorker (fd %d) returned answer for %s",
- conn->s, escaped_safe_str(conn->address));
-
- tor_assert(success >= DNS_RESOLVE_FAILED_TRANSIENT);
- tor_assert(success <= DNS_RESOLVE_SUCCEEDED);
-
- ttl = (success == DNS_RESOLVE_FAILED_TRANSIENT) ? 0 : MAX_DNS_ENTRY_AGE;
- dns_found_answer(conn->address, 0, ntohl(addr), NULL, success, ttl);
-
- tor_free(conn->address);
- conn->address = tor_strdup("<idle>");
- conn->state = DNSWORKER_STATE_IDLE;
- num_dnsworkers_busy--;
- if (conn->timestamp_created < last_rotation_time) {
- connection_mark_for_close(conn);
- num_dnsworkers--;
- spawn_enough_dnsworkers();
- }
- return 0;
-}
-
-/** Close and re-open all idle dnsworkers; schedule busy ones to be closed
- * and re-opened once they're no longer busy.
- **/
-static void
-dnsworkers_rotate(void)
-{
- connection_t *dnsconn;
- while ((dnsconn = connection_get_by_type_state(CONN_TYPE_DNSWORKER,
- DNSWORKER_STATE_IDLE))) {
- connection_mark_for_close(dnsconn);
- num_dnsworkers--;
- }
- last_rotation_time = time(NULL);
- if (server_mode(get_options()))
- spawn_enough_dnsworkers();
-}
-
-/** Implementation for DNS workers; this code runs in a separate
- * execution context. It takes as its argument an fdarray as returned
- * by socketpair(), and communicates via fdarray[1]. The protocol is
- * as follows:
- * - The OR says:
- * - ADDRESSLEN [1 byte]
- * - ADDRESS [ADDRESSLEN bytes]
- * - The DNS worker does the lookup, and replies:
- * - OUTCOME [1 byte]
- * - IP [4 bytes]
- *
- * OUTCOME is one of DNS_RESOLVE_{FAILED_TRANSIENT|FAILED_PERMANENT|SUCCEEDED}.
- * IP is in host order.
- *
- * The dnsworker runs indefinitely, until its connection is closed or an error
- * occurs.
- */
-static void
-dnsworker_main(void *data)
-{
- char address[MAX_ADDRESSLEN+1]; /* Plus a byte for a final '.' */
- unsigned char address_len;
- char *log_address;
- char answer[5];
- uint32_t ip;
- int *fdarray = data;
- int fd;
- int result;
- int search = get_options()->ServerDNSSearchDomains;
-
- /* log_fn(LOG_NOTICE,"After spawn: fdarray @%d has %d:%d", (int)fdarray,
- * fdarray[0],fdarray[1]); */
-
- fd = fdarray[1]; /* this side is ours */
-#ifndef TOR_IS_MULTITHREADED
- tor_close_socket(fdarray[0]); /* this is the side of the socketpair the
- * parent uses */
- tor_free_all(1); /* so the child doesn't hold the parent's fd's open */
- handle_signals(0); /* ignore interrupts from the keyboard, etc */
-#endif
- tor_free(data);
-
- for (;;) {
- int r;
-
- if ((r = recv(fd, &address_len, 1, 0)) != 1) {
- if (r == 0) {
- log_info(LD_EXIT,"DNS worker exiting because Tor process closed "
- "connection (either pruned idle dnsworker or died).");
- } else {
- log_info(LD_EXIT,"DNS worker exiting because of error on connection "
- "to Tor process.");
- log_info(LD_EXIT,"(Error on %d was %s)", fd,
- tor_socket_strerror(tor_socket_errno(fd)));
- }
- tor_close_socket(fd);
- crypto_thread_cleanup();
- spawn_exit();
- }
-
- if (address_len && read_all(fd, address, address_len, 1) != address_len) {
- log_err(LD_BUG,"read hostname failed. Child exiting.");
- tor_close_socket(fd);
- crypto_thread_cleanup();
- spawn_exit();
- }
- /* Add a period to prevent local domain search, and NUL-terminate. */
- if (address[address_len-1] != '.' && !search) {
- address[address_len] = '.';
- address[address_len+1] = '\0';
- } else {
- address[address_len] = '\0';
- }
-
- log_address = esc_for_log(safe_str(address));
- result = tor_lookup_hostname(address, &ip);
- /* Make 0.0.0.0 an error, so that we can use "0" to mean "no addr") */
- if (!ip)
- result = -1;
- switch (result) {
- case 1:
- /* XXX result can never be 1, because we set it to -1 above on error */
- log_info(LD_NET,"Could not resolve dest addr %s (transient)",
- log_address);
- answer[0] = DNS_RESOLVE_FAILED_TRANSIENT;
- break;
- case -1:
- log_info(LD_NET,"Could not resolve dest addr %s (permanent)",
- log_address);
- answer[0] = DNS_RESOLVE_FAILED_PERMANENT;
- break;
- case 0:
- log_info(LD_NET,"Resolved address %s", log_address);
- answer[0] = DNS_RESOLVE_SUCCEEDED;
- break;
- }
- tor_free(log_address);
- set_uint32(answer+1, ip);
- if (write_all(fd, answer, 5, 1) != 5) {
- log_err(LD_NET,"writing answer failed. Child exiting.");
- tor_close_socket(fd);
- crypto_thread_cleanup();
- spawn_exit();
- }
- }
-}
-
-/** Launch a new DNS worker; return 0 on success, -1 on failure.
- */
-static int
-spawn_dnsworker(void)
-{
- int *fdarray;
- int fd;
- connection_t *conn;
- int err;
-
- fdarray = tor_malloc(sizeof(int)*2);
- if ((err = tor_socketpair(AF_UNIX, SOCK_STREAM, 0, fdarray)) < 0) {
- log_warn(LD_NET, "Couldn't construct socketpair for dns worker: %s",
- tor_socket_strerror(-err));
- tor_free(fdarray);
- return -1;
- }
-
- tor_assert(fdarray[0] >= 0);
- tor_assert(fdarray[1] >= 0);
-
- /* log_fn(LOG_NOTICE,"Before spawn: fdarray @%d has %d:%d",
- (int)fdarray, fdarray[0],fdarray[1]); */
-
- fd = fdarray[0]; /* We copy this out here, since dnsworker_main may free
- * fdarray */
- spawn_func((void*) dnsworker_main, (void*)fdarray);
- log_debug(LD_EXIT,"just spawned a dns worker.");
-#ifndef TOR_IS_MULTITHREADED
- tor_close_socket(fdarray[1]); /* don't need the worker's side of the pipe */
- tor_free(fdarray);
-#endif
-
- conn = connection_new(CONN_TYPE_DNSWORKER);
-
- set_socket_nonblocking(fd);
-
- /* set up conn so it's got all the data we need to remember */
- conn->s = fd;
- conn->address = tor_strdup("<unused>");
-
- if (connection_add(conn) < 0) { /* no space, forget it */
- log_warn(LD_NET,"connection_add for dnsworker failed. Giving up.");
- connection_free(conn); /* this closes fd */
- return -1;
- }
-
- conn->state = DNSWORKER_STATE_IDLE;
- connection_start_reading(conn);
-
- return 0; /* success */
-}
-
-/** If we have too many or too few DNS workers, spawn or kill some.
- * Return 0 if we are happy, return -1 if we tried to spawn more but
- * we couldn't.
- */
-static int
-spawn_enough_dnsworkers(void)
-{
- int num_dnsworkers_needed; /* aim to have 1 more than needed,
- * but no less than min and no more than max */
- connection_t *dnsconn;
-
- /* XXX This may not be the best strategy. Maybe we should queue pending
- * requests until the old ones finish or time out: otherwise, if the
- * connection requests come fast enough, we never get any DNS done. -NM
- *
- * XXX But if we queue them, then the adversary can pile even more
- * queries onto us, blocking legitimate requests for even longer. Maybe
- * we should compromise and only kill if it's been at it for more than,
- * e.g., 2 seconds. -RD
- */
- if (num_dnsworkers_busy == MAX_DNSWORKERS) {
- /* We always want at least one worker idle.
- * So find the oldest busy worker and kill it.
- */
- dnsconn = connection_get_by_type_state_lastwritten(CONN_TYPE_DNSWORKER,
- DNSWORKER_STATE_BUSY);
- tor_assert(dnsconn);
-
- log_warn(LD_EXIT, "%d DNS workers are spawned; all are busy. Killing one.",
- MAX_DNSWORKERS);
-
- connection_mark_for_close(dnsconn);
- num_dnsworkers_busy--;
- num_dnsworkers--;
- }
-
- if (num_dnsworkers_busy >= MIN_DNSWORKERS)
- num_dnsworkers_needed = num_dnsworkers_busy+1;
- else
- num_dnsworkers_needed = MIN_DNSWORKERS;
-
- while (num_dnsworkers < num_dnsworkers_needed) {
- if (spawn_dnsworker() < 0) {
- log_warn(LD_EXIT,"DNS worker spawn failed. Will try again later.");
- return -1;
- }
- num_dnsworkers++;
- }
-
- while (num_dnsworkers > num_dnsworkers_busy+MAX_IDLE_DNSWORKERS) {
- /* too many idle? */
- /* cull excess workers */
- log_info(LD_EXIT,"%d of %d dnsworkers are idle. Killing one.",
- num_dnsworkers-num_dnsworkers_busy, num_dnsworkers);
- dnsconn = connection_get_by_type_state(CONN_TYPE_DNSWORKER,
- DNSWORKER_STATE_IDLE);
- tor_assert(dnsconn);
- connection_mark_for_close(dnsconn);
- num_dnsworkers--;
- }
-
- return 0;
-}
-
-void
-dns_launch_correctness_checks(void)
-{
-}
-
-int
-dns_seems_to_be_broken(void)
-{
- return 0;
-}
-
-void
-dns_reset_correctness_checks(void)
-{
-}
-#else /* !USE_EVENTDNS */
-
/** Eventdns helper: return true iff the eventdns result <b>err</b> is
* a transient failure. */
static int
@@ -1483,30 +1028,6 @@
return 0;
}
}
-/* Dummy function; never called with eventdns enabled. */
-int
-connection_dns_finished_flushing(connection_t *conn)
-{
- (void)conn;
- tor_assert(0);
- return 0;
-}
-/* Dummy function; never called with eventdns enabled. */
-int
-connection_dns_process_inbuf(connection_t *conn)
-{
- (void)conn;
- tor_assert(0);
- return 0;
-}
-/* Dummy function; never called with eventdns enabled. */
-int
-connection_dns_reached_eof(connection_t *conn)
-{
- (void)conn;
- tor_assert(0);
- return 0;
-}
/** Configure eventdns nameservers if force is true, or if the configuration
* has changed since the last time we called this function. On Unix, this
@@ -1978,7 +1499,6 @@
{
return dns_wildcard_list && smartlist_string_isin(dns_wildcard_list, ip);
}
-#endif /* USE_EVENTDNS */
/** Exit with an assertion if <b>resolve</b> is corrupt. */
static void
Modified: tor/trunk/src/or/main.c
===================================================================
--- tor/trunk/src/or/main.c 2007-03-04 21:08:28 UTC (rev 9735)
+++ tor/trunk/src/or/main.c 2007-03-05 02:40:58 UTC (rev 9736)
@@ -16,9 +16,8 @@
#ifdef USE_DMALLOC
#include <dmalloc.h>
#endif
-#ifdef USE_EVENTDNS
+
void evdns_shutdown(int);
-#endif
/********* PROTOTYPES **********/
@@ -1640,11 +1639,9 @@
void
tor_free_all(int postfork)
{
-#ifdef USE_EVENTDNS
if (!postfork) {
evdns_shutdown(1);
}
-#endif
routerlist_free_all();
addressmap_free_all();
set_exit_redirects(NULL); /* free the registered exit redirects */
Modified: tor/trunk/src/or/or.h
===================================================================
--- tor/trunk/src/or/or.h 2007-03-04 21:08:28 UTC (rev 9735)
+++ tor/trunk/src/or/or.h 2007-03-05 02:40:58 UTC (rev 9736)
@@ -229,21 +229,19 @@
#define CONN_TYPE_DIR_LISTENER 8
/** Type for HTTP connections to the directory server. */
#define CONN_TYPE_DIR 9
-/** Connection from the main process to a DNS worker process. */
-#define CONN_TYPE_DNSWORKER 10
/** Connection from the main process to a CPU worker process. */
-#define CONN_TYPE_CPUWORKER 11
+#define CONN_TYPE_CPUWORKER 10
/** Type for listening for connections from user interface process. */
-#define CONN_TYPE_CONTROL_LISTENER 12
+#define CONN_TYPE_CONTROL_LISTENER 11
/** Type for connections from user interface process. */
-#define CONN_TYPE_CONTROL 13
+#define CONN_TYPE_CONTROL 12
/** Type for sockets listening for transparent connections redirected by pf or
* netfilter. */
-#define CONN_TYPE_AP_TRANS_LISTENER 14
+#define CONN_TYPE_AP_TRANS_LISTENER 13
/** Type for sockets listening for transparent connections redirected by
* natd. */
-#define CONN_TYPE_AP_NATD_LISTENER 15
-#define _CONN_TYPE_MAX 15
+#define CONN_TYPE_AP_NATD_LISTENER 14
+#define _CONN_TYPE_MAX 14
#define CONN_IS_EDGE(x) \
((x)->type == CONN_TYPE_EXIT || (x)->type == CONN_TYPE_AP)
@@ -2473,9 +2471,6 @@
int dns_init(void);
void dns_free_all(void);
uint32_t dns_clip_ttl(uint32_t ttl);
-int connection_dns_finished_flushing(connection_t *conn);
-int connection_dns_reached_eof(connection_t *conn);
-int connection_dns_process_inbuf(connection_t *conn);
int dns_reset(void);
void connection_dns_remove(edge_connection_t *conn);
void assert_connection_edge_not_dns_pending(edge_connection_t *conn);
Modified: tor/trunk/src/or/router.c
===================================================================
--- tor/trunk/src/or/router.c 2007-03-04 21:08:28 UTC (rev 9735)
+++ tor/trunk/src/or/router.c 2007-03-05 02:40:58 UTC (rev 9736)
@@ -1224,9 +1224,6 @@
"bandwidth %d %d %d\n"
"onion-key\n%s"
"signing-key\n%s"
-#ifndef USE_EVENTDNS
- "opt eventdns 0\n"
-#endif
"%s%s%s",
router->nickname,
router->address,
Modified: tor/trunk/src/or/test.c
===================================================================
--- tor/trunk/src/or/test.c 2007-03-04 21:08:28 UTC (rev 9735)
+++ tor/trunk/src/or/test.c 2007-03-05 02:40:58 UTC (rev 9736)
@@ -1557,9 +1557,6 @@
strlcat(buf2, pk1_str, sizeof(buf2));
strlcat(buf2, "signing-key\n", sizeof(buf2));
strlcat(buf2, pk2_str, sizeof(buf2));
-#ifndef USE_EVENTDNS
- strlcat(buf2, "opt eventdns 0\n", sizeof(buf2));
-#endif
strlcat(buf2, bw_lines, sizeof(buf2));
strlcat(buf2, "router-signature\n", sizeof(buf2));
buf[strlen(buf2)] = '\0'; /* Don't compare the sig; it's never the same