diff options
author | Roger Dingledine <arma@torproject.org> | 2004-03-15 04:57:24 +0000 |
---|---|---|
committer | Roger Dingledine <arma@torproject.org> | 2004-03-15 04:57:24 +0000 |
commit | 0b9c140102bcafccdd1d1ae080bf396817eb6777 (patch) | |
tree | b83b9f42c01e231008f50df88ab11c0cab83f887 /src | |
parent | 39835dd9f69c3244f7d2e371196752939f19c638 (diff) | |
download | tor-0b9c140102bcafccdd1d1ae080bf396817eb6777.tar tor-0b9c140102bcafccdd1d1ae080bf396817eb6777.tar.gz |
make it warn about internal IPs not only if we had to guess,
but also if they used a hostname rather than an IP
svn:r1285
Diffstat (limited to 'src')
-rw-r--r-- | src/or/config.c | 24 |
1 files changed, 14 insertions, 10 deletions
diff --git a/src/or/config.c b/src/or/config.c index 69aea254c..7434dfd2f 100644 --- a/src/or/config.c +++ b/src/or/config.c @@ -349,10 +349,10 @@ static int resolve_my_address(or_options_t *options) { struct in_addr in; struct hostent *rent; char localhostname[256]; - int guessed=0; + int explicit_ip=1; if(!options->Address) { /* then we need to guess our address */ - guessed = 1; + explicit_ip = 0; /* it's implicit */ if(gethostname(localhostname,sizeof(localhostname)) < 0) { log_fn(LOG_WARN,"Error obtaining local hostname"); @@ -371,16 +371,20 @@ static int resolve_my_address(or_options_t *options) { /* now we know options->Address is set. resolve it and keep only the IP */ - rent = (struct hostent *)gethostbyname(options->Address); - if (!rent) { - log_fn(LOG_WARN,"Could not resolve Address %s. Failing.", options->Address); - return -1; + if(tor_inet_aton(options->Address, &in) == 0) { + /* then we have to resolve it */ + explicit_ip = 0; + rent = (struct hostent *)gethostbyname(options->Address); + if (!rent) { + log_fn(LOG_WARN,"Could not resolve Address %s. Failing.", options->Address); + return -1; + } + assert(rent->h_length == 4); + memcpy(&in.s_addr, rent->h_addr,rent->h_length); } - assert(rent->h_length == 4); - memcpy(&in.s_addr, rent->h_addr,rent->h_length); - if(guessed==1 && is_internal_IP(htonl(in.s_addr))) { + if(!explicit_ip && is_internal_IP(htonl(in.s_addr))) { log_fn(LOG_WARN,"Address '%s' resolves to private IP '%s'. " - "Please set the Address config option to be your public IP.", + "Please set the Address config option to be the IP you want to use.", options->Address, inet_ntoa(in)); return -1; } |