]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
r16301@catbus: nickm | 2007-10-31 16:43:49 -0400
authorNick Mathewson <nickm@torproject.org>
Wed, 31 Oct 2007 20:48:08 +0000 (20:48 +0000)
committerNick Mathewson <nickm@torproject.org>
Wed, 31 Oct 2007 20:48:08 +0000 (20:48 +0000)
 A couple of small tweaks to karsten's latest patch, and note an issue with using a bitmap to represent a single int.

svn:r12300

src/or/circuitlist.c
src/or/config.c
src/or/or.h
src/or/rendservice.c

index cf544015689fb12866e1a79f88d5c709808facaa..0051d46dffc0e7051201e46ee1742919ffd0d391 100644 (file)
@@ -389,6 +389,8 @@ circuit_free(circuit_t *circ)
     tor_free(ocirc->build_state);
 
     circuit_free_cpath(ocirc->cpath);
+    if (ocirc->intro_key)
+      crypto_free_pk_env(ocirc->intro_key);
 
   } else {
     or_circuit_t *ocirc = TO_OR_CIRCUIT(circ);
index f2e8b7b3d1e5f717bc612686cf1f520034036ccf..b891cda425c4b35cac940c19bb26720dca2f4020 100644 (file)
@@ -192,6 +192,7 @@ static config_var_t _option_vars[] = {
   VAR("HiddenServiceNodes",  LINELIST_S, RendConfigLines,    NULL),
   VAR("HiddenServiceOptions",LINELIST_V, RendConfigLines,    NULL),
   VAR("HiddenServicePort",   LINELIST_S, RendConfigLines,    NULL),
+  /*DOCDOC in tor manpage*/
   VAR("HiddenServiceVersion",LINELIST_S, RendConfigLines,    NULL),
   V(HSAuthoritativeDir,          BOOL,     "0"),
   V(HSAuthorityRecordStats,      BOOL,     "0"),
index f4513d37b3e00688eacfd4046ac3cbe6a7b28693..512f90c32ebc76f144a57ee292bdc71c952c646e 100644 (file)
@@ -1763,12 +1763,6 @@ typedef struct origin_circuit_t {
    */
   crypt_path_t *cpath;
 
-  /** Stores the rendezvous descriptor version if purpose is S_* to
-   * distinguish introduction and rendezvous points belonging to the same
-   * rendezvous service ID, but different descriptor versions.
-   */
-  uint8_t rend_desc_version;
-
   /** The rend_pk_digest field holds a hash of location-hidden service's
    * PK if purpose is S_ESTABLISH_INTRO or S_RENDEZVOUSING.
    */
@@ -1786,6 +1780,14 @@ typedef struct origin_circuit_t {
    */
   char rend_query[REND_SERVICE_ID_LEN+1];
 
+  /** Stores the rendezvous descriptor version if purpose is S_*. Used to
+   * distinguish introduction and rendezvous points belonging to the same
+   * rendezvous service ID, but different descriptor versions.
+   * XXXX020 I believe this is a bitmap, but the doc doesn't say so. If so,
+   *  why?  A circuit can't be using two different rendezvous decriptors. -NM
+   */
+  uint8_t rend_desc_version;
+
   /* The intro key replaces the hidden service's public key if purpose is
    * S_ESTABLISH_INTRO or S_INTRO, provided that no unversioned rendezvous
    * descriptor is used. */
index e9e4a3e1346f281e15e8e1382304f41c9020a619..d1b1932f0dea6e8f36eb7ed6767aa89e4a9f5aeb 100644 (file)
@@ -56,11 +56,14 @@ typedef struct rend_service_t {
   time_t intro_period_started;
   int n_intro_circuits_launched; /**< count of intro circuits we have
                                   * established in this period. */
+  /* DOCDOC undocumented versions */
   rend_service_descriptor_t *desc;
   time_t desc_is_dirty;
   time_t next_upload_time;
+  /* XXXX020 A service never actually has both descriptor versions; perhaps
+   * this should be an int rather than in intmax. */
   int descriptor_versions; /**< bitmask of rendezvous descriptor versions
-                            * that will be published. */
+                            * that will be published. "0" means "default." */
 } rend_service_t;
 
 /** A list of rend_service_t's for services run on this OP.
@@ -454,9 +457,9 @@ rend_service_load_keys(void)
   return 0;
 }
 
-/** Return the service whose public key has a digest of <b>digest</b>
- * and which publishes descriptors of the given <b>versions</b> bitmask.
- * Return NULL if no such service exists.
+/** Return the service whose public key has a digest of <b>digest</b> and
+ * which publishes exactly the descriptor of the given <b>versions</b>
+ * bitmask.  Return NULL if no such service exists.
  */
 static rend_service_t *
 rend_service_get_by_pk_digest_and_version(const char* digest,
@@ -810,7 +813,8 @@ rend_service_launch_establish_intro(rend_service_t *service,
   if (!(service->descriptor_versions & 1)) {
     launched->intro_key = crypto_new_pk_env();
     tor_assert(!crypto_pk_generate_key(launched->intro_key));
-    strmap_set(service->intro_keys, nickname, launched->intro_key);
+    strmap_set(service->intro_keys, nickname,
+               crypto_pk_dup_key(launched->intro_key));
   }
   if (launched->_base.state == CIRCUIT_STATE_OPEN)
     rend_service_intro_has_opened(launched);