mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-10 13:13:44 +01:00
Merge remote-tracking branch 'public/bug5018'
Conflicts: src/or/entrynodes.c
This commit is contained in:
commit
4b6f074df9
3
changes/bug5018
Normal file
3
changes/bug5018
Normal file
@ -0,0 +1,3 @@
|
||||
o Minor features:
|
||||
- Don't launch pluggable transport proxies that contribute
|
||||
transports we don't need. Resolves ticket 5018.
|
@ -4568,7 +4568,8 @@ parse_bridge_line(const char *line)
|
||||
* <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:
|
||||
* If <b>validate_only</b> is 0, the line is well-formed, and the
|
||||
* transport is needed by some bridge:
|
||||
* - If it's an external proxy line, add the transport described in the line to
|
||||
* our internal transport list.
|
||||
* - If it's a managed proxy line, launch the managed proxy. */
|
||||
@ -4590,7 +4591,8 @@ parse_client_transport_line(const char *line, int validate_only)
|
||||
int is_managed=0;
|
||||
char **proxy_argv=NULL;
|
||||
char **tmp=NULL;
|
||||
int proxy_argc,i;
|
||||
int proxy_argc, i;
|
||||
int is_useless_proxy=1;
|
||||
|
||||
int line_length;
|
||||
|
||||
@ -4612,11 +4614,16 @@ parse_client_transport_line(const char *line, int validate_only)
|
||||
smartlist_split_string(transport_list, transports, ",",
|
||||
SPLIT_SKIP_SPACE|SPLIT_IGNORE_BLANK, 0);
|
||||
SMARTLIST_FOREACH_BEGIN(transport_list, const char *, transport_name) {
|
||||
/* validate transport names */
|
||||
if (!string_is_C_identifier(transport_name)) {
|
||||
log_warn(LD_CONFIG, "Transport name is not a C identifier (%s).",
|
||||
transport_name);
|
||||
goto err;
|
||||
}
|
||||
|
||||
/* see if we actually need the transports provided by this proxy */
|
||||
if (!validate_only && transport_is_needed(transport_name))
|
||||
is_useless_proxy = 0;
|
||||
} SMARTLIST_FOREACH_END(transport_name);
|
||||
|
||||
/* field2 is either a SOCKS version or "exec" */
|
||||
@ -4635,9 +4642,15 @@ parse_client_transport_line(const char *line, int validate_only)
|
||||
}
|
||||
|
||||
if (is_managed) { /* managed */
|
||||
if (!validate_only) { /* if we are not just validating, use the
|
||||
rest of the line as the argv of the proxy
|
||||
to be launched */
|
||||
if (!validate_only && is_useless_proxy) {
|
||||
log_warn(LD_GENERAL, "Pluggable transport proxy (%s) does not provide "
|
||||
"any needed transports and will not be launched.", line);
|
||||
}
|
||||
|
||||
/* If we are not just validating, use the rest of the line as the
|
||||
argv of the proxy to be launched. Also, make sure that we are
|
||||
only launching proxies that contribute useful transports. */
|
||||
if (!validate_only && !is_useless_proxy) {
|
||||
proxy_argc = line_length-2;
|
||||
tor_assert(proxy_argc > 0);
|
||||
proxy_argv = tor_malloc_zero(sizeof(char*)*(proxy_argc+1));
|
||||
|
@ -1801,6 +1801,23 @@ bridge_resolve_conflicts(const tor_addr_t *addr, uint16_t port,
|
||||
} SMARTLIST_FOREACH_END(bridge);
|
||||
}
|
||||
|
||||
/** Return True if we have a bridge that uses a transport with name
|
||||
* <b>transport_name</b>. */
|
||||
int
|
||||
transport_is_needed(const char *transport_name)
|
||||
{
|
||||
if (!bridge_list)
|
||||
return 0;
|
||||
|
||||
SMARTLIST_FOREACH_BEGIN(bridge_list, const bridge_info_t *, bridge) {
|
||||
if (bridge->transport_name &&
|
||||
!strcmp(bridge->transport_name, transport_name))
|
||||
return 1;
|
||||
} SMARTLIST_FOREACH_END(bridge);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/** Register the bridge information in <b>bridge_line</b> to the
|
||||
* bridge subsystem. Steals reference of <b>bridge_line</b>. */
|
||||
void
|
||||
|
@ -123,6 +123,7 @@ struct transport_t;
|
||||
int get_transport_by_bridge_addrport(const tor_addr_t *addr, uint16_t port,
|
||||
const struct transport_t **transport);
|
||||
|
||||
int transport_is_needed(const char *transport_name);
|
||||
int validate_pluggable_transports_config(void);
|
||||
|
||||
double pathbias_get_close_success_count(entry_guard_t *guard);
|
||||
|
Loading…
Reference in New Issue
Block a user