summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastian Hahn <sebastian@torproject.org>2010-02-19 17:19:33 +0100
committerSebastian Hahn <sebastian@torproject.org>2010-02-19 22:36:53 +0100
commit408a828b1f12462f7a31a5d84bcfa38399173b3e (patch)
tree21dac2d6ce48e7e36c0bd3034c34806e4f2122bc
parent0bd6cb31edbd33764c8d24dc3e79b8a7ca9eba84 (diff)
downloadtor-408a828b1f12462f7a31a5d84bcfa38399173b3e.tar.gz
tor-408a828b1f12462f7a31a5d84bcfa38399173b3e.zip
Make the DNSPort option work with libevent 2.x
We need to use evdns_add_server_port_with_base() when configuring our DNS listener, because libevent segfaults otherwise. Add a macro in compat_libevent.h to pick the correct implementation depending on the libevent version. Fixes bug 1143, found by SwissTorExit
-rw-r--r--ChangeLog3
-rw-r--r--src/common/compat_libevent.h5
-rw-r--r--src/or/dnsserv.c4
3 files changed, 10 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index 92e1ec1e5b..bbd37136a9 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -20,6 +20,9 @@ Changes in version 0.2.2.9-alpha - 2010-??-??
implemented in the past.
- Avoid a bogus overlapped memcpy in tor_addr_copy(). Found by
"memcpyfail".
+ - Make the DNSPort option work with libevent 2.x. Don't alter the
+ behaviour for libevent 1.x. Fixes bug 1143. Found by SwissTorExit.
+
o Code simplifications and refactoring:
- Generate our manpage and HTML documentation using Asciidoc. This
diff --git a/src/common/compat_libevent.h b/src/common/compat_libevent.h
index d2e76ce4e2..eedd9da43d 100644
--- a/src/common/compat_libevent.h
+++ b/src/common/compat_libevent.h
@@ -23,6 +23,10 @@ void suppress_libevent_log_msg(const char *msg);
#define tor_evtimer_new evtimer_new
#define tor_evsignal_new evsignal_new
#define tor_event_free event_free
+#define tor_evdns_add_server_port(sock, tcp, cb, data) \
+ evdns_add_server_port_with_base(tor_libevent_get_base(), \
+ (sock),(tcp),(cb),(data));
+
#else
struct event *tor_event_new(struct event_base * base, evutil_socket_t sock,
short what, void (*cb)(evutil_socket_t, short, void *), void *arg);
@@ -31,6 +35,7 @@ struct event *tor_evtimer_new(struct event_base * base,
struct event *tor_evsignal_new(struct event_base * base, int sig,
void (*cb)(evutil_socket_t, short, void *), void *arg);
void tor_event_free(struct event *ev);
+#define tor_evdns_add_server_port evdns_add_server_port
#endif
/* XXXX022 If we can drop support for Libevent before 1.1, we can
diff --git a/src/or/dnsserv.c b/src/or/dnsserv.c
index 256dcbd75b..8e3e55e795 100644
--- a/src/or/dnsserv.c
+++ b/src/or/dnsserv.c
@@ -299,8 +299,8 @@ dnsserv_configure_listener(connection_t *conn)
tor_assert(conn->s >= 0);
tor_assert(conn->type == CONN_TYPE_AP_DNS_LISTENER);
- conn->dns_server_port = evdns_add_server_port(conn->s, 0,
- evdns_server_callback, NULL);
+ conn->dns_server_port =
+ tor_evdns_add_server_port(conn->s, 0, evdns_server_callback, NULL);
}
/** Free the evdns server port for <b>conn</b>, which must be an