From: Sebastian Hahn Date: Fri, 19 Feb 2010 16:19:33 +0000 (+0100) Subject: Make the DNSPort option work with libevent 2.x X-Git-Tag: tor-0.2.2.9-alpha~16^2 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=408a828b1f12462f7a31a5d84bcfa38399173b3e;p=thirdparty%2Ftor.git 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 --- 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 conn, which must be an