mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-10 21:23:58 +01:00
New config option ServerDNSAllowBrokenResolvConf to start a relay
even when the local resolv.conf file is missing, broken, or contains only unusable nameservers. Now I can run a local network on my laptop when I'm on an airplane. svn:r13402
This commit is contained in:
parent
bbcf406d9f
commit
c054f90f02
@ -265,6 +265,7 @@ static config_var_t _option_vars[] = {
|
|||||||
V(RunTesting, BOOL, "0"),
|
V(RunTesting, BOOL, "0"),
|
||||||
V(SafeLogging, BOOL, "1"),
|
V(SafeLogging, BOOL, "1"),
|
||||||
V(SafeSocks, BOOL, "0"),
|
V(SafeSocks, BOOL, "0"),
|
||||||
|
V(ServerDNSAllowBrokenResolvConf, BOOL, "0"),
|
||||||
V(ServerDNSAllowNonRFC953Hostnames, BOOL,"0"),
|
V(ServerDNSAllowNonRFC953Hostnames, BOOL,"0"),
|
||||||
V(ServerDNSDetectHijacking, BOOL, "1"),
|
V(ServerDNSDetectHijacking, BOOL, "1"),
|
||||||
V(ServerDNSResolvConfFile, STRING, NULL),
|
V(ServerDNSResolvConfFile, STRING, NULL),
|
||||||
@ -3252,7 +3253,7 @@ options_validate(or_options_t *old_options, or_options_t *options,
|
|||||||
|
|
||||||
if (options->V3AuthVoteDelay + options->V3AuthDistDelay >=
|
if (options->V3AuthVoteDelay + options->V3AuthDistDelay >=
|
||||||
options->V3AuthVotingInterval/2) {
|
options->V3AuthVotingInterval/2) {
|
||||||
REJECT("V3AuthVoteDelay and V3AuthDistDelay must be no more than half "
|
REJECT("V3AuthVoteDelay plus V3AuthDistDelay must be less than half "
|
||||||
"V3AuthVotingInterval");
|
"V3AuthVotingInterval");
|
||||||
}
|
}
|
||||||
if (options->V3AuthVoteDelay < MIN_VOTE_SECONDS)
|
if (options->V3AuthVoteDelay < MIN_VOTE_SECONDS)
|
||||||
|
10
src/or/dns.c
10
src/or/dns.c
@ -1108,7 +1108,7 @@ configure_nameservers(int force)
|
|||||||
if (stat(conf_fname, &st)) {
|
if (stat(conf_fname, &st)) {
|
||||||
log_warn(LD_EXIT, "Unable to stat resolver configuration in '%s': %s",
|
log_warn(LD_EXIT, "Unable to stat resolver configuration in '%s': %s",
|
||||||
conf_fname, strerror(errno));
|
conf_fname, strerror(errno));
|
||||||
return -1;
|
return options->ServerDNSAllowBrokenResolvConf ? 0 : -1;
|
||||||
}
|
}
|
||||||
if (!force && resolv_conf_fname && !strcmp(conf_fname,resolv_conf_fname)
|
if (!force && resolv_conf_fname && !strcmp(conf_fname,resolv_conf_fname)
|
||||||
&& st.st_mtime == resolv_conf_mtime) {
|
&& st.st_mtime == resolv_conf_mtime) {
|
||||||
@ -1123,11 +1123,11 @@ configure_nameservers(int force)
|
|||||||
if ((r = evdns_resolv_conf_parse(DNS_OPTIONS_ALL, conf_fname))) {
|
if ((r = evdns_resolv_conf_parse(DNS_OPTIONS_ALL, conf_fname))) {
|
||||||
log_warn(LD_EXIT, "Unable to parse '%s', or no nameservers in '%s' (%d)",
|
log_warn(LD_EXIT, "Unable to parse '%s', or no nameservers in '%s' (%d)",
|
||||||
conf_fname, conf_fname, r);
|
conf_fname, conf_fname, r);
|
||||||
return -1;
|
return options->ServerDNSAllowBrokenResolvConf ? 0 : -1;
|
||||||
}
|
}
|
||||||
if (evdns_count_nameservers() == 0) {
|
if (evdns_count_nameservers() == 0) {
|
||||||
log_warn(LD_EXIT, "Unable to find any nameservers in '%s'.", conf_fname);
|
log_warn(LD_EXIT, "Unable to find any nameservers in '%s'.", conf_fname);
|
||||||
return -1;
|
return options->ServerDNSAllowBrokenResolvConf ? 0 : -1;
|
||||||
}
|
}
|
||||||
tor_free(resolv_conf_fname);
|
tor_free(resolv_conf_fname);
|
||||||
resolv_conf_fname = tor_strdup(conf_fname);
|
resolv_conf_fname = tor_strdup(conf_fname);
|
||||||
@ -1143,13 +1143,13 @@ configure_nameservers(int force)
|
|||||||
}
|
}
|
||||||
if (evdns_config_windows_nameservers()) {
|
if (evdns_config_windows_nameservers()) {
|
||||||
log_warn(LD_EXIT,"Could not config nameservers.");
|
log_warn(LD_EXIT,"Could not config nameservers.");
|
||||||
return -1;
|
return options->ServerDNSAllowBrokenResolvConf ? 0 : -1;
|
||||||
}
|
}
|
||||||
if (evdns_count_nameservers() == 0) {
|
if (evdns_count_nameservers() == 0) {
|
||||||
log_warn(LD_EXIT, "Unable to find any platform nameservers in "
|
log_warn(LD_EXIT, "Unable to find any platform nameservers in "
|
||||||
"your Windows configuration. Perhaps you should list a "
|
"your Windows configuration. Perhaps you should list a "
|
||||||
"ServerDNSResolvConfFile file in your torrc?");
|
"ServerDNSResolvConfFile file in your torrc?");
|
||||||
return -1;
|
return options->ServerDNSAllowBrokenResolvConf ? 0 : -1;
|
||||||
}
|
}
|
||||||
if (nameservers_configured)
|
if (nameservers_configured)
|
||||||
evdns_resume();
|
evdns_resume();
|
||||||
|
@ -2291,6 +2291,10 @@ typedef struct {
|
|||||||
char *ServerDNSResolvConfFile; /**< If provided, we configure our internal
|
char *ServerDNSResolvConfFile; /**< If provided, we configure our internal
|
||||||
* resolver from the file here rather than from
|
* resolver from the file here rather than from
|
||||||
* /etc/resolv.conf (Unix) or the registry (Windows). */
|
* /etc/resolv.conf (Unix) or the registry (Windows). */
|
||||||
|
/** Boolean: if set, we start even if our resolv.conf file is missing
|
||||||
|
* or broken. */
|
||||||
|
int ServerDNSAllowBrokenResolvConf;
|
||||||
|
|
||||||
smartlist_t *ServerDNSTestAddresses; /**< A list of addresses that definitely
|
smartlist_t *ServerDNSTestAddresses; /**< A list of addresses that definitely
|
||||||
* should be resolveable. Used for
|
* should be resolveable. Used for
|
||||||
* testing our DNS server. */
|
* testing our DNS server. */
|
||||||
|
Loading…
Reference in New Issue
Block a user