]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
Make preferred/excluded intro points configurable
authorNick Mathewson <nickm@torproject.org>
Fri, 2 Apr 2004 22:06:46 +0000 (22:06 +0000)
committerNick Mathewson <nickm@torproject.org>
Fri, 2 Apr 2004 22:06:46 +0000 (22:06 +0000)
svn:r1440

src/or/config.c
src/or/rendservice.c

index e5e5fc9c8ee7e9c2593e8d8f4cda7346e6ca8b6c..ad121d3cccef60dcf770d906d4173948fdc3b5f7 100644 (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 {
index 4bb48f4fdd85fbc91786a553861cd9b9ac29ff82..7e75827c047a86ce045f4c7391f66cef9f83c58d 100644 (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)