[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

[or-cvs] make it warn about internal IPs not only if we had to guess,



Update of /home/or/cvsroot/src/or
In directory moria.mit.edu:/home2/arma/work/onion/cvs/src/or

Modified Files:
	config.c 
Log Message:
make it warn about internal IPs not only if we had to guess,
but also if they used a hostname rather than an IP


Index: config.c
===================================================================
RCS file: /home/or/cvsroot/src/or/config.c,v
retrieving revision 1.97
retrieving revision 1.98
diff -u -d -r1.97 -r1.98
--- config.c	15 Mar 2004 04:04:16 -0000	1.97
+++ config.c	15 Mar 2004 04:57:24 -0000	1.98
@@ -349,10 +349,10 @@
   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 @@
 
   /* 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;
   }