diff options
author | Nick Mathewson <nickm@torproject.org> | 2017-07-05 11:01:36 -0400 |
---|---|---|
committer | Nick Mathewson <nickm@torproject.org> | 2017-07-05 11:01:36 -0400 |
commit | cd77ea782ede057c2086f25b3e2084c78dbde805 (patch) | |
tree | cdf69e8b67fb25be64e49e8275535f4abe6e1a74 /src/or/control.c | |
parent | 46e83477c15d547e0a8d3df2926adf8ee10b77a6 (diff) | |
parent | 03b6cfd5911740471eac13e82f678fe50b4d18f9 (diff) | |
download | tor-cd77ea782ede057c2086f25b3e2084c78dbde805.tar.gz tor-cd77ea782ede057c2086f25b3e2084c78dbde805.zip |
Merge branch 'neena-fix-1667'
Diffstat (limited to 'src/or/control.c')
-rw-r--r-- | src/or/control.c | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/src/or/control.c b/src/or/control.c index 4300dae9a3..dc431d6d51 100644 --- a/src/or/control.c +++ b/src/or/control.c @@ -4912,6 +4912,38 @@ peek_connection_has_control0_command(connection_t *conn) return peek_buf_has_control0_command(conn->inbuf); } +static int +peek_connection_has_http_command(connection_t *conn) +{ + return peek_buf_has_http_command(conn->inbuf); +} + +const char CONTROLPORT_IS_NOT_AN_HTTP_PROXY_MSG[] = + "HTTP/1.0 501 Tor ControlPort is not an HTTP proxy" + "\r\nContent-Type: text/html; charset=iso-8859-1\r\n\r\n" + "<html>\n" + "<head>\n" + "<title>Tor's ControlPort is not an HTTP proxy</title>\n" + "</head>\n" + "<body>\n" + "<h1>Tor's ControlPort is not an HTTP proxy</h1>\n" + "<p>\n" + "It appears you have configured your web browser to use Tor's control port" + " as an HTTP proxy.\n" + "This is not correct: Tor's default SOCKS proxy port is 9050.\n" + "Please configure your client accordingly.\n" + "</p>\n" + "<p>\n" + "See <a href=\"https://www.torproject.org/documentation.html\">" + "https://www.torproject.org/documentation.html</a> for more " + "information.\n" + "<!-- Plus this comment, to make the body response more than 512 bytes, so " + " IE will be willing to display it. Comment comment comment comment " + " comment comment comment comment comment comment comment comment.-->\n" + "</p>\n" + "</body>\n" + "</html>\n"; + /** Called when data has arrived on a v1 control connection: Try to fetch * commands from conn->inbuf, and execute them. */ @@ -4951,6 +4983,15 @@ connection_control_process_inbuf(control_connection_t *conn) return 0; } + /* If the user has the HTTP proxy port and the control port confused. */ + if (conn->base_.state == CONTROL_CONN_STATE_NEEDAUTH && + peek_connection_has_http_command(TO_CONN(conn))) { + connection_write_str_to_buf(CONTROLPORT_IS_NOT_AN_HTTP_PROXY_MSG, conn); + log_notice(LD_CONTROL, "Received HTTP request on ControlPort"); + connection_mark_and_flush(TO_CONN(conn)); + return 0; + } + again: while (1) { size_t last_idx; |