mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-28 14:23:30 +01:00
Various trivial changes.
* Improved function documentation. * Renamed find_bridge_transport_by_addrport() to find_transport_by_bridge_addrport(). * Sanitized log severities we use. * Ran check-spaces.
This commit is contained in:
parent
29203b7f3f
commit
00ec4b2c00
@ -4514,7 +4514,7 @@ typedef struct {
|
|||||||
char identity[DIGEST_LEN];
|
char identity[DIGEST_LEN];
|
||||||
|
|
||||||
/** Name of pluggable transport protocol taken from its config line.
|
/** Name of pluggable transport protocol taken from its config line.
|
||||||
Free'd when we match the bridge with a transport at
|
Free'd when we match the bridge with a transport at
|
||||||
match_bridges_with_transports(). */
|
match_bridges_with_transports(). */
|
||||||
char *transport_name_config;
|
char *transport_name_config;
|
||||||
|
|
||||||
@ -4603,8 +4603,7 @@ transport_add_from_config(const tor_addr_t *addr, uint16_t port,
|
|||||||
|
|
||||||
tor_addr_copy(&t->addr, addr);
|
tor_addr_copy(&t->addr, addr);
|
||||||
t->port = port;
|
t->port = port;
|
||||||
/** check strdup return */
|
t->name = tor_strdup(name);
|
||||||
t->name = strdup(name);
|
|
||||||
t->socks_version = socks_ver;
|
t->socks_version = socks_ver;
|
||||||
if (!transport_list)
|
if (!transport_list)
|
||||||
transport_list = smartlist_create();
|
transport_list = smartlist_create();
|
||||||
@ -4620,7 +4619,7 @@ transport_add_from_config(const tor_addr_t *addr, uint16_t port,
|
|||||||
int
|
int
|
||||||
match_bridges_with_transports(void)
|
match_bridges_with_transports(void)
|
||||||
{
|
{
|
||||||
/* Used to check if a transport was finally found for a bridge */
|
/* Used to check if a transport was finally found for a bridge */
|
||||||
int found_match=0;
|
int found_match=0;
|
||||||
/* Number of matches. */
|
/* Number of matches. */
|
||||||
int n_matches=0;
|
int n_matches=0;
|
||||||
@ -4629,16 +4628,16 @@ match_bridges_with_transports(void)
|
|||||||
|
|
||||||
tor_assert(transport_list);
|
tor_assert(transport_list);
|
||||||
tor_assert(bridge_list);
|
tor_assert(bridge_list);
|
||||||
|
|
||||||
/* Iterate bridges */
|
/* Iterate bridges */
|
||||||
SMARTLIST_FOREACH_BEGIN(bridge_list, bridge_info_t *, b)
|
SMARTLIST_FOREACH_BEGIN(bridge_list, bridge_info_t *, b)
|
||||||
{
|
{
|
||||||
/* Skip bridges without transports. */
|
/* Skip bridges without transports. */
|
||||||
if (!b->transport_name_config)
|
if (!b->transport_name_config)
|
||||||
continue;
|
continue;
|
||||||
found_match=0;
|
found_match=0;
|
||||||
/* Iterate transports */
|
/* Iterate transports */
|
||||||
SMARTLIST_FOREACH_BEGIN(transport_list, transport_info_t *, t)
|
SMARTLIST_FOREACH_BEGIN(transport_list, transport_info_t *, t)
|
||||||
{
|
{
|
||||||
/* If the transport name of the transport is the same as the
|
/* If the transport name of the transport is the same as the
|
||||||
transport name of the bridge, we have a match. */
|
transport name of the bridge, we have a match. */
|
||||||
@ -4647,28 +4646,29 @@ match_bridges_with_transports(void)
|
|||||||
n_matches++;
|
n_matches++;
|
||||||
b->transport = t;
|
b->transport = t;
|
||||||
tor_free(b->transport_name_config);
|
tor_free(b->transport_name_config);
|
||||||
log_warn(LD_CONFIG, "Matched transport '%s'", t->name);
|
log_warn(LD_CONFIG, "Matched transport '%s'", t->name);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
} SMARTLIST_FOREACH_END(t);
|
} SMARTLIST_FOREACH_END(t);
|
||||||
if (!found_match) {
|
if (!found_match) {
|
||||||
log_warn(LD_CONFIG, "Couldn't find transport "
|
log_warn(LD_CONFIG, "Couldn't find transport "
|
||||||
"match for %s!\n", b->transport_name_config);
|
"match for %s!\n", b->transport_name_config);
|
||||||
|
/* tor_free(b->transport_name_config); */
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
} SMARTLIST_FOREACH_END(b);
|
} SMARTLIST_FOREACH_END(b);
|
||||||
|
|
||||||
/* count number of transports to see if there were transports
|
/* Count number of transports to make sure that all transports got
|
||||||
that didn't get matched to a bridge. */
|
matched to bridges. */
|
||||||
SMARTLIST_FOREACH(transport_list, transport_info_t *, t, n_transports++);
|
SMARTLIST_FOREACH(transport_list, transport_info_t *, t, n_transports++);
|
||||||
if (n_transports != n_matches) {
|
if (n_transports != n_matches) {
|
||||||
log_warn(LD_CONFIG, "You have %d transports and we only "
|
log_warn(LD_CONFIG, "You have %d transports but we only "
|
||||||
"managed to match %d of them!\n", n_transports, n_matches);
|
"managed to match %d of them!\n", n_transports, n_matches);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Return a bridge pointer if <b>ri</b> is one of our known bridges
|
/** Return a bridge pointer if <b>ri</b> is one of our known bridges
|
||||||
* (either by comparing keys if possible, else by comparing addr/port).
|
* (either by comparing keys if possible, else by comparing addr/port).
|
||||||
@ -4748,7 +4748,10 @@ learned_router_identity(const tor_addr_t *addr, uint16_t port,
|
|||||||
|
|
||||||
/** Remember a new bridge at <b>addr</b>:<b>port</b>. If <b>digest</b>
|
/** Remember a new bridge at <b>addr</b>:<b>port</b>. If <b>digest</b>
|
||||||
* is set, it tells us the identity key too. If we already had the
|
* is set, it tells us the identity key too. If we already had the
|
||||||
* bridge in our list, unmark it, and don't actually add anything new. */
|
* bridge in our list, unmark it, and don't actually add anything new.
|
||||||
|
* If <b>transport_name</b> is non-NULL - the bridge is associated with a
|
||||||
|
* pluggable transport - we assign the transport to the bridge.
|
||||||
|
*/
|
||||||
void
|
void
|
||||||
bridge_add_from_config(const tor_addr_t *addr, uint16_t port,
|
bridge_add_from_config(const tor_addr_t *addr, uint16_t port,
|
||||||
const char *digest, const char *transport_name)
|
const char *digest, const char *transport_name)
|
||||||
@ -4805,11 +4808,12 @@ find_bridge_by_digest(const char *digest)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/** If <b>addr</b> and <b>port</b> match one of our known bridges,
|
/** If <b>addr</b> and <b>port</b> match one of our known bridges,
|
||||||
* returns it's transport protocol if it has one, else returns NULL.
|
* returns its transport protocol if it has one, else returns NULL.
|
||||||
*/
|
*/
|
||||||
transport_info_t *
|
transport_info_t *
|
||||||
find_bridge_transport_by_addrport(const tor_addr_t *addr, uint16_t port)
|
find_transport_by_bridge_addrport(const tor_addr_t *addr, uint16_t port)
|
||||||
{
|
{
|
||||||
|
assert(bridge_list);
|
||||||
SMARTLIST_FOREACH_BEGIN(bridge_list, bridge_info_t *, bridge)
|
SMARTLIST_FOREACH_BEGIN(bridge_list, bridge_info_t *, bridge)
|
||||||
{
|
{
|
||||||
if (tor_addr_eq(&bridge->addr, addr) &&
|
if (tor_addr_eq(&bridge->addr, addr) &&
|
||||||
|
@ -17,13 +17,10 @@
|
|||||||
typedef struct {
|
typedef struct {
|
||||||
/* SOCKS version */
|
/* SOCKS version */
|
||||||
int socks_version;
|
int socks_version;
|
||||||
|
|
||||||
/* Name of pluggable transport protocol */
|
/* Name of pluggable transport protocol */
|
||||||
char *name;
|
char *name;
|
||||||
|
|
||||||
/* Address of proxy */
|
/* Address of proxy */
|
||||||
tor_addr_t addr;
|
tor_addr_t addr;
|
||||||
|
|
||||||
/* Port of proxy */
|
/* Port of proxy */
|
||||||
uint16_t port;
|
uint16_t port;
|
||||||
} transport_info_t;
|
} transport_info_t;
|
||||||
@ -86,7 +83,7 @@ int node_is_a_configured_bridge(const node_t *node);
|
|||||||
void learned_router_identity(const tor_addr_t *addr, uint16_t port,
|
void learned_router_identity(const tor_addr_t *addr, uint16_t port,
|
||||||
const char *digest);
|
const char *digest);
|
||||||
void bridge_add_from_config(const tor_addr_t *addr, uint16_t port,
|
void bridge_add_from_config(const tor_addr_t *addr, uint16_t port,
|
||||||
const char *digest,
|
const char *digest,
|
||||||
const char *transport_name);
|
const char *transport_name);
|
||||||
void retry_bridge_descriptor_fetch_directly(const char *digest);
|
void retry_bridge_descriptor_fetch_directly(const char *digest);
|
||||||
void fetch_bridge_descriptors(or_options_t *options, time_t now);
|
void fetch_bridge_descriptors(or_options_t *options, time_t now);
|
||||||
@ -143,13 +140,12 @@ void circuit_build_times_network_circ_success(circuit_build_times_t *cbt);
|
|||||||
|
|
||||||
int circuit_build_times_get_bw_scale(networkstatus_t *ns);
|
int circuit_build_times_get_bw_scale(networkstatus_t *ns);
|
||||||
|
|
||||||
|
|
||||||
void clear_transport_list(void);
|
void clear_transport_list(void);
|
||||||
int match_bridges_with_transports(void);
|
int match_bridges_with_transports(void);
|
||||||
void transport_add_from_config(const tor_addr_t *addr, uint16_t port,
|
void transport_add_from_config(const tor_addr_t *addr, uint16_t port,
|
||||||
const char *name, int socks_ver);
|
const char *name, int socks_ver);
|
||||||
transport_info_t *
|
transport_info_t *
|
||||||
find_bridge_transport_by_addrport(const tor_addr_t *addr, uint16_t port);
|
find_transport_by_bridge_addrport(const tor_addr_t *addr, uint16_t port);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -205,7 +205,7 @@ static config_var_t _option_vars[] = {
|
|||||||
V(ClientDNSRejectInternalAddresses, BOOL,"1"),
|
V(ClientDNSRejectInternalAddresses, BOOL,"1"),
|
||||||
V(ClientOnly, BOOL, "0"),
|
V(ClientOnly, BOOL, "0"),
|
||||||
V(ClientRejectInternalAddresses, BOOL, "1"),
|
V(ClientRejectInternalAddresses, BOOL, "1"),
|
||||||
VAR("ClientTransportPlugin", LINELIST, ClientTransportPlugin, NULL),
|
VAR("ClientTransportPlugin", LINELIST, ClientTransportPlugin, NULL),
|
||||||
V(ConsensusParams, STRING, NULL),
|
V(ConsensusParams, STRING, NULL),
|
||||||
V(ConnLimit, UINT, "1000"),
|
V(ConnLimit, UINT, "1000"),
|
||||||
V(ConnDirectionStatistics, BOOL, "0"),
|
V(ConnDirectionStatistics, BOOL, "0"),
|
||||||
@ -571,7 +571,7 @@ static int check_nickname_list(const char *lst, const char *name, char **msg);
|
|||||||
static void config_register_addressmaps(or_options_t *options);
|
static void config_register_addressmaps(or_options_t *options);
|
||||||
|
|
||||||
static int parse_bridge_line(const char *line, int validate_only);
|
static int parse_bridge_line(const char *line, int validate_only);
|
||||||
static int parse_transport_line(const char *line, int validate_only);
|
static int parse_client_transport_line(const char *line, int validate_only);
|
||||||
static int parse_dir_server_line(const char *line,
|
static int parse_dir_server_line(const char *line,
|
||||||
dirinfo_type_t required_type,
|
dirinfo_type_t required_type,
|
||||||
int validate_only);
|
int validate_only);
|
||||||
@ -1210,7 +1210,7 @@ options_act(or_options_t *old_options)
|
|||||||
if (options->ClientTransportPlugin) {
|
if (options->ClientTransportPlugin) {
|
||||||
clear_transport_list();
|
clear_transport_list();
|
||||||
for (cl = options->ClientTransportPlugin; cl; cl = cl->next) {
|
for (cl = options->ClientTransportPlugin; cl; cl = cl->next) {
|
||||||
if (parse_transport_line(cl->value, 0)<0) {
|
if (parse_client_transport_line(cl->value, 0)<0) {
|
||||||
log_warn(LD_BUG,
|
log_warn(LD_BUG,
|
||||||
"Previously validated ClientTransportPlugin line "
|
"Previously validated ClientTransportPlugin line "
|
||||||
"could not be added!");
|
"could not be added!");
|
||||||
@ -1218,7 +1218,7 @@ options_act(or_options_t *old_options)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (options->Bridges) {
|
if (options->Bridges) {
|
||||||
mark_bridge_list();
|
mark_bridge_list();
|
||||||
for (cl = options->Bridges; cl; cl = cl->next) {
|
for (cl = options->Bridges; cl; cl = cl->next) {
|
||||||
@ -1234,6 +1234,7 @@ options_act(or_options_t *old_options)
|
|||||||
/** Okay, we have Bridges and we have ClientTransportPlugins. Let's
|
/** Okay, we have Bridges and we have ClientTransportPlugins. Let's
|
||||||
match them together. */
|
match them together. */
|
||||||
if (options->Bridges && options->ClientTransportPlugin) {
|
if (options->Bridges && options->ClientTransportPlugin) {
|
||||||
|
assert(!server_mode(options));
|
||||||
if (match_bridges_with_transports() < 0)
|
if (match_bridges_with_transports() < 0)
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@ -3688,8 +3689,11 @@ options_validate(or_options_t *old_options, or_options_t *options,
|
|||||||
if (options->ClientTransportPlugin) {
|
if (options->ClientTransportPlugin) {
|
||||||
if (!options->Bridges)
|
if (!options->Bridges)
|
||||||
REJECT("ClientTransportPlugin found without any bridges.");
|
REJECT("ClientTransportPlugin found without any bridges.");
|
||||||
|
if (server_mode(options))
|
||||||
|
REJECT("ClientTransportPlugin found but we are a server.");
|
||||||
|
|
||||||
for (cl = options->ClientTransportPlugin; cl; cl = cl->next) {
|
for (cl = options->ClientTransportPlugin; cl; cl = cl->next) {
|
||||||
if (parse_transport_line(cl->value, 1)<0)
|
if (parse_client_transport_line(cl->value, 1)<0)
|
||||||
REJECT("Transport line did not parse. See logs for details.");
|
REJECT("Transport line did not parse. See logs for details.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -4633,10 +4637,10 @@ parse_bridge_line(const char *line, int validate_only)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!validate_only) {
|
if (!validate_only) {
|
||||||
log_warn(LD_DIR, "Bridge at %s:%d with transport %s (%s)",
|
log_debug(LD_DIR, "Bridge at %s:%d with transport %s (%s)",
|
||||||
fmt_addr(&addr), (int)port, transport_name,
|
fmt_addr(&addr), (int)port, transport_name,
|
||||||
fingerprint ? fingerprint : "no key listed");
|
fingerprint ? fingerprint : "no key listed");
|
||||||
bridge_add_from_config(&addr, port,
|
bridge_add_from_config(&addr, port,
|
||||||
fingerprint ? digest : NULL, transport_name);
|
fingerprint ? digest : NULL, transport_name);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -4655,8 +4659,14 @@ parse_bridge_line(const char *line, int validate_only)
|
|||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Read the contents of a ClientTransportPlugin line from
|
||||||
|
* <b>line</b>. Return 0 if the line is well-formed, and -1 if it
|
||||||
|
* isn't. If <b>validate_only</b> is 0, and the line is well-formed,
|
||||||
|
* then add the transport described in the line to our internal
|
||||||
|
* transport list.
|
||||||
|
*/
|
||||||
static int
|
static int
|
||||||
parse_transport_line(const char *line, int validate_only)
|
parse_client_transport_line(const char *line, int validate_only)
|
||||||
{
|
{
|
||||||
smartlist_t *items = NULL;
|
smartlist_t *items = NULL;
|
||||||
int r;
|
int r;
|
||||||
@ -4665,24 +4675,24 @@ parse_transport_line(const char *line, int validate_only)
|
|||||||
char *addrport=NULL;
|
char *addrport=NULL;
|
||||||
int socks_ver;
|
int socks_ver;
|
||||||
tor_addr_t addr;
|
tor_addr_t addr;
|
||||||
uint16_t port = 0;
|
uint16_t port = 0;
|
||||||
|
|
||||||
items = smartlist_create();
|
items = smartlist_create();
|
||||||
smartlist_split_string(items, line, NULL,
|
smartlist_split_string(items, line, NULL,
|
||||||
SPLIT_SKIP_SPACE|SPLIT_IGNORE_BLANK, -1);
|
SPLIT_SKIP_SPACE|SPLIT_IGNORE_BLANK, -1);
|
||||||
|
|
||||||
if (smartlist_len(items) < 3) {
|
if (smartlist_len(items) < 3) {
|
||||||
log_warn(LD_CONFIG, "parse_transport_line(): "
|
log_warn(LD_CONFIG, "parse_client_transport_line(): "
|
||||||
"Too few arguments on ClientTransportPlugin line.");
|
"Too few arguments on ClientTransportPlugin line.");
|
||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
|
|
||||||
name = smartlist_get(items, 0);
|
name = smartlist_get(items, 0);
|
||||||
smartlist_del_keeporder(items, 0);
|
smartlist_del_keeporder(items, 0);
|
||||||
|
|
||||||
socks_ver_str = smartlist_get(items, 0);
|
socks_ver_str = smartlist_get(items, 0);
|
||||||
smartlist_del_keeporder(items, 0);
|
smartlist_del_keeporder(items, 0);
|
||||||
|
|
||||||
if (!strcmp(socks_ver_str,"socks4"))
|
if (!strcmp(socks_ver_str,"socks4"))
|
||||||
socks_ver = PROXY_SOCKS4;
|
socks_ver = PROXY_SOCKS4;
|
||||||
else if (!strcmp(socks_ver_str,"socks5"))
|
else if (!strcmp(socks_ver_str,"socks5"))
|
||||||
@ -4706,9 +4716,9 @@ parse_transport_line(const char *line, int validate_only)
|
|||||||
"Transport address '%s' has no port.", addrport);
|
"Transport address '%s' has no port.", addrport);
|
||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!validate_only) {
|
if (!validate_only) {
|
||||||
log_warn(LD_DIR, "Transport %s at %s:%d", name,
|
log_debug(LD_DIR, "Transport %s found at %s:%d", name,
|
||||||
fmt_addr(&addr), (int)port);
|
fmt_addr(&addr), (int)port);
|
||||||
transport_add_from_config(&addr, port, name,
|
transport_add_from_config(&addr, port, name,
|
||||||
socks_ver);
|
socks_ver);
|
||||||
@ -4727,7 +4737,7 @@ parse_transport_line(const char *line, int validate_only)
|
|||||||
tor_free(name);
|
tor_free(name);
|
||||||
tor_free(addrport);
|
tor_free(addrport);
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Read the contents of a DirServer line from <b>line</b>. If
|
/** Read the contents of a DirServer line from <b>line</b>. If
|
||||||
* <b>validate_only</b> is 0, and the line is well-formed, and it
|
* <b>validate_only</b> is 0, and the line is well-formed, and it
|
||||||
|
@ -335,11 +335,11 @@ connection_or_finished_connecting(or_connection_t *or_conn)
|
|||||||
proxy_type = PROXY_SOCKS4;
|
proxy_type = PROXY_SOCKS4;
|
||||||
else if (get_options()->Socks5Proxy)
|
else if (get_options()->Socks5Proxy)
|
||||||
proxy_type = PROXY_SOCKS5;
|
proxy_type = PROXY_SOCKS5;
|
||||||
else if (get_options()->UseBridges) {
|
else if (get_options()->ClientTransportPlugin) {
|
||||||
transport_info_t *transport;
|
transport_info_t *transport;
|
||||||
transport = find_bridge_transport_by_addrport(&conn->addr,conn->port);
|
transport = find_transport_by_bridge_addrport(&conn->addr,conn->port);
|
||||||
if (transport) { /* this bridge supports transports. use proxy. */
|
if (transport) { /* this bridge supports transports. use proxy. */
|
||||||
log_warn(LD_GENERAL, "Setting up pluggable transport plugin proxy type!\n");
|
log_debug(LD_GENERAL, "Found transport. Setting proxy type!\n");
|
||||||
proxy_type = transport->socks_version;
|
proxy_type = transport->socks_version;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -871,10 +871,9 @@ connection_or_connect(const tor_addr_t *_addr, uint16_t port,
|
|||||||
port = options->Socks5ProxyPort;
|
port = options->Socks5ProxyPort;
|
||||||
} else if (options->ClientTransportPlugin) {
|
} else if (options->ClientTransportPlugin) {
|
||||||
transport_info_t *transport;
|
transport_info_t *transport;
|
||||||
transport = find_bridge_transport_by_addrport(&addr, port);
|
transport = find_transport_by_bridge_addrport(&addr, port);
|
||||||
if (transport) {
|
if (transport) {
|
||||||
log_warn(LD_GENERAL, "Our bridge uses a pluggable transport plugin. "
|
log_debug(LD_GENERAL, "Found transport. Setting up proxying!");
|
||||||
"Setting up proxying!");
|
|
||||||
using_proxy = 1;
|
using_proxy = 1;
|
||||||
tor_addr_copy(&addr, &transport->addr);
|
tor_addr_copy(&addr, &transport->addr);
|
||||||
port = transport->port;
|
port = transport->port;
|
||||||
|
@ -2660,7 +2660,8 @@ typedef struct {
|
|||||||
|
|
||||||
config_line_t *Bridges; /**< List of bootstrap bridge addresses. */
|
config_line_t *Bridges; /**< List of bootstrap bridge addresses. */
|
||||||
|
|
||||||
config_line_t *ClientTransportPlugin; /**< List of client transport plugins. */
|
config_line_t *ClientTransportPlugin; /**< List of client
|
||||||
|
transport plugins. */
|
||||||
|
|
||||||
int BridgeRelay; /**< Boolean: are we acting as a bridge relay? We make
|
int BridgeRelay; /**< Boolean: are we acting as a bridge relay? We make
|
||||||
* this explicit so we can change how we behave in the
|
* this explicit so we can change how we behave in the
|
||||||
|
Loading…
Reference in New Issue
Block a user