r8874@Kushana: nickm | 2006-09-21 15:22:27 -0400

Rename and document SearchDomains and ResolvConf options; warn if ServerDNSResolvConfFile is given but eventdns isnt enabled.


svn:r8439
This commit is contained in:
Nick Mathewson 2006-09-21 21:48:16 +00:00
parent 083e9c2b59
commit 04bec67574
6 changed files with 49 additions and 21 deletions

View File

@ -22,6 +22,10 @@ Changes in version 0.1.2.2-alpha - 2006-??-??
- Fix a debug log message in eventdns to say "X resolved to Y"
instead of "X resolved to X".
o Documentation
- Documented (and renamed) ServerDNSSearchDomains and
ServerDNSResolvConfFile options.
Changes in version 0.1.2.1-alpha - 2006-08-27
o Major features:
- Add "eventdns" async dns library from Adam Langley, tweaked to

View File

@ -92,7 +92,7 @@ N - DNS improvements
d - Autodetect whether DNS is broken in this way.
- Don't ask reject *:* nodes for DNS unless client wants you to.
. Asynchronous DNS
- Document SearchDomains, ResolvConf options
o Document and rename SearchDomains, ResolvConf options
D Make API closer to getaddrinfo()
- Teach it to be able to listen for A and PTR requests to be processed.
Interface should be set_request_listener(sock, cb); [ cb(request) ]

View File

@ -630,6 +630,23 @@ as day 1 and Sunday as day 7. If \fBday\fR is given, each accounting
period runs from the time \fIHH:MM\fR each day to the same time on the
next day. All times are local, and given in 24-hour time. (Defaults to
"month 1 0:00".)
.LP
.TP
\fBServerDNSResolvConfFile \fR\fIfilename\fP
Overrides the default DNS configuration with the configuration in
\fIfilename\fP. The file format is the same as the standard Unix
"\fBresolv.conf\fP" file (7). This option only effects name lookup for
addresses requested by clients; and only takes effect if Tor was built with
eventdns support. (Defaults to use the system DNS configuration.)
.LP
.TP
\fBServerDNSSearchDomains \fR\fB0\fR|\fB1\fR\fP
If set to \fB1\fP, then we will search for addresses in the local search
domain. For example, if this system is configured to believe it is in
"example.com", and a client tries to connect to "www", the client will be
connected to "www.example.com".
This option only effects name lookup for addresses requested by clients.
(Defaults to "0".)
.SH DIRECTORY SERVER OPTIONS
.PP

View File

