mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-12-06 19:41:15 +01:00
Refactor sockaddr family match check into a new function
svn:r17820
This commit is contained in:
+22
-17
@@ -1030,6 +1030,26 @@ check_sockaddr(struct sockaddr *sa, int len, int level)
|
||||
return ok ? 0 : -1;
|
||||
}
|
||||
|
||||
/** Check whether the socket family from an accepted socket <b>got</b> is the
|
||||
* same as the one that <b>listener</b> is waiting for. If it isn't, log
|
||||
* a useful message and return -1. Else return 0.
|
||||
*
|
||||
* This is annoying, but can apparently happen on some Darwins. */
|
||||
static int
|
||||
check_sockaddr_family_match(sa_family_t got, connection_t *listener)
|
||||
{
|
||||
if (got != listener->socket_family) {
|
||||
log_info(LD_BUG, "A listener connection returned a socket with a "
|
||||
"mismatched family. %s for addr_family %d gave us a socket "
|
||||
"with address family %d. Dropping.",
|
||||
conn_type_to_string(listener->type),
|
||||
(int)listener->socket_family,
|
||||
(int)got);
|
||||
return -1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/** The listener connection <b>conn</b> told poll() it wanted to read.
|
||||
* Call accept() on conn-\>s, and add the new connection if necessary.
|
||||
*/
|
||||
@@ -1072,14 +1092,7 @@ connection_handle_listener_read(connection_t *conn, int new_type)
|
||||
if (options->ConstrainedSockets)
|
||||
set_constrained_socket_buffers(news, (int)options->ConstrainedSockSize);
|
||||
|
||||
if (remote->sa_family != conn->socket_family) {
|
||||
/* This is annoying, but can apparently happen on some Darwins. */
|
||||
log_info(LD_BUG, "A listener connection returned a socket with a "
|
||||
"mismatched family. %s for addr_family %d gave us a socket "
|
||||
"with address family %d. Dropping.",
|
||||
conn_type_to_string(conn->type),
|
||||
(int)conn->socket_family,
|
||||
(int)remote->sa_family);
|
||||
if (check_sockaddr_family_match(remote->sa_family, conn) < 0) {
|
||||
tor_close_socket(news);
|
||||
return 0;
|
||||
}
|
||||
@@ -1106,15 +1119,7 @@ connection_handle_listener_read(connection_t *conn, int new_type)
|
||||
}
|
||||
}
|
||||
|
||||
/* Duplicate code. XXXX021 */
|
||||
if (remote->sa_family != conn->socket_family) {
|
||||
/* This is annoying, but can apparently happen on some Darwins. */
|
||||
log_info(LD_BUG, "A listener connection returned a socket with a "
|
||||
"mismatched family. %s for addr_family %d gave us a socket "
|
||||
"with address family %d. Dropping.",
|
||||
conn_type_to_string(conn->type),
|
||||
(int)conn->socket_family,
|
||||
(int)remote->sa_family);
|
||||
if (check_sockaddr_family_match(remote->sa_family, conn) < 0) {
|
||||
tor_close_socket(news);
|
||||
return 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user