aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2008-04-22 17:21:26 +0000
committerNick Mathewson <nickm@torproject.org>2008-04-22 17:21:26 +0000
commita041553e21d0c1a05c20ea0b9e7eaf65d880e7e1 (patch)
tree1cda0b38188a8b823cd4e68ced41f0b5dcbf3cf1
parent2fd8c928b39ef1dffd3c2df838003d2a5a7379e1 (diff)
downloadtor-a041553e21d0c1a05c20ea0b9e7eaf65d880e7e1.tar.gz
tor-a041553e21d0c1a05c20ea0b9e7eaf65d880e7e1.zip
r15279@tombo: nickm | 2008-04-22 13:21:01 -0400
Backport: Apply patch from mwenge to fix bug 646: makes stream events for dns requests get generated more consistently. svn:r14414
-rw-r--r--ChangeLog4
-rw-r--r--src/or/connection_edge.c10
2 files changed, 11 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog
index 8c487eb498..4661325c83 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -30,6 +30,10 @@ Changes in version 0.2.0.24-rc - 2008-04-0?
untrusted sources. Fixes bug 663.
- Non-exit relays no longer allow DNS requests. Fixes bug 619.
Patch from Lodger.
+ - Make controller stream events for DNS requests more consistent,
+ by adding "new stream" events for DNS requests, and removing
+ spurious "stream closed" events" for cached reverse resolves.
+ Patch from mwenge. Fixes bug 646.
o Minor features (security):
- Reject requests for reverse-dns lookup of names in a private
diff --git a/src/or/connection_edge.c b/src/or/connection_edge.c
index 53531ffb24..e19fa82ab7 100644
--- a/src/or/connection_edge.c
+++ b/src/or/connection_edge.c
@@ -1342,13 +1342,15 @@ connection_ap_handshake_rewrite_and_attach(edge_connection_t *conn,
&map_expires)) {
char *result = tor_strdup(socks->address);
/* remember _what_ is supposed to have been resolved. */
- strlcpy(socks->address, orig_address, sizeof(socks->address));
+ tor_snprintf(socks->address, sizeof(socks->address), "REVERSE[%s]",
+ orig_address);
connection_ap_handshake_socks_resolved(conn, RESOLVED_TYPE_HOSTNAME,
strlen(result), result, -1,
map_expires);
connection_mark_unattached_ap(conn,
- END_STREAM_REASON_DONE |
- END_STREAM_REASON_FLAG_ALREADY_SOCKS_REPLIED);
+ END_STREAM_REASON_DONE |
+ END_STREAM_REASON_FLAG_ALREADY_SOCKS_REPLIED |
+ END_STREAM_REASON_FLAG_ALREADY_SENT_CLOSED);
return 0;
}
if (options->ClientDNSRejectInternalAddresses) {
@@ -2079,9 +2081,11 @@ connection_ap_handshake_send_resolve(edge_connection_t *ap_conn)
string_addr, payload_len) < 0)
return -1; /* circuit is closed, don't continue */
+ ap_conn->_base.address = tor_strdup("(Tor_internal)");
ap_conn->_base.state = AP_CONN_STATE_RESOLVE_WAIT;
log_info(LD_APP,"Address sent for resolve, ap socket %d, n_circ_id %d",
ap_conn->_base.s, circ->_base.n_circ_id);
+ control_event_stream_status(ap_conn, STREAM_EVENT_NEW, 0);
control_event_stream_status(ap_conn, STREAM_EVENT_SENT_RESOLVE, 0);
return 0;
}