aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRoger Dingledine <arma@torproject.org>2004-03-15 04:57:24 +0000
committerRoger Dingledine <arma@torproject.org>2004-03-15 04:57:24 +0000
commit0b9c140102bcafccdd1d1ae080bf396817eb6777 (patch)
treeb83b9f42c01e231008f50df88ab11c0cab83f887 /src
parent39835dd9f69c3244f7d2e371196752939f19c638 (diff)
downloadtor-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.c24
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;
}