Browse Source

Drop support for v1 rendezvous descriptors, since we never used
them anyway, and the code has probably rotted by now. Based on
patch from Karsten Loesing.


svn:r11496

Roger Dingledine 18 years ago
parent
commit
eb9dc12ce9
9 changed files with 46 additions and 174 deletions
  1. 3 0
      ChangeLog
  2. 13 14
      doc/spec/rend-spec.txt
  3. 1 1
      src/or/connection_edge.c
  4. 4 8
      src/or/directory.c
  5. 1 2
      src/or/or.h
  6. 4 4
      src/or/rendclient.c
  7. 16 89
      src/or/rendcommon.c
  8. 2 3
      src/or/rendservice.c
  9. 2 53
      src/or/test.c

+ 3 - 0
ChangeLog

@@ -27,6 +27,9 @@ Changes in version 0.2.0.7-alpha - 2007-??-??
      - Remove the contrib scripts ExerciseServer.py, PathDemo.py,
      - Remove the contrib scripts ExerciseServer.py, PathDemo.py,
        and TorControl.py, as they use the old v0 controller protocol,
        and TorControl.py, as they use the old v0 controller protocol,
        and are obsoleted by TorFlow anyway.
        and are obsoleted by TorFlow anyway.
+     - Drop support for v1 rendezvous descriptors, since we never used
+       them anyway, and the code has probably rotted by now. Based on
+       patch from Karsten Loesing.
 
 
   o Major bugfixes:
   o Major bugfixes:
     - Fix possible segfaults in functions called from
     - Fix possible segfaults in functions called from

+ 13 - 14
doc/spec/rend-spec.txt

@@ -200,6 +200,7 @@ $Id$
 
 
    [Once Tor 0.1.0.x is obsolete, we can stop generating or using V0
    [Once Tor 0.1.0.x is obsolete, we can stop generating or using V0
     descriptors. -NM]
     descriptors. -NM]
+   [This should rather be retarded until V2 descriptors are stable. -KL]
 
 
 1.3. Bob's OP establishes his introduction points.
 1.3. Bob's OP establishes his introduction points.
 
 
@@ -282,14 +283,11 @@ $Id$
 1.6. Alice's OP retrieves a service descriptor.
 1.6. Alice's OP retrieves a service descriptor.
 
 
    Alice opens a stream to a directory server via Tor, and makes an HTTP GET
    Alice opens a stream to a directory server via Tor, and makes an HTTP GET
-   request for the document '/tor/rendezvous/<z>' or '/tor/rendezvous1/<z>',
+   request for the document '/tor/rendezvous/<z>', where '<z>' is replaced
-   where '<z>' is replaced with the encoding of Bob's public key as described
+   with the encoding of Bob's public key as described above. (She may re-use
-   above. (She may re-use old circuits for this.) The directory replies with
+   old circuits for this.) The directory replies with a 404 HTTP response if
-   a 404 HTTP response if it does not recognize <z>, and otherwise returns
+   it does not recognize <z>, and otherwise returns Bob's most recently
-   Bob's most recently uploaded service descriptor.  (If Alice requests
+   uploaded service descriptor.
-   'rendezvous1', the directory server provides a V1 descriptor or a V0
-   descriptor if no V1 descriptor is available.  If Alice requests
-   'rendezvous', the directory server returns a V0 descriptor.)
 
 
    If Alice's OP receives a 404 response, it tries the other directory
    If Alice's OP receives a 404 response, it tries the other directory
    servers, and only fails the lookup if none recognize the public key hash.
    servers, and only fails the lookup if none recognize the public key hash.
@@ -356,7 +354,7 @@ $Id$
           RC     Rendezvous cookie            [20 octets]
           RC     Rendezvous cookie            [20 octets]
           g^x    Diffie-Hellman data, part 1 [128 octets]
           g^x    Diffie-Hellman data, part 1 [128 octets]
         OR
         OR
-          VER    Version byte: set to 3.           [1 octet]
+          VER    Version byte: set to 4.           [1 octet]
           ATYPE  An address type (typically 4)     [1 octet]
           ATYPE  An address type (typically 4)     [1 octet]
           ADDR   Rendezvous point's IP address     [4 or 16 octets]
           ADDR   Rendezvous point's IP address     [4 or 16 octets]
           PORT   Rendezvous point's OR port        [2 octets]
           PORT   Rendezvous point's OR port        [2 octets]
