mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-24 12:23:32 +01:00
Store options->Address as IP, not hostname
And figure it out while reading config, not every time you rebuild the descriptor svn:r1226
This commit is contained in:
parent
b7633e2e67
commit
89d9d80e76
@ -524,6 +524,42 @@ int getconfig(int argc, char **argv, or_options_t *options) {
|
||||
result = -1;
|
||||
}
|
||||
|
||||
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(options->SocksPort < 0) {
|
||||
log(LOG_WARN,"SocksPort option can't be negative.");
|
||||
result = -1;
|
||||
|
@ -321,23 +321,9 @@ const char *router_get_my_descriptor(void) {
|
||||
|
||||
int router_rebuild_descriptor(void) {
|
||||
routerinfo_t *ri;
|
||||
char localhostname[256];
|
||||
char *address = options.Address;
|
||||
|
||||
if(!address) { /* if not specified in config, we find a default */
|
||||
if(gethostname(localhostname,sizeof(localhostname)) < 0) {
|
||||
log_fn(LOG_WARN,"Error obtaining local hostname");
|
||||
return -1;
|
||||
}
|
||||
address = localhostname;
|
||||
if(!strchr(address,'.')) {
|
||||
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;
|
||||
}
|
||||
}
|
||||
ri = tor_malloc(sizeof(routerinfo_t));
|
||||
ri->address = tor_strdup(address);
|
||||
ri = tor_malloc_zero(sizeof(routerinfo_t));
|
||||
ri->address = tor_strdup(options.Address);
|
||||
ri->nickname = tor_strdup(options.Nickname);
|
||||
/* No need to set addr. */
|
||||
ri->or_port = options.ORPort;
|
||||
|
@ -377,7 +377,8 @@ router_resolve(routerinfo_t *router)
|
||||
|
||||
rent = (struct hostent *)gethostbyname(router->address);
|
||||
if (!rent) {
|
||||
log_fn(LOG_WARN,"Could not get address for router %s.",router->address);
|
||||
log_fn(LOG_WARN,"Could not get address for router %s (%s).",
|
||||
router->address, router->nickname);
|
||||
return -1;
|
||||
}
|
||||
assert(rent->h_length == 4);
|
||||
|
Loading…
Reference in New Issue
Block a user