Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions changes/bug32753
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
o Minor bugfixes (bridges):
- Lowercase the value of BridgeDistribution from torrc before adding it to
the descriptor. Fixes bug 32753; bugfix on 0.3.2.3-alpha.
2 changes: 1 addition & 1 deletion src/app/config/config.c
Original file line number Diff line number Diff line change
Expand Up @@ -6801,7 +6801,7 @@ check_bridge_distribution_setting(const char *bd)
};
unsigned i;
for (i = 0; i < ARRAY_LENGTH(RECOGNIZED); ++i) {
if (!strcmp(bd, RECOGNIZED[i]))
if (!strcasecmp(bd, RECOGNIZED[i]))
return 0;
}

Expand Down
15 changes: 10 additions & 5 deletions src/feature/relay/router.c
Original file line number Diff line number Diff line change
Expand Up @@ -2911,15 +2911,20 @@ router_dump_router_to_string(routerinfo_t *router,
}

if (options->BridgeRelay) {
const char *bd;
char *bd = NULL;

if (options->BridgeDistribution && strlen(options->BridgeDistribution)) {
bd = options->BridgeDistribution;
bd = tor_strdup(options->BridgeDistribution);
} else {
bd = "any";
bd = tor_strdup("any");
}
if (strchr(bd, '\n') || strchr(bd, '\r'))
bd = escaped(bd);

// Make sure our value is lowercased in the descriptor instead of just
// forwarding what the user wrote in their torrc directly.
tor_strlower(bd);

smartlist_add_asprintf(chunks, "bridge-distribution-request %s\n", bd);
tor_free(bd);
}

if (router->onion_curve25519_pkey) {
Expand Down
22 changes: 19 additions & 3 deletions src/test/test_config.c
Original file line number Diff line number Diff line change
Expand Up @@ -5663,11 +5663,27 @@ test_config_check_bridge_distribution_setting_not_a_bridge(void *arg)
static void
test_config_check_bridge_distribution_setting_valid(void *arg)
{
int ret = check_bridge_distribution_setting("https");

(void)arg;

tt_int_op(ret, OP_EQ, 0);
// Check all the possible values we support right now.
tt_int_op(check_bridge_distribution_setting("none"), OP_EQ, 0);
tt_int_op(check_bridge_distribution_setting("any"), OP_EQ, 0);
tt_int_op(check_bridge_distribution_setting("https"), OP_EQ, 0);
tt_int_op(check_bridge_distribution_setting("email"), OP_EQ, 0);
tt_int_op(check_bridge_distribution_setting("moat"), OP_EQ, 0);

// Check all the possible values we support right now with weird casing.
tt_int_op(check_bridge_distribution_setting("NoNe"), OP_EQ, 0);
tt_int_op(check_bridge_distribution_setting("anY"), OP_EQ, 0);
tt_int_op(check_bridge_distribution_setting("hTTps"), OP_EQ, 0);
tt_int_op(check_bridge_distribution_setting("emAIl"), OP_EQ, 0);
tt_int_op(check_bridge_distribution_setting("moAt"), OP_EQ, 0);

// Invalid values.
tt_int_op(check_bridge_distribution_setting("x\rx"), OP_EQ, -1);
tt_int_op(check_bridge_distribution_setting("x\nx"), OP_EQ, -1);
tt_int_op(check_bridge_distribution_setting("\t\t\t"), OP_EQ, -1);

done:
return;
}
Expand Down