diff options
author | Nick Mathewson <nickm@torproject.org> | 2015-08-18 11:36:19 -0400 |
---|---|---|
committer | Nick Mathewson <nickm@torproject.org> | 2015-08-19 13:37:21 -0400 |
commit | 037e8763a7cb6358b4622ebef30bda6e11bb2ce5 (patch) | |
tree | 70a7bf9bf0a940daab31c0d1cfe996bcac4acb24 /src/or/routerkeys.c | |
parent | 428bb2d1c8bf5f10f7f76b9861b9a3ce498e07a7 (diff) | |
download | tor-037e8763a7cb6358b4622ebef30bda6e11bb2ce5.tar.gz tor-037e8763a7cb6358b4622ebef30bda6e11bb2ce5.zip |
Reload Ed25519 keys on sighup.
Closes ticket 16790.
Diffstat (limited to 'src/or/routerkeys.c')
-rw-r--r-- | src/or/routerkeys.c | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/src/or/routerkeys.c b/src/or/routerkeys.c index 80b26e6bf8..ad915479c2 100644 --- a/src/or/routerkeys.c +++ b/src/or/routerkeys.c @@ -635,11 +635,13 @@ load_ed_keys(const or_options_t *options, time_t now) goto err; \ } while (0) #define SET_KEY(key, newval) do { \ - ed25519_keypair_free(key); \ + if ((key) != (newval)) \ + ed25519_keypair_free(key); \ key = (newval); \ } while (0) #define SET_CERT(cert, newval) do { \ - tor_cert_free(cert); \ + if ((cert) != (newval)) \ + tor_cert_free(cert); \ cert = (newval); \ } while (0) #define EXPIRES_SOON(cert, interval) \ @@ -648,10 +650,7 @@ load_ed_keys(const or_options_t *options, time_t now) /* XXXX support encrypted identity keys fully */ /* First try to get the signing key to see how it is. */ - if (master_signing_key) { - check_signing_cert = signing_key_cert; - use_signing = master_signing_key; - } else { + { char *fname = options_get_datadir_fname2(options, "keys", "ed25519_signing"); sign = ed_key_init_from_file( @@ -665,6 +664,11 @@ load_ed_keys(const or_options_t *options, time_t now) use_signing = sign; } + if (!use_signing && master_signing_key) { + check_signing_cert = signing_key_cert; + use_signing = master_signing_key; + } + const int need_new_signing_key = NULL == use_signing || EXPIRES_SOON(check_signing_cert, 0) || |