Browse Source

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

Roger Dingledine 21 years ago
parent
commit
0b9c140102
1 changed files with 14 additions and 10 deletions
  1. 14 10
      src/or/config.c

+ 14 - 10
src/or/config.c

@@ -349,10 +349,10 @@ static int resolve_my_address(or_options_t *options) {
   struct in_addr in;
   struct in_addr in;
   struct hostent *rent;
   struct hostent *rent;
   char localhostname[256];
   char localhostname[256];
-  int guessed=0;
+  int explicit_ip=1;
 
 
   if(!options->Address) { /* then we need to guess our address */
   if(!options->Address) { /* then we need to guess our address */
-    guessed = 1;
+    explicit_ip = 0; /* it's implicit */
 
 
     if(gethostname(localhostname,sizeof(localhostname)) < 0) {
     if(gethostname(localhostname,sizeof(localhostname)) < 0) {
       log_fn(LOG_WARN,"Error obtaining local hostname");
       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 */
   /* 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'. "
     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));
            options->Address, inet_ntoa(in));
     return -1;
     return -1;
   }
   }