[tor-commits] [tor/master] Don't leak the local hostname in relay nicknames

nickm at torproject.org nickm at torproject.org
Tue Apr 26 15:05:04 UTC 2011


commit 4c789ec08c8d52c3aab3ab775a86fe2350d584b5
Author: Sebastian Hahn <sebastian at torproject.org>
Date:   Tue Apr 26 05:07:37 2011 +0200

    Don't leak the local hostname in relay nicknames
    
    Fixes bug 2979, reported by tagnaq.
---
 changes/bug2979  |    9 ++++++++
 src/or/config.c  |   55 ------------------------------------------------------
 src/or/dirserv.h |    2 +-
 3 files changed, 10 insertions(+), 56 deletions(-)

diff --git a/changes/bug2979 b/changes/bug2979
new file mode 100644
index 0000000..fe1f45f
--- /dev/null
+++ b/changes/bug2979
@@ -0,0 +1,9 @@
+  o Minor bugfixes:
+    - If the Nickname configuration option wasn't given, Tor used to pick
+      a nickname based on the local hostname as the nickname for a relay.
+      Because nicknames are not very important in today's Tor and the
+      "Unnamed" nickname has been implemented, this is now problematic
+      behaviour: It leaks information about the hostname without being
+      useful at all. Bugfix on tor-0.1.2.2-alpha, which introduced the
+      Unnamed nickname. Fixes bug 2979, reported by tagnaq.
+
diff --git a/src/or/config.c b/src/or/config.c
index 3770301..9675c73 100644
--- a/src/or/config.c
+++ b/src/or/config.c
@@ -2500,54 +2500,6 @@ is_local_addr(const tor_addr_t *addr)
   return 0;
 }
 
-/** Called when we don't have a nickname set.  Try to guess a good nickname
- * based on the hostname, and return it in a newly allocated string. If we
- * can't, return NULL and let the caller warn if it wants to. */
-static char *
-get_default_nickname(void)
-{
-  static const char * const bad_default_nicknames[] = {
-    "localhost",
-    NULL,
-  };
-  char localhostname[256];
-  char *cp, *out, *outp;
-  int i;
-
-  if (gethostname(localhostname, sizeof(localhostname)) < 0)
-    return NULL;
-
-  /* Put it in lowercase; stop at the first dot. */
-  if ((cp = strchr(localhostname, '.')))
-    *cp = '\0';
-  tor_strlower(localhostname);
-
-  /* Strip invalid characters. */
-  cp = localhostname;
-  out = outp = tor_malloc(strlen(localhostname) + 1);
-  while (*cp) {
-    if (strchr(LEGAL_NICKNAME_CHARACTERS, *cp))
-      *outp++ = *cp++;
-    else
-      cp++;
-  }
-  *outp = '\0';
-
-  /* Enforce length. */
-  if (strlen(out) > MAX_NICKNAME_LEN)
-    out[MAX_NICKNAME_LEN]='\0';
-
-  /* Check for dumb names. */
-  for (i = 0; bad_default_nicknames[i]; ++i) {
-    if (!strcmp(out, bad_default_nicknames[i])) {
-      tor_free(out);
-      return NULL;
-    }
-  }
-
-  return out;
-}
-
 /** Release storage held by <b>options</b>. */
 static void
 config_free(config_format_t *fmt, void *options)
@@ -2976,14 +2928,7 @@ options_validate(or_options_t *old_options, or_options_t *options,
 
   if (options->Nickname == NULL) {
     if (server_mode(options)) {
-      if (!(options->Nickname = get_default_nickname())) {
-        log_notice(LD_CONFIG, "Couldn't pick a nickname based on "
-                   "our hostname; using %s instead.", UNNAMED_ROUTER_NICKNAME);
         options->Nickname = tor_strdup(UNNAMED_ROUTER_NICKNAME);
-      } else {
-        log_notice(LD_CONFIG, "Choosing default nickname '%s'",
-                   options->Nickname);
-      }
     }
   } else {
     if (!is_legal_nickname(options->Nickname)) {
diff --git a/src/or/dirserv.h b/src/or/dirserv.h
index 569abfc..a8a7060 100644
--- a/src/or/dirserv.h
+++ b/src/or/dirserv.h
@@ -52,7 +52,7 @@
    MAX_V_LINE_LEN                                                       \
    )
 
-#define UNNAMED_ROUTER_NICKNAME "Unnamed"
+#define UNNAMED_ROUTER_NICKNAME "Unnamed" 
 
 int connection_dirserv_flushed_some(dir_connection_t *conn);
 





More information about the tor-commits mailing list