]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
Hidden service operators had a bug in version 1 style INTRODUCE cells
authorRoger Dingledine <arma@torproject.org>
Mon, 1 Nov 2004 21:46:27 +0000 (21:46 +0000)
committerRoger Dingledine <arma@torproject.org>
Mon, 1 Nov 2004 21:46:27 +0000 (21:46 +0000)
that made them fail. Fix the bug, and revert clients to use version 0
until 0.0.9pre4 is obsolete.

svn:r2641

src/or/or.h
src/or/rendclient.c
src/or/rendservice.c

index cf03e955dc7f308be58f0176137a87410761f6f6..d5c07b89444c2a216db5d41108aa4f7935cb721b 100644 (file)
 #define DEFAULT_BANDWIDTH_OP (1024 * 1000)
 #define MAX_NICKNAME_LEN 19
 /* Hex digest plus dollar sign. */
-#define MAX_HEX_NICKNAME_LEN HEX_DIGEST_LEN+1
+#define MAX_HEX_NICKNAME_LEN (HEX_DIGEST_LEN+1)
 #define MAX_DIR_SIZE 500000
 
 #ifdef TOR_PERF
index f2bbdc089610191d0815d598761bea2538340064..553506a5a71c453e7e63e3e77055ad0d40710822 100644 (file)
@@ -92,11 +92,20 @@ rend_client_send_introduction(circuit_t *introcirc, circuit_t *rendcirc) {
   }
 
   /* write the remaining items into tmp */
+#if 0 /* switch over when 0.0.9pre4 is obsolete */
   tmp[0] = 1; /* version 1 of the cell format */
   strncpy(tmp+1, rendcirc->build_state->chosen_exit_name, (MAX_HEX_NICKNAME_LEN+1)); /* nul pads */
   memcpy(tmp+1+MAX_HEX_NICKNAME_LEN+1, rendcirc->rend_cookie, REND_COOKIE_LEN);
+#else
+  strncpy(tmp, rendcirc->build_state->chosen_exit_name, (MAX_NICKNAME_LEN+1)); /* nul pads */
+  memcpy(tmp+MAX_NICKNAME_LEN+1, rendcirc->rend_cookie, REND_COOKIE_LEN);
+#endif
   if (crypto_dh_get_public(cpath->handshake_state,
+#if 0
                            tmp+1+MAX_HEX_NICKNAME_LEN+1+REND_COOKIE_LEN,
+#else
+                           tmp+MAX_NICKNAME_LEN+1+REND_COOKIE_LEN,
+#endif
                            DH_KEY_LEN)<0) {
     log_fn(LOG_WARN, "Couldn't extract g^x");
     goto err;
@@ -105,7 +114,11 @@ rend_client_send_introduction(circuit_t *introcirc, circuit_t *rendcirc) {
   /*XXX maybe give crypto_pk_public_hybrid_encrypt a max_len arg,
    * to avoid buffer overflows? */
   r = crypto_pk_public_hybrid_encrypt(entry->parsed->pk, tmp,
+#if 0
                            1+MAX_HEX_NICKNAME_LEN+1+REND_COOKIE_LEN+DH_KEY_LEN,
+#else
+                           MAX_NICKNAME_LEN+1+REND_COOKIE_LEN+DH_KEY_LEN,
+#endif
                                       payload+DIGEST_LEN,
                                       PK_PKCS1_OAEP_PADDING, 0);
   if (r<0) {
index e9b1d3ed7cb7c919367f9588e61883212d39b046..b1c4717d8c6631e25a7be298004e8172219e46ec 100644 (file)
@@ -418,8 +418,7 @@ rend_service_introduce(circuit_t *circuit, const char *request, size_t request_l
     return -1;
   }
   if ((version == 0 && !is_legal_nickname(rp_nickname)) ||
-      (version == 1 && !is_legal_nickname_or_hexdigest(rp_nickname)) ||
-      (int)strspn(buf,LEGAL_NICKNAME_CHARACTERS) != ptr-buf) {
+      (version == 1 && !is_legal_nickname_or_hexdigest(rp_nickname))) {
     log_fn(LOG_WARN, "Bad nickname in INTRODUCE2 cell.");
     return -1;
   }