[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

patch to add a NoPublish configuration option



Please consider this patch, which creates a NoPublish configuration
option.  Presently, NoPublish is identical in function to ClientOnly,
but the goal is different.  In particular, NoPublish does not mean "I am
not a server"; instead, NoPublish means "I will not publish a
descriptor".  Eventually, ClientOnly should be modified to prevent Tor
from acting as a server even if an external means (a controller,
perhaps) pushes around the descriptor in such a manner as to obviate
direct publication.  However, this is not my concern for now.

Geoff
Common subdirectories: or/.deps and or.patch/.deps
Common subdirectories: or/CVS and or.patch/CVS
diff -u or/config.c or.patch/config.c
--- or/config.c	2005-04-14 04:10:34.000000000 -0400
+++ or.patch/config.c	2005-04-14 03:51:38.000000000 -0400
@@ -128,6 +128,7 @@
   VAR("FirewallPorts",       CSV,      FirewallPorts,        "80,443"),
   VAR("MyFamily",            STRING,   MyFamily,             NULL),
   VAR("NodeFamily",          LINELIST, NodeFamilies,         NULL),
+  VAR("NoPublish",           BOOL,     NoPublish,            "0"),
   VAR("Group",               STRING,   Group,                NULL),
   VAR("HashedControlPassword",STRING,  HashedControlPassword, NULL),
   VAR("HttpProxy",           STRING,   HttpProxy,            NULL),
@@ -1330,6 +1331,11 @@
     result = -1;
   }
 
+  if (options->AuthoritativeDir && options->NoPublish) {
+    log(LOG_WARN, "Running as authoritative directory, but NoPublish also set.");
+    result = -1;
+  }
+
   if (options->ConnLimit <= 0) {
     log(LOG_WARN, "ConnLimit must be greater than 0, but was set to %d",
         options->ConnLimit);
diff -u or/or.h or.patch/or.h
--- or/or.h	2005-04-14 04:12:02.000000000 -0400
+++ or.patch/or.h	2005-04-14 03:52:34.000000000 -0400
@@ -1010,6 +1010,7 @@
   int DirPort; /**< Port to listen on for directory connections. */
   int AuthoritativeDir; /**< Boolean: is this an authoritative directory? */
   int ClientOnly; /**< Boolean: should we never evolve into a server role? */
+  int NoPublish; /**< Boolean: should we never publish a descriptor? */
   int ConnLimit; /**< Requested maximum number of simultaneous connections. */
   int _ConnLimit; /**< Actual maximum number of simultaneous connections. */
   int IgnoreVersion; /**< If true, run no matter what versions of Tor the
diff -u or/router.c or.patch/router.c
--- or/router.c	2005-04-14 04:10:35.000000000 -0400
+++ or.patch/router.c	2005-04-14 04:08:20.000000000 -0400
@@ -472,18 +472,23 @@
   return (options->SocksPort != 0 || options->SocksBindAddress);
 }
 
-/** Decide if we're a publishable server or just a client. We are a server if:
+/** Decide if we're a publishable server.  We are a publishable server if:
+ * - We don't have the ClientOnly option set
+ * and
+ * - We don't have the NoPublish option set
+ * and
+ * - We have ORPort set
+ * and
+ * - We believe we are reachable from the outside; or
  * - We have the AuthoritativeDirectory option set.
- * or
- * - We don't have the ClientOnly option set; and
- * - We have ORPort set; and
- * - We believe we are reachable from the outside.
  */
 static int decide_if_publishable_server(time_t now) {
   or_options_t *options = get_options();
 
   if (options->ClientOnly)
     return 0;
+  if (options->NoPublish)
+    return 0;
   if (!server_mode(options))
     return 0;
   if (options->AuthoritativeDir)

Attachment: signature.asc
Description: Digital signature