Make preferred/excluded intro points configurable

svn:r1440
This commit is contained in:
Nick Mathewson
2004-04-02 22:06:46 +00:00
parent 0a5e30f86a
commit 608a5a0802
2 changed files with 27 additions and 9 deletions
+4 -2
View File
@@ -215,8 +215,10 @@ static int config_assign(or_options_t *options, struct config_line_t *list) {
config_compare(list, "User", CONFIG_TYPE_STRING, &options->User) ||
config_compare(list, "RunTesting", CONFIG_TYPE_BOOL, &options->RunTesting) ||
config_compare(list, "HiddenServiceDir", CONFIG_TYPE_LINELIST, &options->RendConfigLines) ||
config_compare(list, "HiddenServicePort", CONFIG_TYPE_LINELIST, &options->RendConfigLines)
config_compare(list, "HiddenServiceDir", CONFIG_TYPE_LINELIST, &options->RendConfigLines)||
config_compare(list, "HiddenServicePort", CONFIG_TYPE_LINELIST, &options->RendConfigLines)||
config_compare(list, "HiddenServiceNodes", CONFIG_TYPE_LINELIST, &options->RendConfigLines)||
config_compare(list, "HiddenServiceExcludeNodes", CONFIG_TYPE_LINELIST, &options->RendConfigLines)
) {
/* then we're ok. it matched something. */
} else {
+23 -7
View File
@@ -22,6 +22,8 @@ typedef struct rend_service_t {
/* Fields specified in config file */
char *directory;
smartlist_t *ports;
char *intro_nodes;
char *intro_exclude_nodes;
/* Other fields */
crypto_pk_env_t *private_key;
char service_id[REND_SERVICE_ID_LEN+1];
@@ -165,19 +167,33 @@ int rend_config_services(or_options_t *options)
service = tor_malloc_zero(sizeof(rend_service_t));
service->directory = tor_strdup(line->value);
service->ports = smartlist_create();
} else {
assert(!strcasecmp(line->key, "HiddenServicePort"));
if (!service) {
log_fn(LOG_WARN, "HiddenServicePort with no preceeding HiddenServiceDir directive");
rend_service_free(service);
return -1;
}
continue;
}
if (!service) {
log_fn(LOG_WARN, "HiddenServicePort with no preceeding HiddenServiceDir directive");
rend_service_free(service);
return -1;
}
if (!strcasecmp(line->key, "HiddenServicePort")) {
portcfg = parse_port_config(line->value);
if (!portcfg) {
rend_service_free(service);
return -1;
}
smartlist_add(service->ports, portcfg);
} else if (!strcasecmp(line->key, "HiddenServiceNodes")) {
if (service->intro_nodes) {
log_fn(LOG_WARN, "Got multiple HiddenServiceNodes lines for a single service");
return -1;
}
service->intro_nodes = tor_strdup(line->value);
} else {
assert(!strcasecmp(line->key, "HiddenServiceExcludeNodes"));
if (service->intro_exclude_nodes) {
log_fn(LOG_WARN, "Got multiple HiddenServiceExcludedNodes lines for a single service");
return -1;
}
service->intro_exclude_nodes = tor_strdup(line->value);
}
}
if (service)