浏览代码

if i'm a v3 authority, tell myself about my cert when i startup.
otherwise i'll keep asking other authorities for it, which probably
isn't the best way to get it. this made bootstrapping a new network
very hard.


svn:r13400

Roger Dingledine 16 年之前
父节点
当前提交
e49d712b8a
共有 1 个文件被更改,包括 12 次插入1 次删除
  1. 12 1
      src/or/router.c

+ 12 - 1
src/or/router.c

@@ -387,6 +387,7 @@ init_keys(void)
   time_t now = time(NULL);
   trusted_dir_server_t *ds;
   int v3_digest_set = 0;
+  authority_cert_t *cert = NULL;
 
   if (!key_lock)
     key_lock = tor_mutex_new();
@@ -431,7 +432,8 @@ init_keys(void)
               "Use tor-gencert to generate them. Dying.");
       return -1;
     }
-    if (get_my_v3_authority_cert()) {
+    cert = get_my_v3_authority_cert();
+    if (cert) {
       crypto_pk_get_digest(get_my_v3_authority_cert()->identity_key,
                            v3_digest);
       v3_digest_set = 1;
@@ -585,6 +587,15 @@ init_keys(void)
     memcpy(ds->v3_identity_digest, v3_digest, DIGEST_LEN);
   }
 
+  if (cert) { /* add my own cert to the list of known certs */
+    log_info(LD_DIR, "adding my own v3 cert");
+    if (trusted_dirs_load_certs_from_string(
+          cert->cache_info.signed_descriptor_body, 0)<0) {
+      log_warn(LD_DIR, "Unable to parse my own v3 cert! Failing.");
+      return -1;
+    }
+  }
+
   return 0; /* success */
 }