@ -58,7 +58,6 @@ static config_abbrev_t _option_abbrevs[] = {
PLURAL(LongLivedPort),
PLURAL(HiddenServiceNode),
PLURAL(HiddenServiceExcludeNode),
PLURAL(Nameserver),
PLURAL(NumCpu),
PLURAL(RendNode),
PLURAL(RendExcludeNode),
@ -77,6 +76,8 @@ static config_abbrev_t _option_abbrevs[] = {
{ "NumHelperNodes", "NumEntryGuards", 0, 0},
{ "UseEntryNodes", "UseEntryGuards", 0, 0},
{ "NumEntryNodes", "NumEntryGuards", 0, 0},
{ "ResolvConf", "ServerDNSResolvConfFile", 0, 1},
{ "SearchDomains", "ServerDNSSearchDomains", 0, 1},
{ NULL, NULL, 0, 0},
};
/* A list of state-file abbreviations, for compatibility. */
@ -216,13 +217,13 @@ static config_var_t _option_vars[] = {
VAR("RendNodes", STRING, RendNodes, NULL),
VAR("RendPostPeriod", INTERVAL, RendPostPeriod, "1 hour"),
VAR("RephistTrackTime", INTERVAL, RephistTrackTime, "24 hours"),
VAR("ResolvConf", STRING, ResolvConf, NULL),
OBSOLETE("RouterFile"),
VAR("RunAsDaemon", BOOL, RunAsDaemon, "0"),
VAR("RunTesting", BOOL, RunTesting, "0"),
VAR("SafeLogging", BOOL, SafeLogging, "1"),
VAR("SafeSocks", BOOL, SafeSocks, "0"),
VAR("SearchDomains", BOOL, SearchDomains, "0"),
VAR("ServerDNSResolvConfFile", STRING, ServerDNSResolvConfFile, NULL),
VAR("ServerDNSSearchDomains", BOOL, ServerDNSSearchDomains, "0"),
VAR("ShutdownWaitLength", INTERVAL, ShutdownWaitLength, "30 seconds"),
VAR("SocksListenAddress", LINELIST, SocksListenAddress, NULL),
VAR("SocksPolicy", LINELIST, SocksPolicy, NULL),
@ -2443,6 +2444,12 @@ options_validate(or_options_t *old_options, or_options_t *options,
if (options->UseEntryGuards && ! options->NumEntryGuards)
REJECT("Cannot enable UseEntryGuards with NumEntryGuards set to 0");
#ifndef USE_EVENTDNS
if (options->ServerDNSResolvConfFile)
log(LOG_WARN, LD_CONFIG,
"ServerDNSResolvConfFile only works when eventdns support is enabled.");
#endif
if (check_nickname_list(options->ExitNodes, "ExitNodes", msg))
return -1;
if (check_nickname_list(options->EntryNodes, "EntryNodes", msg))
@ -2566,7 +2573,8 @@ options_transition_affects_workers(or_options_t *old_options,
if (!opt_streq(old_options->DataDirectory, new_options->DataDirectory) ||
old_options->NumCpus != new_options->NumCpus ||
old_options->ORPort != new_options->ORPort ||
old_options->SearchDomains != new_options->SearchDomains ||
old_options->ServerDNSSearchDomains !=
new_options->ServerDNSSearchDomains ||
old_options->SafeLogging != new_options->SafeLogging ||
!config_lines_eq(old_options->Logs, new_options->Logs))
return 1;

View File

@ -796,10 +796,9 @@ dns_cancel_pending_resolve(const char *address)
}
/** Helper: adds an entry to the DNS cache mapping <b>address</b> to the ipv4
* address <b>addr</b>. <b>ttl</b> is a cache ttl; <b>outcome</b> is one of
* address <b>addr</b> (if is_reverse is 0) or the hostname <b>hostname</b> if
* (is_reverse is 1). <b>ttl</b> is a cache ttl; <b>outcome</b> is one of
* DNS_RESOLVE_{FAILED_TRANSIENT|FAILED_PERMANENT|SUCCEEDED}.
*
* DOCDOC args
**/
static void
add_answer_to_cache(const char *address, int is_reverse, uint32_t addr,
@ -1136,7 +1135,7 @@ dnsworker_main(void *data)
int *fdarray = data;
int fd;
int result;
int search = get_options()->SearchDomains;
int search = get_options()->ServerDNSSearchDomains;
/* log_fn(LOG_NOTICE,"After spawn: fdarray @%d has %d:%d", (int)fdarray,
* fdarray[0],fdarray[1]); */
@ -1375,9 +1374,9 @@ connection_dns_reached_eof(connection_t *conn)
/** Configure eventdns nameservers if force is true, or if the configuration
* has changed since the last time we called this function. On Unix, this
* reads from options->ResolvConf or /etc/resolv.conf; on Windows, this reads
* from options->ResolvConf or the registry. Return 0 on success or -1 on
* failure. */
* reads from options->ServerDNSResolvConfFile or /etc/resolv.conf; on
* Windows, this reads from options->ServerDNSResolvConfFile or the registry.
* Return 0 on success or -1 on failure. */
static int
configure_nameservers(int force)
{
@ -1385,7 +1384,7 @@ configure_nameservers(int force)
const char *conf_fname;
struct stat st;
options = get_options();
conf_fname = options->ResolvConf;
conf_fname = options->ServerDNSResolvConfFile;
#ifndef MS_WINDOWS
if (!conf_fname)
conf_fname = "/etc/resolv.conf";
@ -1433,7 +1432,7 @@ configure_nameservers(int force)
if (eventdns_count_nameservers() == 0) {
log_warn(LD_EXIT, "Unable to find any platform nameservers in "
"your Windows configuration. Perhaps you should list a "
"ResolvConf file in your torrc?");
"ServerDNSResolvConfFile file in your torrc?");
return -1;
}
if (nameservers_configured)
@ -1507,7 +1506,7 @@ launch_resolve(edge_connection_t *exitconn)
char *addr = tor_strdup(exitconn->_base.address);
struct in_addr in;
int r;
int options = get_options()->SearchDomains ? 0 : DNS_QUERY_NO_SEARCH;
int options = get_options()->ServerDNSSearchDomains ? 0 : DNS_QUERY_NO_SEARCH;
/* What? Nameservers not configured? Sounds like a bug. */
if (!nameservers_configured) {
log_warn(LD_EXIT, "Harmless bug: nameservers not configured, but resolve "

View File

@ -1571,12 +1571,12 @@ typedef struct {
char *VirtualAddrNetwork; /**< Address and mask to hand out for virtual
* MAPADDRESS requests. */
int SearchDomains; /**< Boolean: If set, we don't force exit addresses to
* be FQDNs, but rather search for them in the local
* domains. */
char *ResolvConf; /**< If provided, we configure our internal resolver from
* the file here rather than from /etc/resolv.conf (unix)
* or the registry (windows) */
int ServerDNSSearchDomains; /**< Boolean: If set, we don't force exit
* addresses to be FQDNs, but rather search for them in
* the local domains. */
char *ServerDNSResolvConfFile; /**< If provided, we configure our internal
* resolver from the file here rather than from
* /etc/resolv.conf (unix) or the registry (windows) */
} or_options_t;
/** Persistent state for an onion router, as saved to disk. */