summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoger Dingledine <arma@torproject.org>2008-02-06 12:39:25 +0000
committerRoger Dingledine <arma@torproject.org>2008-02-06 12:39:25 +0000
commite49d712b8a2a5e7fe75f6f229bc2ab6b175b82e4 (patch)
treeae5d6190e75becf5ceae3e764c943959b96d93cd
parent55971c71b610491aab250bd1240089dd2bf8ed0a (diff)
downloadtor-e49d712b8a2a5e7fe75f6f229bc2ab6b175b82e4.tar.gz
tor-e49d712b8a2a5e7fe75f6f229bc2ab6b175b82e4.zip
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
-rw-r--r--src/or/router.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/src/or/router.c b/src/or/router.c
index a24a6dfe7a..f4a1a9fb8b 100644
--- a/src/or/router.c
+++ b/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 */
}