Loading src/or/config.c +45 −33 Original line number Diff line number Diff line Loading @@ -345,6 +345,49 @@ static void print_usage(void) { ); } int resolve_my_address(or_options_t *options) { struct in_addr in; struct hostent *rent; char localhostname[256]; if(!options->Address) { /* then we need to guess our address */ if(gethostname(localhostname,sizeof(localhostname)) < 0) { log_fn(LOG_WARN,"Error obtaining local hostname"); return -1; } #if 0 /* don't worry about complaining, as long as it resolves */ if(!strchr(localhostname,'.')) { log_fn(LOG_WARN,"fqdn '%s' has only one element. Misconfigured machine?",address); log_fn(LOG_WARN,"Try setting the Address line in your config file."); return -1; } #endif options->Address = tor_strdup(localhostname); log_fn(LOG_DEBUG,"Guessed local host name as '%s'",options->Address); } /* 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; } assert(rent->h_length == 4); memcpy(&in.s_addr, rent->h_addr,rent->h_length); if(is_internal_IP(in.s_addr)) { log_fn(LOG_WARN,"Address '%s' resolves to '%s'. " "Please set the Address config option to be your public IP.", options->Address, inet_ntoa(in)); return -1; } tor_free(options->Address); options->Address = tor_strdup(inet_ntoa(in)); log_fn(LOG_DEBUG,"Resolved Address to %s.", options->Address); return 0; } static void free_options(or_options_t *options) { tor_free(options->LogLevel); tor_free(options->LogFile); Loading Loading @@ -525,39 +568,8 @@ int getconfig(int argc, char **argv, or_options_t *options) { } if(options->ORPort) { /* get an IP for ourselves */ struct in_addr in; struct hostent *rent; char localhostname[256]; if(!options->Address) { /* then we need to guess our address */ if(gethostname(localhostname,sizeof(localhostname)) < 0) { log_fn(LOG_WARN,"Error obtaining local hostname"); return -1; } #if 0 /* don't worry about complaining, as long as it resolves */ if(!strchr(localhostname,'.')) { log_fn(LOG_WARN,"fqdn '%s' has only one element. Misconfigured machine?",address); log_fn(LOG_WARN,"Try setting the Address line in your config file."); return -1; } #endif options->Address = tor_strdup(localhostname); log_fn(LOG_DEBUG,"Guessed local host name as '%s'",options->Address); } /* 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; } assert(rent->h_length == 4); memcpy(&in.s_addr, rent->h_addr,rent->h_length); tor_free(options->Address); options->Address = tor_strdup(inet_ntoa(in)); log_fn(LOG_DEBUG,"Resolved Address to %s.", options->Address); if(resolve_my_address(options) < 0) result = -1; } if(options->SocksPort < 0) { Loading Loading
src/or/config.c +45 −33 Original line number Diff line number Diff line Loading @@ -345,6 +345,49 @@ static void print_usage(void) { ); } int resolve_my_address(or_options_t *options) { struct in_addr in; struct hostent *rent; char localhostname[256]; if(!options->Address) { /* then we need to guess our address */ if(gethostname(localhostname,sizeof(localhostname)) < 0) { log_fn(LOG_WARN,"Error obtaining local hostname"); return -1; } #if 0 /* don't worry about complaining, as long as it resolves */ if(!strchr(localhostname,'.')) { log_fn(LOG_WARN,"fqdn '%s' has only one element. Misconfigured machine?",address); log_fn(LOG_WARN,"Try setting the Address line in your config file."); return -1; } #endif options->Address = tor_strdup(localhostname); log_fn(LOG_DEBUG,"Guessed local host name as '%s'",options->Address); } /* 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; } assert(rent->h_length == 4); memcpy(&in.s_addr, rent->h_addr,rent->h_length); if(is_internal_IP(in.s_addr)) { log_fn(LOG_WARN,"Address '%s' resolves to '%s'. " "Please set the Address config option to be your public IP.", options->Address, inet_ntoa(in)); return -1; } tor_free(options->Address); options->Address = tor_strdup(inet_ntoa(in)); log_fn(LOG_DEBUG,"Resolved Address to %s.", options->Address); return 0; } static void free_options(or_options_t *options) { tor_free(options->LogLevel); tor_free(options->LogFile); Loading Loading @@ -525,39 +568,8 @@ int getconfig(int argc, char **argv, or_options_t *options) { } if(options->ORPort) { /* get an IP for ourselves */ struct in_addr in; struct hostent *rent; char localhostname[256]; if(!options->Address) { /* then we need to guess our address */ if(gethostname(localhostname,sizeof(localhostname)) < 0) { log_fn(LOG_WARN,"Error obtaining local hostname"); return -1; } #if 0 /* don't worry about complaining, as long as it resolves */ if(!strchr(localhostname,'.')) { log_fn(LOG_WARN,"fqdn '%s' has only one element. Misconfigured machine?",address); log_fn(LOG_WARN,"Try setting the Address line in your config file."); return -1; } #endif options->Address = tor_strdup(localhostname); log_fn(LOG_DEBUG,"Guessed local host name as '%s'",options->Address); } /* 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; } assert(rent->h_length == 4); memcpy(&in.s_addr, rent->h_addr,rent->h_length); tor_free(options->Address); options->Address = tor_strdup(inet_ntoa(in)); log_fn(LOG_DEBUG,"Resolved Address to %s.", options->Address); if(resolve_my_address(options) < 0) result = -1; } if(options->SocksPort < 0) { Loading