@@ -373,11 +371,12 @@ $Id$
    and must contain EITHER a nickname, or an identity key digest, encoded in
    and must contain EITHER a nickname, or an identity key digest, encoded in
    hex, and prefixed with a '$'.
    hex, and prefixed with a '$'.
 
 
-   Implementations SHOULD accept all variants, and list the variants they
+   Implementations SHOULD accept all variants, although only the first,
-   accept in their V1 descriptor.  Implementations should only generate the
+   unversioned variant SHOULD be generated.  If V1 descriptors were used,
-   variants listed in the service's V1 descriptor; if no V1 descriptor is
+   implementations SHOULD have listed the variants they accept in their V1
-   available, only the first variant should be generated.  No version should
+   descriptor, and implementations SHOULD only have generated the variants
-   generate the second variant (version byte=1).
+   listed in the service's V1 descriptor.  No version SHOULD generate the
+   second variant (version byte=1).
 
 
    The hybrid encryption to Bob's PK works just like the hybrid
    The hybrid encryption to Bob's PK works just like the hybrid
    encryption in CREATE cells (see main spec). Thus the payload of the
    encryption in CREATE cells (see main spec). Thus the payload of the

+ 1 - 1
src/or/connection_edge.c

@@ -1441,7 +1441,7 @@ connection_ap_handshake_rewrite_and_attach(edge_connection_t *conn,
     log_info(LD_REND,"Got a hidden service request for ID '%s'",
     log_info(LD_REND,"Got a hidden service request for ID '%s'",
              safe_str(conn->rend_query));
              safe_str(conn->rend_query));
     /* see if we already have it cached */
     /* see if we already have it cached */
-    r = rend_cache_lookup_entry(conn->rend_query, -1, &entry);
+    r = rend_cache_lookup_entry(conn->rend_query, 0, &entry);
     if (r<0) {
     if (r<0) {
       log_warn(LD_BUG,"Invalid service name '%s'",
       log_warn(LD_BUG,"Invalid service name '%s'",
                safe_str(conn->rend_query));
                safe_str(conn->rend_query));

+ 4 - 8
src/or/directory.c

@@ -1515,7 +1515,7 @@ connection_dir_client_reached_eof(dir_connection_t *conn)
     switch (status_code) {
     switch (status_code) {
       case 200:
       case 200:
         if (rend_cache_store(body, body_len, 0) < 0) {
         if (rend_cache_store(body, body_len, 0) < 0) {
-          log_warn(LD_REND,"Failed to store rendezvous descriptor.");
+          log_warn(LD_REND,"Failed to fetch rendezvous descriptor.");
           /* alice's ap_stream will notice when connection_mark_for_close
           /* alice's ap_stream will notice when connection_mark_for_close
            * cleans it up */
            * cleans it up */
         } else {
         } else {
@@ -2209,17 +2209,14 @@ directory_handle_command_get(dir_connection_t *conn, const char *headers,
     goto done;
     goto done;
   }
   }
 
 
-  if (options->HSAuthoritativeDir &&
+  if (options->HSAuthoritativeDir && !strcmpstart(url,"/tor/rendezvous/")) {
-      (!strcmpstart(url,"/tor/rendezvous/") ||
-       !strcmpstart(url,"/tor/rendezvous1/"))) {
     /* rendezvous descriptor fetch */
     /* rendezvous descriptor fetch */
     const char *descp;
     const char *descp;
     size_t desc_len;
     size_t desc_len;
-    int versioned = !strcmpstart(url,"/tor/rendezvous1/");
+    const char *query = url+strlen("/tor/rendezvous/");
-    const char *query = url+strlen("/tor/rendezvous/")+(versioned?1:0);
 
 
     log_info(LD_REND, "Handling rendezvous descriptor get");
     log_info(LD_REND, "Handling rendezvous descriptor get");
-    switch (rend_cache_lookup_desc(query, versioned?-1:0, &descp, &desc_len)) {
+    switch (rend_cache_lookup_desc(query, 0, &descp, &desc_len)) {
       case 1: /* valid */
       case 1: /* valid */
         write_http_response_header_impl(conn, desc_len,
         write_http_response_header_impl(conn, desc_len,
                                    "application/octet-stream",
                                    "application/octet-stream",
@@ -2376,7 +2373,6 @@ directory_handle_command_post(dir_connection_t *conn, const char *headers,
     /* rendezvous descriptor post */
     /* rendezvous descriptor post */
     log_info(LD_REND, "Handling rendezvous descriptor post.");
     log_info(LD_REND, "Handling rendezvous descriptor post.");
     if (rend_cache_store(body, body_len, 1) < 0) {
     if (rend_cache_store(body, body_len, 1) < 0) {
-//      char tmp[1024*2+1];
       log_fn(LOG_PROTOCOL_WARN, LD_DIRSERV,
       log_fn(LOG_PROTOCOL_WARN, LD_DIRSERV,
              "Rejected rend descriptor (length %d) from %s.",
              "Rejected rend descriptor (length %d) from %s.",
              (int)body_len, conn->_base.address);
              (int)body_len, conn->_base.address);

+ 1 - 2
src/or/or.h

@@ -3244,7 +3244,7 @@ int rend_client_send_introduction(origin_circuit_t *introcirc,
 /** Information used to connect to a hidden service. */
 /** Information used to connect to a hidden service. */
 typedef struct rend_service_descriptor_t {
 typedef struct rend_service_descriptor_t {
   crypto_pk_env_t *pk; /**< This service's public key. */
   crypto_pk_env_t *pk; /**< This service's public key. */
-  int version; /**< 0 or 1. */
+  int version; /**< 0. */
   time_t timestamp; /**< Time when the descriptor was generated. */
   time_t timestamp; /**< Time when the descriptor was generated. */
   uint16_t protocols; /**< Bitmask: which rendezvous protocols are supported?
   uint16_t protocols; /**< Bitmask: which rendezvous protocols are supported?
                        * (We allow bits '0', '1', and '2' to be set.) */
                        * (We allow bits '0', '1', and '2' to be set.) */
@@ -3267,7 +3267,6 @@ void rend_process_relay_cell(circuit_t *circ, int command, size_t length,
 
 
 void rend_service_descriptor_free(rend_service_descriptor_t *desc);
 void rend_service_descriptor_free(rend_service_descriptor_t *desc);
 int rend_encode_service_descriptor(rend_service_descriptor_t *desc,
 int rend_encode_service_descriptor(rend_service_descriptor_t *desc,
-                                   int version,
                                    crypto_pk_env_t *key,
                                    crypto_pk_env_t *key,
                                    char **str_out,
                                    char **str_out,
                                    size_t *len_out);
                                    size_t *len_out);

+ 4 - 4
src/or/rendclient.c

@@ -69,7 +69,7 @@ rend_client_send_introduction(origin_circuit_t *introcirc,
   tor_assert(!rend_cmp_service_ids(introcirc->rend_query,
   tor_assert(!rend_cmp_service_ids(introcirc->rend_query,
                                    rendcirc->rend_query));
                                    rendcirc->rend_query));
 
 
-  if (rend_cache_lookup_entry(introcirc->rend_query, -1, &entry) < 1) {
+  if (rend_cache_lookup_entry(introcirc->rend_query, 0, &entry) < 1) {
     log_warn(LD_REND,
     log_warn(LD_REND,
              "query %s didn't have valid rend desc in cache. Failing.",
              "query %s didn't have valid rend desc in cache. Failing.",
              escaped_safe_str(introcirc->rend_query));
              escaped_safe_str(introcirc->rend_query));
@@ -281,7 +281,7 @@ rend_client_remove_intro_point(extend_info_t *failed_intro, const char *query)
   rend_cache_entry_t *ent;
   rend_cache_entry_t *ent;
   connection_t *conn;
   connection_t *conn;
 
 
-  r = rend_cache_lookup_entry(query, -1, &ent);
+  r = rend_cache_lookup_entry(query, 0, &ent);
   if (r<0) {
   if (r<0) {
     log_warn(LD_BUG, "Malformed service ID %s.", escaped_safe_str(query));
     log_warn(LD_BUG, "Malformed service ID %s.", escaped_safe_str(query));
     return -1;
     return -1;
@@ -450,7 +450,7 @@ rend_client_desc_here(const char *query)
     if (rend_cmp_service_ids(query, conn->rend_query))
     if (rend_cmp_service_ids(query, conn->rend_query))
       continue;
       continue;
     assert_connection_ok(TO_CONN(conn), now);
     assert_connection_ok(TO_CONN(conn), now);
-    if (rend_cache_lookup_entry(conn->rend_query, -1, &entry) == 1 &&
+    if (rend_cache_lookup_entry(conn->rend_query, 0, &entry) == 1 &&
         entry->parsed->n_intro_points > 0) {
         entry->parsed->n_intro_points > 0) {
       /* either this fetch worked, or it failed but there was a
       /* either this fetch worked, or it failed but there was a
        * valid entry from before which we should reuse */
        * valid entry from before which we should reuse */
@@ -486,7 +486,7 @@ rend_client_get_random_intro(const char *query)
   int i;
   int i;
   rend_cache_entry_t *entry;
   rend_cache_entry_t *entry;
 
 
-  if (rend_cache_lookup_entry(query, -1, &entry) < 1) {
+  if (rend_cache_lookup_entry(query, 0, &entry) < 1) {
     log_warn(LD_REND,
     log_warn(LD_REND,
              "Query '%s' didn't have valid rend desc in cache. Failing.",
              "Query '%s' didn't have valid rend desc in cache. Failing.",
              safe_str(query));
              safe_str(query));

+ 16 - 89
src/or/rendcommon.c

@@ -49,7 +49,6 @@ rend_service_descriptor_free(rend_service_descriptor_t *desc)
  */
  */
 int
 int
 rend_encode_service_descriptor(rend_service_descriptor_t *desc,
 rend_encode_service_descriptor(rend_service_descriptor_t *desc,
-                               int version,
                                crypto_pk_env_t *key,
                                crypto_pk_env_t *key,
                                char **str_out, size_t *len_out)
                                char **str_out, size_t *len_out)
 {
 {
@@ -60,42 +59,17 @@ rend_encode_service_descriptor(rend_service_descriptor_t *desc,
   size_t buflen = PK_BYTES*2*(desc->n_intro_points+2);/*Too long, but ok*/
   size_t buflen = PK_BYTES*2*(desc->n_intro_points+2);/*Too long, but ok*/
   cp = *str_out = tor_malloc(buflen);
   cp = *str_out = tor_malloc(buflen);
   end = cp + PK_BYTES*2*(desc->n_intro_points+1);
   end = cp + PK_BYTES*2*(desc->n_intro_points+1);
-  if (version) {
-    *(uint8_t*)cp = (uint8_t)0xff;
-    *(uint8_t*)(cp+1) = (uint8_t)version;
-    cp += 2;
-  }
   asn1len = crypto_pk_asn1_encode(desc->pk, cp+2, end-(cp+2));
   asn1len = crypto_pk_asn1_encode(desc->pk, cp+2, end-(cp+2));
   set_uint16(cp, htons((uint16_t)asn1len));
   set_uint16(cp, htons((uint16_t)asn1len));
   cp += 2+asn1len;
   cp += 2+asn1len;
   set_uint32(cp, htonl((uint32_t)desc->timestamp));
   set_uint32(cp, htonl((uint32_t)desc->timestamp));
   cp += 4;
   cp += 4;
-  if (version == 1) {
-    set_uint16(cp, htons(desc->protocols));
-    cp += 2;
-  }
   set_uint16(cp, htons((uint16_t)desc->n_intro_points));
   set_uint16(cp, htons((uint16_t)desc->n_intro_points));
   cp += 2;
   cp += 2;
-  if (version == 0) {
+  for (i=0; i < desc->n_intro_points; ++i) {
-    for (i=0; i < desc->n_intro_points; ++i) {
+    char *ipoint = (char*)desc->intro_points[i];
-      char *ipoint = (char*)desc->intro_points[i];
+    strlcpy(cp, ipoint, buflen-(cp-*str_out));
-      strlcpy(cp, ipoint, buflen-(cp-*str_out));
+    cp += strlen(ipoint)+1;
-      cp += strlen(ipoint)+1;
-    }
-  } else {
-    if (desc->n_intro_points)
-      tor_assert(desc->intro_point_extend_info);
-    for (i=0; i < desc->n_intro_points; ++i) {
-      extend_info_t *info = desc->intro_point_extend_info[i];
-      int klen;
-      set_uint32(cp, htonl(info->addr));
-      set_uint16(cp+4, htons(info->port));
-      memcpy(cp+6, info->identity_digest, DIGEST_LEN);
-      klen = crypto_pk_asn1_encode(info->onion_key, cp+6+DIGEST_LEN+2,
-                                   (end-(cp+6+DIGEST_LEN+2)));
-      set_uint16(cp+6+DIGEST_LEN, htons((uint16_t)klen));
-      cp += 6+DIGEST_LEN+2+klen;
-    }
   }
   }
   note_crypto_pk_op(REND_SERVER);
   note_crypto_pk_op(REND_SERVER);
   i = crypto_pk_private_sign_digest(key, cp, *str_out, cp-*str_out);
   i = crypto_pk_private_sign_digest(key, cp, *str_out, cp-*str_out);
@@ -119,18 +93,12 @@ rend_parse_service_descriptor(const char *str, size_t len)
   int i;
   int i;
   size_t keylen, asn1len;
   size_t keylen, asn1len;
   const char *end, *cp, *eos;
   const char *end, *cp, *eos;
-  int version = 0;
 
 
   result = tor_malloc_zero(sizeof(rend_service_descriptor_t));
   result = tor_malloc_zero(sizeof(rend_service_descriptor_t));
   cp = str;
   cp = str;
   end = str+len;
   end = str+len;
   if (end-cp<2) goto truncated;
   if (end-cp<2) goto truncated;
-  if (*(uint8_t*)cp == 0xff) {
+  result->version = 0;
-    result->version = version = *(uint8_t*)(cp+1);
-    cp += 2;
-  } else {
-    result->version = version = 0;
-  }
   if (end-cp < 2) goto truncated;
   if (end-cp < 2) goto truncated;
   asn1len = ntohs(get_uint16(cp));
   asn1len = ntohs(get_uint16(cp));
   cp += 2;
   cp += 2;
@@ -141,18 +109,12 @@ rend_parse_service_descriptor(const char *str, size_t len)
   if (end-cp < 4) goto truncated;
   if (end-cp < 4) goto truncated;
   result->timestamp = (time_t) ntohl(get_uint32(cp));
   result->timestamp = (time_t) ntohl(get_uint32(cp));
   cp += 4;
   cp += 4;
-  if (version == 1) {
+  result->protocols = 1;
-    if (end-cp < 2) goto truncated;
-    result->protocols = ntohs(get_uint16(cp));
-    cp += 2;
-  } else {
-    result->protocols = 1;
-  }
   if (end-cp < 2) goto truncated;
   if (end-cp < 2) goto truncated;
   result->n_intro_points = ntohs(get_uint16(cp));
   result->n_intro_points = ntohs(get_uint16(cp));
   cp += 2;
   cp += 2;
 
 
-  if (version == 0 && result->n_intro_points != 0) {
+  if (result->n_intro_points != 0) {
     result->intro_points =
     result->intro_points =
       tor_malloc_zero(sizeof(char*)*result->n_intro_points);
       tor_malloc_zero(sizeof(char*)*result->n_intro_points);
     for (i=0;i<result->n_intro_points;++i) {
     for (i=0;i<result->n_intro_points;++i) {
@@ -162,33 +124,6 @@ rend_parse_service_descriptor(const char *str, size_t len)
       result->intro_points[i] = tor_strdup(cp);
       result->intro_points[i] = tor_strdup(cp);
       cp = eos+1;
       cp = eos+1;
     }
     }
-  } else if (version != 0 && result->n_intro_points != 0) {
-    result->intro_point_extend_info =
-      tor_malloc_zero(sizeof(extend_info_t*)*result->n_intro_points);
-    result->intro_points =
-      tor_malloc_zero(sizeof(char*)*result->n_intro_points);
-    for (i=0;i<result->n_intro_points;++i) {
-      extend_info_t *info = result->intro_point_extend_info[i] =
-        tor_malloc_zero(sizeof(extend_info_t));
-      int klen;
-      if (end-cp < 8+DIGEST_LEN) goto truncated;
-      info->addr = ntohl(get_uint32(cp));
-      info->port = ntohs(get_uint16(cp+4));
-      memcpy(info->identity_digest, cp+6, DIGEST_LEN);
-      info->nickname[0] = '$';
-      base16_encode(info->nickname+1, sizeof(info->nickname)-1,
-                    info->identity_digest, DIGEST_LEN);
-      result->intro_points[i] = tor_strdup(info->nickname);
-      klen = ntohs(get_uint16(cp+6+DIGEST_LEN));
-      cp += 8+DIGEST_LEN;
-      if (end-cp < klen) goto truncated;
-      if (!(info->onion_key = crypto_pk_asn1_decode(cp,klen))) {
-        log_warn(LD_PROTOCOL,
-                 "Internal error decoding onion key for intro point.");
-        goto error;
-      }
-      cp += klen;
-    }
   }
   }
   keylen = crypto_pk_keysize(result->pk);
   keylen = crypto_pk_keysize(result->pk);
   tor_assert(end-cp >= 0);
   tor_assert(end-cp >= 0);
@@ -307,28 +242,20 @@ rend_valid_service_id(const char *query)
   return 1;
   return 1;
 }
 }
 
 
-/** If we have a cached rend_cache_entry_t for the service ID <b>query</b>,
+/** If we have a cached rend_cache_entry_t for the service ID <b>query</b>
- * set *<b>e</b> to that entry and return 1.  Else return 0.  If
+ * with <b>version</b>, set *<b>e</b> to that entry and return 1.
- * <b>version</b> is nonnegative, only return an entry in that descriptor
+ * Else return 0.
- * format version. Otherwise (if <b>version</b> is negative), return the most
- * recent format we have.
  */
  */
 int
 int
 rend_cache_lookup_entry(const char *query, int version, rend_cache_entry_t **e)
 rend_cache_lookup_entry(const char *query, int version, rend_cache_entry_t **e)
 {
 {
-  char key[REND_SERVICE_ID_LEN+2]; /* 1<query>\0   or  0<query>\0 */
+  char key[REND_SERVICE_ID_LEN+2]; /* <version><query>\0 */
   tor_assert(rend_cache);
   tor_assert(rend_cache);
+  tor_assert(!version);
   if (!rend_valid_service_id(query))
   if (!rend_valid_service_id(query))
     return -1;
     return -1;
-  *e = NULL;
+  tor_snprintf(key, sizeof(key), "%d%s", version, query);
-  if (version != 0) {
+  *e = strmap_get_lc(rend_cache, key);
-    tor_snprintf(key, sizeof(key), "1%s", query);
-    *e = strmap_get_lc(rend_cache, key);
-  }
-  if (!*e && version != 1) {
-    tor_snprintf(key, sizeof(key), "0%s", query);
-    *e = strmap_get_lc(rend_cache, key);
-  }
   if (!*e)
   if (!*e)
     return 0;
     return 0;
   return 1;
   return 1;
@@ -369,7 +296,7 @@ rend_cache_store(const char *desc, size_t desc_len, int published)
   rend_cache_entry_t *e;
   rend_cache_entry_t *e;
   rend_service_descriptor_t *parsed;
   rend_service_descriptor_t *parsed;
   char query[REND_SERVICE_ID_LEN+1];
   char query[REND_SERVICE_ID_LEN+1];
-  char key[REND_SERVICE_ID_LEN+2]; /* 1<query>\0  or  0<query>\0 */
+  char key[REND_SERVICE_ID_LEN+2]; /* 0<query>\0 */
   time_t now;
   time_t now;
   or_options_t *options = get_options();
   or_options_t *options = get_options();
   tor_assert(rend_cache);
   tor_assert(rend_cache);
@@ -383,7 +310,7 @@ rend_cache_store(const char *desc, size_t desc_len, int published)
     rend_service_descriptor_free(parsed);
     rend_service_descriptor_free(parsed);
     return -1;
     return -1;
   }
   }
-  tor_snprintf(key, sizeof(key), "%c%s", parsed->version?'1':'0', query);
+  tor_snprintf(key, sizeof(key), "0%s", query);
   now = time(NULL);
   now = time(NULL);
   if (parsed->timestamp < now-REND_CACHE_MAX_AGE-REND_CACHE_MAX_SKEW) {
   if (parsed->timestamp < now-REND_CACHE_MAX_AGE-REND_CACHE_MAX_SKEW) {
     log_fn(LOG_PROTOCOL_WARN, LD_REND,
     log_fn(LOG_PROTOCOL_WARN, LD_REND,

+ 2 - 3
src/or/rendservice.c

@@ -937,7 +937,7 @@ find_intro_circuit(routerinfo_t *router, const char *pk_digest)
  * and upload it to all the dirservers.
  * and upload it to all the dirservers.
  */
  */
 static void
 static void
-upload_service_descriptor(rend_service_t *service, int version)
+upload_service_descriptor(rend_service_t *service)
 {
 {
   char *desc;
   char *desc;
   size_t desc_len;
   size_t desc_len;
@@ -946,7 +946,6 @@ upload_service_descriptor(rend_service_t *service, int version)
   /* Update the descriptor. */
   /* Update the descriptor. */
   rend_service_update_descriptor(service);
   rend_service_update_descriptor(service);
   if (rend_encode_service_descriptor(service->desc,
   if (rend_encode_service_descriptor(service->desc,
-                                     version,
                                      service->private_key,
                                      service->private_key,
                                      &desc, &desc_len)<0) {
                                      &desc, &desc_len)<0) {
     log_warn(LD_BUG, "Internal error: couldn't encode service descriptor; "
     log_warn(LD_BUG, "Internal error: couldn't encode service descriptor; "
@@ -1110,7 +1109,7 @@ rend_consider_services_upload(time_t now)
       /* if it's time, or if the directory servers have a wrong service
       /* if it's time, or if the directory servers have a wrong service
        * descriptor and ours has been stable for 30 seconds, upload a
        * descriptor and ours has been stable for 30 seconds, upload a
        * new one of each format. */
        * new one of each format. */
-      upload_service_descriptor(service, 0);
+      upload_service_descriptor(service);
       service->next_upload_time = now + rendpostperiod;
       service->next_upload_time = now + rendpostperiod;
     }
     }
   }
   }

+ 2 - 53
src/or/test.c

@@ -2916,7 +2916,7 @@ test_rend_fns(void)
   pk1 = pk_generate(0);
   pk1 = pk_generate(0);
   pk2 = pk_generate(1);
   pk2 = pk_generate(1);
 
 
-  /* Test unversioned descriptor */
+  /* Test unversioned (v0) descriptor */
   d1 = tor_malloc_zero(sizeof(rend_service_descriptor_t));
   d1 = tor_malloc_zero(sizeof(rend_service_descriptor_t));
   d1->pk = crypto_pk_dup_key(pk1);
   d1->pk = crypto_pk_dup_key(pk1);
   now = time(NULL);
   now = time(NULL);
@@ -2927,7 +2927,7 @@ test_rend_fns(void)
   d1->intro_points[0] = tor_strdup("tom");
   d1->intro_points[0] = tor_strdup("tom");
   d1->intro_points[1] = tor_strdup("crow");
   d1->intro_points[1] = tor_strdup("crow");
   d1->intro_points[2] = tor_strdup("joel");
   d1->intro_points[2] = tor_strdup("joel");
-  test_assert(! rend_encode_service_descriptor(d1, 0, pk1, &encoded, &len));
+  test_assert(! rend_encode_service_descriptor(d1, pk1, &encoded, &len));
   d2 = rend_parse_service_descriptor(encoded, len);
   d2 = rend_parse_service_descriptor(encoded, len);
   test_assert(d2);
   test_assert(d2);
 
 
@@ -2945,62 +2945,11 @@ test_rend_fns(void)
   rend_service_descriptor_free(d2);
   rend_service_descriptor_free(d2);
   tor_free(encoded);
   tor_free(encoded);
 
 
-  /* Test versioned descriptor. */
-  d1 = tor_malloc_zero(sizeof(rend_service_descriptor_t));
-  d1->pk = crypto_pk_dup_key(pk1);
-  now = time(NULL);
-  d1->timestamp = now;
-  d1->n_intro_points = 2;
-  d1->version = 1;
-  d1->protocols = 60;
-  d1->intro_points = tor_malloc(sizeof(char*)*2);
-  d1->intro_point_extend_info = tor_malloc(sizeof(extend_info_t*)*2);
-  d1->intro_points[0] = tor_strdup("tom");
-  d1->intro_points[1] = tor_strdup("crow");
-  d1->intro_point_extend_info[0] = tor_malloc_zero(sizeof(extend_info_t));
-  strlcpy(d1->intro_point_extend_info[0]->nickname, "tom", 4);
-  d1->intro_point_extend_info[0]->addr = 1234;
-  d1->intro_point_extend_info[0]->port = 4567;
-  d1->intro_point_extend_info[0]->onion_key = crypto_pk_dup_key(pk1);
-  memset(d1->intro_point_extend_info[0]->identity_digest, 'a', DIGEST_LEN);
-
-  d1->intro_point_extend_info[1] = tor_malloc_zero(sizeof(extend_info_t));
-  strlcpy(d1->intro_point_extend_info[1]->nickname, "crow", 5);
-  d1->intro_point_extend_info[1]->addr = 6060842;
-  d1->intro_point_extend_info[1]->port = 8000;
-  d1->intro_point_extend_info[1]->onion_key = crypto_pk_dup_key(pk2);
-  memset(d1->intro_point_extend_info[1]->identity_digest, 'b', DIGEST_LEN);
-
-  test_assert(! rend_encode_service_descriptor(d1, 1, pk1, &encoded, &len));
-  d2 = rend_parse_service_descriptor(encoded, len);
-  test_assert(d2);
-
-  test_assert(!crypto_pk_cmp_keys(d1->pk, d2->pk));
-  test_eq(d2->timestamp, now);
-  test_eq(d2->version, 1);
-  test_eq(d2->protocols, 60);
-  test_eq(d2->n_intro_points, 2);
-  test_streq(d2->intro_points[0], d2->intro_point_extend_info[0]->nickname);
-  test_streq(d2->intro_points[1], d2->intro_point_extend_info[1]->nickname);
-  test_eq(d2->intro_point_extend_info[0]->addr, 1234);
-  test_eq(d2->intro_point_extend_info[0]->port, 4567);
-  test_assert(!crypto_pk_cmp_keys(pk1,
-                                  d2->intro_point_extend_info[0]->onion_key));
-  test_memeq(d2->intro_point_extend_info[0]->identity_digest,
-             d1->intro_point_extend_info[0]->identity_digest, DIGEST_LEN);
-  test_eq(d2->intro_point_extend_info[1]->addr, 6060842);
-  test_eq(d2->intro_point_extend_info[1]->port, 8000);
-
-  test_memeq(d2->intro_point_extend_info[1]->identity_digest,
-             d1->intro_point_extend_info[1]->identity_digest, DIGEST_LEN);
-
   test_assert(BAD_HOSTNAME == parse_extended_hostname(address1));
   test_assert(BAD_HOSTNAME == parse_extended_hostname(address1));
   test_assert(ONION_HOSTNAME == parse_extended_hostname(address2));
   test_assert(ONION_HOSTNAME == parse_extended_hostname(address2));
   test_assert(EXIT_HOSTNAME == parse_extended_hostname(address3));
   test_assert(EXIT_HOSTNAME == parse_extended_hostname(address3));
   test_assert(NORMAL_HOSTNAME == parse_extended_hostname(address4));
   test_assert(NORMAL_HOSTNAME == parse_extended_hostname(address4));
 
 
-  rend_service_descriptor_free(d1);
-  rend_service_descriptor_free(d2);
   crypto_free_pk_env(pk1);
   crypto_free_pk_env(pk1);
   crypto_free_pk_env(pk2);
   crypto_free_pk_env(pk2);
 }
 }