diff options
author | Nick Mathewson <nickm@torproject.org> | 2008-04-22 17:21:26 +0000 |
---|---|---|
committer | Nick Mathewson <nickm@torproject.org> | 2008-04-22 17:21:26 +0000 |
commit | a041553e21d0c1a05c20ea0b9e7eaf65d880e7e1 (patch) | |
tree | 1cda0b38188a8b823cd4e68ced41f0b5dcbf3cf1 | |
parent | 2fd8c928b39ef1dffd3c2df838003d2a5a7379e1 (diff) | |
download | tor-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-- | ChangeLog | 4 | ||||
-rw-r--r-- | src/or/connection_edge.c | 10 |
2 files changed, 11 insertions, 3 deletions
@@ -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; } |