Commit 4cb21bab authored by Nick Mathewson's avatar Nick Mathewson 🐚
Browse files

Make preferred/excluded intro points configurable


svn:r1440
parent a981c409
Loading
Loading
Loading
Loading
+4 −2
Original line number Diff line number Diff line
@@ -216,7 +216,9 @@ 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, "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
Original line number Diff line number Diff line
@@ -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"));
      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)