Browse Source

r11693@Kushana: nickm | 2006-12-23 22:42:11 -0500
Stop requiring the "opt" keyword before unrecognized directory items.


svn:r9180

Nick Mathewson 19 years ago
parent
commit
339384238c
3 changed files with 17 additions and 46 deletions
  1. 2 0
      ChangeLog
  2. 5 1
      doc/TODO
  3. 10 45
      src/or/routerparse.c

+ 2 - 0
ChangeLog

@@ -48,6 +48,8 @@ Changes in version 0.1.2.5-xxxx - 200?-??-??
     - We no longer look for identity and onion keys in "identity.key" and
       "onion.key" -- these were replaced by secret_id_key and
       secret_onion_key in 0.0.8pre1.
+    - We no longer require unrecognized directory entries to be preceded by
+      "opt".
 
   o Security bugfixes:
     - Stop sending the HttpProxyAuthenticator string to directory

+ 5 - 1
doc/TODO

@@ -196,7 +196,11 @@ R   - "bandwidth classes", for incoming vs initiated-here conns,
     - Stop requiring "opt" to ignore options in descriptors, networkstatuses,
       and so on.
     - Caches should start trying to cache consensus docs?
-    - Start uploading short and long descriptors?
+    - Start uploading short and long descriptors; authorities should support
+      URLs to retrieve long descriptors, and should discard short descriptors
+      for now.  Later, once tools use the "long descriptor" URLs, authorities
+      will serve the short descriptors every time they're asked for
+      a descriptor.
 
 Topics to think about during 0.1.2.x development:
   * Figure out incentives.

+ 10 - 45
src/or/routerparse.c

@@ -467,11 +467,6 @@ router_parse_runningrouters(const char *str)
   if (tokenize_string(str,str+strlen(str),tokens,DIR)) {
     log_warn(LD_DIR, "Error tokenizing running-routers"); goto err;
   }
-  if ((tok = find_first_by_keyword(tokens, _UNRECOGNIZED))) {
-    log_warn(LD_DIR, "Unrecognized keyword %s; can't parse running-routers",
-             escaped(tok->args[0]));
-    goto err;
-  }
   tok = smartlist_get(tokens,0);
   if (tok->tp != K_NETWORK_STATUS) {
     log_warn(LD_DIR, "Network-status starts with wrong token");
@@ -759,13 +754,6 @@ router_parse_entry_from_string(const char *s, const char *end,
     log_warn(LD_DIR, "Impossibly short router descriptor.");
     goto err;
   }
-  if ((tok = find_first_by_keyword(tokens, _UNRECOGNIZED))) {
-    log_warn(LD_DIR,
-             "Unrecognized critical keyword %s; skipping descriptor. "
-             "(It may be from another version of Tor.)",
-             escaped(tok->args[0]));
-    goto err;
-  }
 
   tok = smartlist_get(tokens,0);
   if (tok->tp != K_ROUTER) {
@@ -1018,11 +1006,6 @@ routerstatus_parse_entry_from_string(const char **s, smartlist_t *tokens)
     log_warn(LD_DIR, "Impossibly short router status");
     goto err;
   }
-  if ((tok = find_first_by_keyword(tokens, _UNRECOGNIZED))) {
-    log_warn(LD_DIR, "Unrecognized keyword %s in router status; skipping.",
-             escaped(tok->args[0]));
-    goto err;
-  }
   if (!(tok = find_first_by_keyword(tokens, K_R))) {
     log_warn(LD_DIR, "Missing 'r' keywork in router status; skipping.");
     goto err;
@@ -1156,11 +1139,6 @@ networkstatus_parse_from_string(const char *s)
     log_warn(LD_DIR, "Error tokenizing network-status header.");
     goto err;
   }
-  if ((tok = find_first_by_keyword(tokens, _UNRECOGNIZED))) {
-    log_warn(LD_DIR, "Unrecognized keyword %s; can't parse network-status",
-             escaped(tok->args[0]));
-    goto err;
-  }
   ns = tor_malloc_zero(sizeof(networkstatus_t));
   memcpy(ns->networkstatus_digest, ns_digest, DIGEST_LEN);
 
@@ -1629,29 +1607,16 @@ get_next_token(const char **s, where_syntax where)
     }
   }
   if (tok->tp == _ERR) {
-    if (is_opt) {
-      tok->tp = K_OPT;
-      *s = eat_whitespace_no_nl(next);
-      next = strchr(*s,'\n');
-      if (!next)
-        RET_ERR("Unexpected EOF");
-      tok->args = tor_malloc(sizeof(char*));
-      tok->args[0] = tor_strndup(*s,next-*s);
-      tok->n_args = 1;
-      *s = eat_whitespace_no_nl(next+1);
-      o_syn = OBJ_OK;
-    } else {
-      tok->tp = _UNRECOGNIZED;
-      next = strchr(*s, '\n');
-      if (!next) {
-        RET_ERR("Unexpected EOF");
-      }
-      tok->args = tor_malloc(sizeof(char*));
-      tok->args[0] = tor_strndup(*s,next-*s);
-      tok->n_args = 1;
-      *s = next+1;
-      o_syn = OBJ_OK;
-    }
+    tok->tp = K_OPT;
+    *s = eat_whitespace_no_nl(next);
+    next = strchr(*s,'\n');
+    if (!next)
+      RET_ERR("Unexpected EOF");
+    tok->args = tor_malloc(sizeof(char*));
+    tok->args[0] = tor_strndup(*s,next-*s);
+    tok->n_args = 1;
+    *s = eat_whitespace_no_nl(next+1);
+    o_syn = OBJ_OK;
   }
   *s = eat_whitespace(*s);
   if (strcmpstart(*s, "-----BEGIN ")) {