diff --git a/src/or/config.c b/src/or/config.c index 8c42480eee..4212cdff75 100644 --- a/src/or/config.c +++ b/src/or/config.c @@ -192,6 +192,7 @@ static void config_assign(or_options_t *options, struct config_line *list) { config_compare(list, "DataDirectory", CONFIG_TYPE_STRING, &options->DataDirectory) || config_compare(list, "RouterFile", CONFIG_TYPE_STRING, &options->RouterFile) || config_compare(list, "Nickname", CONFIG_TYPE_STRING, &options->Nickname) || + config_compare(list, "Address", CONFIG_TYPE_STRING, &options->Address) || /* int options */ config_compare(list, "MaxConn", CONFIG_TYPE_INT, &options->MaxConn) || @@ -277,7 +278,7 @@ int getconfig(int argc, char **argv, or_options_t *options) { /* Validate options */ if(options->LogLevel) { - else if(!strcmp(options->LogLevel,"err")) + if(!strcmp(options->LogLevel,"err")) options->loglevel = LOG_ERR; else if(!strcmp(options->LogLevel,"warning")) options->loglevel = LOG_WARNING; diff --git a/src/or/main.c b/src/or/main.c index 662358c8ef..3ce121c9e6 100644 --- a/src/or/main.c +++ b/src/or/main.c @@ -938,15 +938,19 @@ const char *router_get_my_descriptor(void) { static int init_descriptor(void) { routerinfo_t *ri; char localhostname[256]; + char *address = options.Address; - if(gethostname(localhostname,sizeof(localhostname)) < 0) { - log_fn(LOG_WARNING,"Error obtaining local hostname"); - return -1; + if(!address) { /* if not specified in config, we find a default */ + if(gethostname(localhostname,sizeof(localhostname)) < 0) { + log_fn(LOG_WARNING,"Error obtaining local hostname"); + return -1; + } + address = localhostname; } ri = tor_malloc(sizeof(routerinfo_t)); - ri->address = strdup(localhostname); + ri->address = strdup(address); ri->nickname = strdup(options.Nickname); - /* No need to set addr. ???? */ + /* No need to set addr. */ ri->or_port = options.ORPort; ri->ap_port = options.APPort; ri->dir_port = options.DirPort; diff --git a/src/or/or.h b/src/or/or.h index 474ffa2308..965c6ebacb 100644 --- a/src/or/or.h +++ b/src/or/or.h @@ -408,6 +408,7 @@ typedef struct { char *DataDirectory; char *RouterFile; char *Nickname; + char *Address; double CoinWeight; int Daemon; int ORPort;