diff options
author | Nick Mathewson <nickm@torproject.org> | 2020-10-07 08:25:55 -0400 |
---|---|---|
committer | Nick Mathewson <nickm@torproject.org> | 2020-10-07 08:25:55 -0400 |
commit | ad7ffa5240c4b3a9b675a12f0705d9cbe0bc8beb (patch) | |
tree | b3ca342876222d4a8238d5c8bb645af1b305e958 /src | |
parent | 98e14720b5bc30a7cf9af15a1f618ddce0922ef9 (diff) | |
parent | ceb6585a4bc2beadde2fb194395711e72ee8559d (diff) | |
download | tor-ad7ffa5240c4b3a9b675a12f0705d9cbe0bc8beb.tar.gz tor-ad7ffa5240c4b3a9b675a12f0705d9cbe0bc8beb.zip |
Merge remote-tracking branch 'tor-gitlab/mr/79' into maint-0.3.5
Diffstat (limited to 'src')
-rw-r--r-- | src/core/mainloop/connection.c | 7 | ||||
-rw-r--r-- | src/core/or/connection_st.h | 3 | ||||
-rw-r--r-- | src/feature/relay/ext_orport.c | 5 |
3 files changed, 13 insertions, 2 deletions
diff --git a/src/core/mainloop/connection.c b/src/core/mainloop/connection.c index dcd4ec492f..21d4332758 100644 --- a/src/core/mainloop/connection.c +++ b/src/core/mainloop/connection.c @@ -379,8 +379,12 @@ or_connection_new(int type, int socket_family) connection_or_set_canonical(or_conn, 0); - if (type == CONN_TYPE_EXT_OR) + if (type == CONN_TYPE_EXT_OR) { + /* If we aren't told an address for this connection, we should + * presume it isn't local, and should be rate-limited. */ + TO_CONN(or_conn)->always_rate_limit_as_remote = 1; connection_or_set_ext_or_identifier(or_conn); + } return or_conn; } @@ -3032,6 +3036,7 @@ connection_is_rate_limited(connection_t *conn) if (conn->linked) return 0; /* Internal connection */ else if (! options->CountPrivateBandwidth && + ! conn->always_rate_limit_as_remote && (tor_addr_family(&conn->addr) == AF_UNSPEC || /* no address */ tor_addr_family(&conn->addr) == AF_UNIX || /* no address */ tor_addr_is_internal(&conn->addr, 0))) diff --git a/src/core/or/connection_st.h b/src/core/or/connection_st.h index d1430eda14..c197a81340 100644 --- a/src/core/or/connection_st.h +++ b/src/core/or/connection_st.h @@ -64,6 +64,9 @@ struct connection_t { /** True if connection_handle_write is currently running on this connection. */ unsigned int in_connection_handle_write:1; + /** If true, then we treat this connection as remote for the purpose of + * rate-limiting, no matter what its address is. */ + unsigned int always_rate_limit_as_remote:1; /* For linked connections: */ diff --git a/src/feature/relay/ext_orport.c b/src/feature/relay/ext_orport.c index 56c5bb96f5..136aee3084 100644 --- a/src/feature/relay/ext_orport.c +++ b/src/feature/relay/ext_orport.c @@ -494,6 +494,10 @@ connection_ext_or_handle_cmd_useraddr(connection_t *conn, } conn->address = tor_addr_to_str_dup(&addr); + /* Now that we know the address, we don't have to manually override rate + * limiting. */ + conn->always_rate_limit_as_remote = 0; + return 0; } @@ -659,4 +663,3 @@ ext_orport_free_all(void) if (ext_or_auth_cookie) /* Free the auth cookie */ tor_free(ext_or_auth_cookie); } - |