mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-10 21:23:58 +01:00
Widen the conditions under which we whine about not having a geoip file to include "a country code was configured in a node list."
svn:r16968
This commit is contained in:
parent
e06f140f97
commit
02c71a7eb4
@ -1163,6 +1163,30 @@ options_act_reversible(or_options_t *old_options, char **msg)
|
||||
return r;
|
||||
}
|
||||
|
||||
/** DOCDOC */
|
||||
int
|
||||
options_need_geoip_info(or_options_t *options, const char **reason_out)
|
||||
{
|
||||
int bridge_usage =
|
||||
options->BridgeRelay && options->BridgeRecordUsageByCountry;
|
||||
int routerset_usage =
|
||||
routerset_needs_geoip(options->EntryNodes) ||
|
||||
routerset_needs_geoip(options->ExitNodes) ||
|
||||
routerset_needs_geoip(options->ExcludeExitNodes) ||
|
||||
routerset_needs_geoip(options->ExcludeNodes);
|
||||
|
||||
if (routerset_usage && reason_out) {
|
||||
*reason_out = "We've been configured to use (or avoid) nodes in certain "
|
||||
"contries, and we need GEOIP information to figure out which ones they "
|
||||
"are.";
|
||||
} else if (bridge_usage && reason_out) {
|
||||
*reason_out = "We've been configured to see which countries can access "
|
||||
"us as a bridge, and we need GEOIP information to tell which countries "
|
||||
"clients are in.";
|
||||
}
|
||||
return bridge_usage || routerset_usage;
|
||||
}
|
||||
|
||||
/** Fetch the active option list, and take actions based on it. All of the
|
||||
* things we do should survive being done repeatedly. If present,
|
||||
* <b>old_options</b> contains the previous value of the options.
|
||||
|
@ -178,10 +178,12 @@ int
|
||||
geoip_load_file(const char *filename, or_options_t *options)
|
||||
{
|
||||
FILE *f;
|
||||
int severity = should_record_bridge_info(options) ? LOG_WARN : LOG_INFO;
|
||||
const char *msg = "";
|
||||
int severity = options_need_geoip_info(options, &msg) ? LOG_WARN : LOG_INFO;
|
||||
clear_geoip_db();
|
||||
if (!(f = fopen(filename, "r"))) {
|
||||
log_fn(severity, LD_GENERAL, "Failed to open GEOIP file %s.", filename);
|
||||
log_fn(severity, LD_GENERAL, "Failed to open GEOIP file %s. %s",
|
||||
filename, msg);
|
||||
return -1;
|
||||
}
|
||||
if (!geoip_countries) {
|
||||
@ -193,7 +195,7 @@ geoip_load_file(const char *filename, or_options_t *options)
|
||||
smartlist_free(geoip_entries);
|
||||
}
|
||||
geoip_entries = smartlist_create();
|
||||
log_info(LD_GENERAL, "Parsing GEOIP file.");
|
||||
log_notice(LD_GENERAL, "Parsing GEOIP file.");
|
||||
while (!feof(f)) {
|
||||
char buf[512];
|
||||
if (fgets(buf, (int)sizeof(buf), f) == NULL)
|
||||
|
@ -2837,6 +2837,7 @@ char *options_get_datadir_fname2_suffix(or_options_t *options,
|
||||
or_state_t *get_or_state(void);
|
||||
int or_state_save(time_t now);
|
||||
|
||||
int options_need_geoip_info(or_options_t *options, const char **reason_out);
|
||||
int getinfo_helper_config(control_connection_t *conn,
|
||||
const char *question, char **answer);
|
||||
|
||||
@ -4294,6 +4295,7 @@ int routerset_parse(routerset_t *target, const char *s,
|
||||
const char *description);
|
||||
void routerset_union(routerset_t *target, const routerset_t *source);
|
||||
int routerset_is_list(const routerset_t *set);
|
||||
int routerset_needs_geoip(const routerset_t *set);
|
||||
int routerset_contains_router(const routerset_t *set, routerinfo_t *ri);
|
||||
int routerset_contains_routerstatus(const routerset_t *set,
|
||||
routerstatus_t *rs);
|
||||
|
@ -4881,6 +4881,13 @@ routerset_is_list(const routerset_t *set)
|
||||
smartlist_len(set->policies) == 0;
|
||||
}
|
||||
|
||||
/** DOCDOC */
|
||||
int
|
||||
routerset_needs_geoip(const routerset_t *set)
|
||||
{
|
||||
return set && smartlist_len(set->country_names);
|
||||
}
|
||||
|
||||
/** DOCDOC */
|
||||
static int
|
||||
routerset_is_empty(const routerset_t *set)
|
||||
|
Loading…
Reference in New Issue
Block a user