From b00d17aa9e312e37fa05a4e3f05fedb28b67155d Mon Sep 17 00:00:00 2001 From: rl1987 Date: Thu, 3 May 2018 17:07:29 +0200 Subject: [PATCH 1/5] Improve GETCONF exit-policy/* error handling This will yield different error codes for transient and permament errors. Furthermore, Tor will give human readable error messages to controller. --- src/or/policies.c | 23 ++++++----- src/or/router.c | 88 +++++++++++++++++++++++++++++++++++++++--- src/or/router.h | 11 ++++++ src/test/test_policy.c | 66 +++++++++++++++++++++++++++++-- 4 files changed, 169 insertions(+), 19 deletions(-) diff --git a/src/or/policies.c b/src/or/policies.c index e0dbb021c..15176a97e 100644 --- a/src/or/policies.c +++ b/src/or/policies.c @@ -2999,11 +2999,13 @@ getinfo_helper_policies(control_connection_t *conn, smartlist_free(private_policy_strings); } else if (!strcmp(question, "exit-policy/reject-private/relay")) { const or_options_t *options = get_options(); - const routerinfo_t *me = router_get_my_routerinfo(); + const routerinfo_t *me = NULL; + + int err = router_get_my_routerinfo_with_err((routerinfo_t **)&me); if (!me) { - *errmsg = "router_get_my_routerinfo returned NULL"; - return -1; + *errmsg = routerinfo_errno_to_string(err); + return routerinfo_err_is_transient(err) ? -1 : 0; } if (!options->ExitPolicyRejectPrivate && @@ -3038,11 +3040,12 @@ getinfo_helper_policies(control_connection_t *conn, SMARTLIST_FOREACH(configured_addresses, tor_addr_t *, a, tor_free(a)); smartlist_free(configured_addresses); } else if (!strcmpstart(question, "exit-policy/")) { - const routerinfo_t *me = router_get_my_routerinfo(); - int include_ipv4 = 0; int include_ipv6 = 0; + const routerinfo_t *me = NULL; + int err = router_get_my_routerinfo_with_err((routerinfo_t **)&me); + if (!strcmp(question, "exit-policy/ipv4")) { include_ipv4 = 1; } else if (!strcmp(question, "exit-policy/ipv6")) { @@ -3054,12 +3057,14 @@ getinfo_helper_policies(control_connection_t *conn, } if (!me) { - *errmsg = "router_get_my_routerinfo returned NULL"; - return -1; + *errmsg = routerinfo_errno_to_string(err); + return routerinfo_err_is_transient(err) ? -1 : 0; + } else { + *answer = router_dump_exit_policy_to_string(me,include_ipv4, + include_ipv6); } - - *answer = router_dump_exit_policy_to_string(me,include_ipv4,include_ipv6); } + return 0; } diff --git a/src/or/router.c b/src/or/router.c index 996a28a91..612e23b3a 100644 --- a/src/or/router.c +++ b/src/or/router.c @@ -114,6 +114,56 @@ const char *format_node_description(char *buf, const tor_addr_t *addr, uint32_t addr32h); +/** Return a readonly string with human readable description + * of err. + */ +const char * +routerinfo_errno_to_string(int err) +{ + switch (err) { + case TOR_ROUTERINFO_ERROR_NO_EXT_ADDR: + return "No known exit address yet"; + case TOR_ROUTERINFO_ERROR_CANNOT_PARSE: + return "Cannot parse descriptor"; + case TOR_ROUTERINFO_ERROR_NOT_A_SERVER: + return "Not running in server mode"; + case TOR_ROUTERINFO_ERROR_DIGEST_FAILED: + return "Key digest failed"; + case TOR_ROUTERINFO_ERROR_CANNOT_GENERATE: + return "Cannot generate descriptor"; + case TOR_ROUTERINFO_ERROR_NOT_SO_FAST: + return "Too soon; not ready yet"; + } + + log_warn(LD_BUG, "unknown errno %d", err); + + return "Unknown error"; +} + +/** Return true if we expect given error to be transient. + * Return false otherwise. + */ +int +routerinfo_err_is_transient(int err) +{ + switch (err) { + case TOR_ROUTERINFO_ERROR_NO_EXT_ADDR: + return 1; + case TOR_ROUTERINFO_ERROR_CANNOT_PARSE: + return 1; + case TOR_ROUTERINFO_ERROR_NOT_A_SERVER: + return 0; + case TOR_ROUTERINFO_ERROR_DIGEST_FAILED: + return 0; // XXX: bug? + case TOR_ROUTERINFO_ERROR_CANNOT_GENERATE: + return 1; + case TOR_ROUTERINFO_ERROR_NOT_SO_FAST: + return 1; + } + + return 0; +} + /** Replace the current onion key with k. Does not affect * lastonionkey; to update lastonionkey correctly, call rotate_onion_key(). */ @@ -2023,6 +2073,30 @@ router_get_my_routerinfo,(void)) return desc_routerinfo; } +/** Set ri to routerinfo of this OR. Rebuild it from + * scratch if needed. Return 0 on success or an appropriate + * TOR_ROUTERINFO_ERROR_* value on failure. + */ +MOCK_IMPL(int, +router_get_my_routerinfo_with_err,(routerinfo_t **ri)) +{ + if (!server_mode(get_options())) + return TOR_ROUTERINFO_ERROR_NOT_A_SERVER; + + if (!desc_clean_since) { + int err = router_rebuild_descriptor(0); + if (err < 0) + return err; + } + + if (!desc_routerinfo) + return TOR_ROUTERINFO_ERROR_NOT_SO_FAST; + + if (ri) + *ri = desc_routerinfo; + return 0; +} + /** OR only: Return a signed server descriptor for this OR, rebuilding a fresh * one if necessary. Return NULL on error. */ @@ -2196,7 +2270,7 @@ router_build_fresh_descriptor(routerinfo_t **r, extrainfo_t **e) if (router_pick_published_address(options, &addr, 0) < 0) { log_warn(LD_CONFIG, "Don't know my address while generating descriptor"); - return -1; + return TOR_ROUTERINFO_ERROR_NO_EXT_ADDR; } /* Log a message if the address in the descriptor doesn't match the ORPort @@ -2252,7 +2326,7 @@ router_build_fresh_descriptor(routerinfo_t **r, extrainfo_t **e) if (crypto_pk_get_digest(ri->identity_pkey, ri->cache_info.identity_digest)<0) { routerinfo_free(ri); - return -1; + return TOR_ROUTERINFO_ERROR_DIGEST_FAILED; } ri->cache_info.signing_key_cert = tor_cert_dup(get_master_signing_key_cert()); @@ -2385,7 +2459,7 @@ router_build_fresh_descriptor(routerinfo_t **r, extrainfo_t **e) log_warn(LD_BUG, "Couldn't generate router descriptor."); routerinfo_free(ri); extrainfo_free(ei); - return -1; + return TOR_ROUTERINFO_ERROR_CANNOT_GENERATE; } ri->cache_info.signed_descriptor_len = strlen(ri->cache_info.signed_descriptor_body); @@ -2428,6 +2502,7 @@ router_build_fresh_descriptor(routerinfo_t **r, extrainfo_t **e) int router_rebuild_descriptor(int force) { + int err = 0; routerinfo_t *ri; extrainfo_t *ei; uint32_t addr; @@ -2442,13 +2517,14 @@ router_rebuild_descriptor(int force) * learn that it's time to try again when ip_address_changed() * marks it dirty. */ desc_clean_since = time(NULL); - return -1; + return TOR_ROUTERINFO_ERROR_NOT_SO_FAST; } log_info(LD_OR, "Rebuilding relay descriptor%s", force ? " (forced)" : ""); - if (router_build_fresh_descriptor(&ri, &ei) < 0) { - return -1; + err = router_build_fresh_descriptor(&ri, &ei); + if (err < 0) { + return err; } routerinfo_free(desc_routerinfo); diff --git a/src/or/router.h b/src/or/router.h index 03eca9c65..bf0267b77 100644 --- a/src/or/router.h +++ b/src/or/router.h @@ -14,6 +14,13 @@ #include "testsupport.h" +#define TOR_ROUTERINFO_ERROR_NO_EXT_ADDR (-1) +#define TOR_ROUTERINFO_ERROR_CANNOT_PARSE (-2) +#define TOR_ROUTERINFO_ERROR_NOT_A_SERVER (-3) +#define TOR_ROUTERINFO_ERROR_DIGEST_FAILED (-4) +#define TOR_ROUTERINFO_ERROR_CANNOT_GENERATE (-5) +#define TOR_ROUTERINFO_ERROR_NOT_SO_FAST (-6) + crypto_pk_t *get_onion_key(void); time_t get_onion_key_set_at(void); void set_server_identity_key(crypto_pk_t *k); @@ -85,6 +92,7 @@ void router_new_address_suggestion(const char *suggestion, int router_compare_to_my_exit_policy(const tor_addr_t *addr, uint16_t port); MOCK_DECL(int, router_my_exit_policy_is_reject_star,(void)); MOCK_DECL(const routerinfo_t *, router_get_my_routerinfo, (void)); +MOCK_DECL(int, router_get_my_routerinfo_with_err,(routerinfo_t **ri)); extrainfo_t *router_get_my_extrainfo(void); const char *router_get_my_descriptor(void); const char *router_get_descriptor_gen_reason(void); @@ -127,6 +135,9 @@ const char *node_describe(const node_t *node); const char *routerstatus_describe(const routerstatus_t *ri); const char *extend_info_describe(const extend_info_t *ei); +const char *routerinfo_errno_to_string(int err); +int routerinfo_err_is_transient(int err); + void router_get_verbose_nickname(char *buf, const routerinfo_t *router); void router_reset_warnings(void); void router_reset_reachability(void); diff --git a/src/test/test_policy.c b/src/test/test_policy.c index f18058586..aeddc1417 100644 --- a/src/test/test_policy.c +++ b/src/test/test_policy.c @@ -1496,10 +1496,18 @@ test_dump_exit_policy_to_string(void *arg) } static routerinfo_t *mock_desc_routerinfo = NULL; -static const routerinfo_t * -mock_router_get_my_routerinfo(void) +static int routerinfo_err; + +static int +mock_router_get_my_routerinfo_with_err(routerinfo_t **ri) { - return mock_desc_routerinfo; + if (routerinfo_err) + return routerinfo_err; + + if (ri) + *ri = mock_desc_routerinfo; + + return 0; } #define DEFAULT_POLICY_STRING "reject *:*" @@ -1541,7 +1549,8 @@ test_policies_getinfo_helper_policies(void *arg) tor_free(answer); memset(&mock_my_routerinfo, 0, sizeof(routerinfo_t)); - MOCK(router_get_my_routerinfo, mock_router_get_my_routerinfo); + MOCK(router_get_my_routerinfo_with_err, + mock_router_get_my_routerinfo_with_err); mock_my_routerinfo.exit_policy = smartlist_new(); mock_desc_routerinfo = &mock_my_routerinfo; @@ -1658,6 +1667,55 @@ test_policies_getinfo_helper_policies(void *arg) tt_assert(strlen(answer) == ipv4_len + ipv6_len + 1); tor_free(answer); + routerinfo_err = TOR_ROUTERINFO_ERROR_NO_EXT_ADDR; + rv = getinfo_helper_policies(NULL, "exit-policy/full", &answer, + &errmsg); + tt_int_op(rv, OP_EQ, -1); + tt_ptr_op(answer, OP_EQ, NULL); + tt_ptr_op(errmsg, OP_NE, NULL); + tt_str_op(errmsg, OP_EQ, "No known exit address yet"); + + routerinfo_err = TOR_ROUTERINFO_ERROR_CANNOT_PARSE; + rv = getinfo_helper_policies(NULL, "exit-policy/full", &answer, + &errmsg); + tt_int_op(rv, OP_EQ, -1); + tt_ptr_op(answer, OP_EQ, NULL); + tt_ptr_op(errmsg, OP_NE, NULL); + tt_str_op(errmsg, OP_EQ, "Cannot parse descriptor"); + + routerinfo_err = TOR_ROUTERINFO_ERROR_NOT_A_SERVER; + rv = getinfo_helper_policies(NULL, "exit-policy/full", &answer, + &errmsg); + tt_int_op(rv, OP_EQ, 0); + tt_ptr_op(answer, OP_EQ, NULL); + tt_ptr_op(errmsg, OP_NE, NULL); + tt_str_op(errmsg, OP_EQ, "Not running in server mode"); + + routerinfo_err = TOR_ROUTERINFO_ERROR_DIGEST_FAILED; + rv = getinfo_helper_policies(NULL, "exit-policy/full", &answer, + &errmsg); + + tt_int_op(rv, OP_EQ, 0); + tt_ptr_op(answer, OP_EQ, NULL); + tt_ptr_op(errmsg, OP_NE, NULL); + tt_str_op(errmsg, OP_EQ, "Key digest failed"); + + routerinfo_err = TOR_ROUTERINFO_ERROR_CANNOT_GENERATE; + rv = getinfo_helper_policies(NULL, "exit-policy/full", &answer, + &errmsg); + tt_int_op(rv, OP_EQ, -1); + tt_ptr_op(answer, OP_EQ, NULL); + tt_ptr_op(errmsg, OP_NE, NULL); + tt_str_op(errmsg, OP_EQ, "Cannot generate descriptor"); + + routerinfo_err = TOR_ROUTERINFO_ERROR_NOT_SO_FAST; + rv = getinfo_helper_policies(NULL, "exit-policy/full", &answer, + &errmsg); + tt_int_op(rv, OP_EQ, -1); + tt_ptr_op(answer, OP_EQ, NULL); + tt_ptr_op(errmsg, OP_NE, NULL); + tt_str_op(errmsg, OP_EQ, "Too soon; not ready yet"); + done: tor_free(answer); UNMOCK(get_options); From b8ed6e2ac6226c9cf43d28533c7f7eb3315be150 Mon Sep 17 00:00:00 2001 From: rl1987 Date: Sat, 5 May 2018 16:10:50 +0200 Subject: [PATCH 2/5] Changes file for #25852 --- changes/bug25852 | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 changes/bug25852 diff --git a/changes/bug25852 b/changes/bug25852 new file mode 100644 index 000000000..8b1563841 --- /dev/null +++ b/changes/bug25852 @@ -0,0 +1,5 @@ + o Minor bugfixes (control interface): + - Respond with more human readable error messages to GETINFO + exit-policy/* requests. Also, let controller know if error + is transient (response code 551) or not (response code 552). + Fixes bug 25852; bugfix on 0.2.8.1-alpha. From 36f7d0a940bbe8695d5343fccc1a0560a529883a Mon Sep 17 00:00:00 2001 From: rl1987 Date: Thu, 10 May 2018 16:13:16 +0300 Subject: [PATCH 3/5] Make _with_err return routerinfo, like old function does --- src/or/policies.c | 23 +++++++++++---------- src/or/router.c | 45 +++++++++++++++++++++++++++--------------- src/or/router.h | 2 +- src/test/test_policy.c | 18 ++++++++++------- 4 files changed, 52 insertions(+), 36 deletions(-) diff --git a/src/or/policies.c b/src/or/policies.c index 15176a97e..4d47985ec 100644 --- a/src/or/policies.c +++ b/src/or/policies.c @@ -2999,9 +2999,8 @@ getinfo_helper_policies(control_connection_t *conn, smartlist_free(private_policy_strings); } else if (!strcmp(question, "exit-policy/reject-private/relay")) { const or_options_t *options = get_options(); - const routerinfo_t *me = NULL; - - int err = router_get_my_routerinfo_with_err((routerinfo_t **)&me); + int err = 0; + const routerinfo_t *me = router_get_my_routerinfo_with_err(&err); if (!me) { *errmsg = routerinfo_errno_to_string(err); @@ -3043,8 +3042,13 @@ getinfo_helper_policies(control_connection_t *conn, int include_ipv4 = 0; int include_ipv6 = 0; - const routerinfo_t *me = NULL; - int err = router_get_my_routerinfo_with_err((routerinfo_t **)&me); + int err = 0; + const routerinfo_t *me = router_get_my_routerinfo_with_err(&err); + + if (!me) { + *errmsg = routerinfo_errno_to_string(err); + return routerinfo_err_is_transient(err) ? -1 : 0; + } if (!strcmp(question, "exit-policy/ipv4")) { include_ipv4 = 1; @@ -3056,13 +3060,8 @@ getinfo_helper_policies(control_connection_t *conn, return 0; /* No such key. */ } - if (!me) { - *errmsg = routerinfo_errno_to_string(err); - return routerinfo_err_is_transient(err) ? -1 : 0; - } else { - *answer = router_dump_exit_policy_to_string(me,include_ipv4, - include_ipv6); - } + *answer = router_dump_exit_policy_to_string(me,include_ipv4, + include_ipv6); } return 0; diff --git a/src/or/router.c b/src/or/router.c index 612e23b3a..7bf40d69d 100644 --- a/src/or/router.c +++ b/src/or/router.c @@ -2073,28 +2073,41 @@ router_get_my_routerinfo,(void)) return desc_routerinfo; } -/** Set ri to routerinfo of this OR. Rebuild it from - * scratch if needed. Return 0 on success or an appropriate - * TOR_ROUTERINFO_ERROR_* value on failure. +/** Return routerinfo of this OR. Rebuild it from + * scratch if needed. Set *err to 0 on success or to + * appropriate TOR_ROUTERINFO_ERROR_* value on failure. */ -MOCK_IMPL(int, -router_get_my_routerinfo_with_err,(routerinfo_t **ri)) +MOCK_IMPL(const routerinfo_t *, +router_get_my_routerinfo_with_err,(int *err)) { - if (!server_mode(get_options())) - return TOR_ROUTERINFO_ERROR_NOT_A_SERVER; + if (!server_mode(get_options())) { + if (err) + *err = TOR_ROUTERINFO_ERROR_NOT_A_SERVER; - if (!desc_clean_since) { - int err = router_rebuild_descriptor(0); - if (err < 0) - return err; + return NULL; } - if (!desc_routerinfo) - return TOR_ROUTERINFO_ERROR_NOT_SO_FAST; + if (!desc_clean_since) { + int rebuild_err = router_rebuild_descriptor(0); + if (rebuild_err < 0) { + if (err) + *err = rebuild_err; - if (ri) - *ri = desc_routerinfo; - return 0; + return NULL; + } + } + + if (!desc_routerinfo) { + if (err) + *err = TOR_ROUTERINFO_ERROR_NOT_SO_FAST; + + return NULL; + } + + if (err) + *err = 0; + + return desc_routerinfo; } /** OR only: Return a signed server descriptor for this OR, rebuilding a fresh diff --git a/src/or/router.h b/src/or/router.h index bf0267b77..561802c2c 100644 --- a/src/or/router.h +++ b/src/or/router.h @@ -92,7 +92,7 @@ void router_new_address_suggestion(const char *suggestion, int router_compare_to_my_exit_policy(const tor_addr_t *addr, uint16_t port); MOCK_DECL(int, router_my_exit_policy_is_reject_star,(void)); MOCK_DECL(const routerinfo_t *, router_get_my_routerinfo, (void)); -MOCK_DECL(int, router_get_my_routerinfo_with_err,(routerinfo_t **ri)); +MOCK_DECL(const routerinfo_t *, router_get_my_routerinfo_with_err,(int *err)); extrainfo_t *router_get_my_extrainfo(void); const char *router_get_my_descriptor(void); const char *router_get_descriptor_gen_reason(void); diff --git a/src/test/test_policy.c b/src/test/test_policy.c index aeddc1417..6ae57be8c 100644 --- a/src/test/test_policy.c +++ b/src/test/test_policy.c @@ -1498,16 +1498,20 @@ test_dump_exit_policy_to_string(void *arg) static routerinfo_t *mock_desc_routerinfo = NULL; static int routerinfo_err; -static int -mock_router_get_my_routerinfo_with_err(routerinfo_t **ri) +static const routerinfo_t * +mock_router_get_my_routerinfo_with_err(int *err) { - if (routerinfo_err) - return routerinfo_err; + if (routerinfo_err) { + if (err) + *err = routerinfo_err; - if (ri) - *ri = mock_desc_routerinfo; + return NULL; + } - return 0; + if (err) + *err = 0; + + return mock_desc_routerinfo; } #define DEFAULT_POLICY_STRING "reject *:*" From 8ad97b7dcf143fc488422f9866613fea3d900119 Mon Sep 17 00:00:00 2001 From: rl1987 Date: Thu, 10 May 2018 16:33:08 +0300 Subject: [PATCH 4/5] Avoid confusion with errno from libc --- src/or/policies.c | 4 ++-- src/or/router.c | 2 +- src/or/router.h | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/or/policies.c b/src/or/policies.c index 4d47985ec..1210ca687 100644 --- a/src/or/policies.c +++ b/src/or/policies.c @@ -3003,7 +3003,7 @@ getinfo_helper_policies(control_connection_t *conn, const routerinfo_t *me = router_get_my_routerinfo_with_err(&err); if (!me) { - *errmsg = routerinfo_errno_to_string(err); + *errmsg = routerinfo_err_to_string(err); return routerinfo_err_is_transient(err) ? -1 : 0; } @@ -3046,7 +3046,7 @@ getinfo_helper_policies(control_connection_t *conn, const routerinfo_t *me = router_get_my_routerinfo_with_err(&err); if (!me) { - *errmsg = routerinfo_errno_to_string(err); + *errmsg = routerinfo_err_to_string(err); return routerinfo_err_is_transient(err) ? -1 : 0; } diff --git a/src/or/router.c b/src/or/router.c index 7bf40d69d..f88ba3746 100644 --- a/src/or/router.c +++ b/src/or/router.c @@ -118,7 +118,7 @@ const char *format_node_description(char *buf, * of err. */ const char * -routerinfo_errno_to_string(int err) +routerinfo_err_to_string(int err) { switch (err) { case TOR_ROUTERINFO_ERROR_NO_EXT_ADDR: diff --git a/src/or/router.h b/src/or/router.h index 561802c2c..9befffae5 100644 --- a/src/or/router.h +++ b/src/or/router.h @@ -135,7 +135,7 @@ const char *node_describe(const node_t *node); const char *routerstatus_describe(const routerstatus_t *ri); const char *extend_info_describe(const extend_info_t *ei); -const char *routerinfo_errno_to_string(int err); +const char *routerinfo_err_to_string(int err); int routerinfo_err_is_transient(int err); void router_get_verbose_nickname(char *buf, const routerinfo_t *router); From 036df13a03f6345913fbe5e7806fd00312d41c4d Mon Sep 17 00:00:00 2001 From: rl1987 Date: Thu, 10 May 2018 16:45:57 +0300 Subject: [PATCH 5/5] Tweak error handling for #25852 --- src/or/router.c | 13 +++++++------ src/or/router.h | 2 +- src/test/test_policy.c | 4 ++-- 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/src/or/router.c b/src/or/router.c index f88ba3746..91def4b75 100644 --- a/src/or/router.c +++ b/src/or/router.c @@ -131,11 +131,12 @@ routerinfo_err_to_string(int err) return "Key digest failed"; case TOR_ROUTERINFO_ERROR_CANNOT_GENERATE: return "Cannot generate descriptor"; - case TOR_ROUTERINFO_ERROR_NOT_SO_FAST: - return "Too soon; not ready yet"; + case TOR_ROUTERINFO_ERROR_DESC_REBUILDING: + return "Descriptor still rebuilding - not ready yet"; } - log_warn(LD_BUG, "unknown errno %d", err); + log_warn(LD_BUG, "unknown routerinfo error %d - shouldn't happen", err); + tor_assert_unreached(); return "Unknown error"; } @@ -157,7 +158,7 @@ routerinfo_err_is_transient(int err) return 0; // XXX: bug? case TOR_ROUTERINFO_ERROR_CANNOT_GENERATE: return 1; - case TOR_ROUTERINFO_ERROR_NOT_SO_FAST: + case TOR_ROUTERINFO_ERROR_DESC_REBUILDING: return 1; } @@ -2099,7 +2100,7 @@ router_get_my_routerinfo_with_err,(int *err)) if (!desc_routerinfo) { if (err) - *err = TOR_ROUTERINFO_ERROR_NOT_SO_FAST; + *err = TOR_ROUTERINFO_ERROR_DESC_REBUILDING; return NULL; } @@ -2530,7 +2531,7 @@ router_rebuild_descriptor(int force) * learn that it's time to try again when ip_address_changed() * marks it dirty. */ desc_clean_since = time(NULL); - return TOR_ROUTERINFO_ERROR_NOT_SO_FAST; + return TOR_ROUTERINFO_ERROR_DESC_REBUILDING; } log_info(LD_OR, "Rebuilding relay descriptor%s", force ? " (forced)" : ""); diff --git a/src/or/router.h b/src/or/router.h index 9befffae5..b34f75e22 100644 --- a/src/or/router.h +++ b/src/or/router.h @@ -19,7 +19,7 @@ #define TOR_ROUTERINFO_ERROR_NOT_A_SERVER (-3) #define TOR_ROUTERINFO_ERROR_DIGEST_FAILED (-4) #define TOR_ROUTERINFO_ERROR_CANNOT_GENERATE (-5) -#define TOR_ROUTERINFO_ERROR_NOT_SO_FAST (-6) +#define TOR_ROUTERINFO_ERROR_DESC_REBUILDING (-6) crypto_pk_t *get_onion_key(void); time_t get_onion_key_set_at(void); diff --git a/src/test/test_policy.c b/src/test/test_policy.c index 6ae57be8c..e89d49aaf 100644 --- a/src/test/test_policy.c +++ b/src/test/test_policy.c @@ -1712,13 +1712,13 @@ test_policies_getinfo_helper_policies(void *arg) tt_ptr_op(errmsg, OP_NE, NULL); tt_str_op(errmsg, OP_EQ, "Cannot generate descriptor"); - routerinfo_err = TOR_ROUTERINFO_ERROR_NOT_SO_FAST; + routerinfo_err = TOR_ROUTERINFO_ERROR_DESC_REBUILDING; rv = getinfo_helper_policies(NULL, "exit-policy/full", &answer, &errmsg); tt_int_op(rv, OP_EQ, -1); tt_ptr_op(answer, OP_EQ, NULL); tt_ptr_op(errmsg, OP_NE, NULL); - tt_str_op(errmsg, OP_EQ, "Too soon; not ready yet"); + tt_str_op(errmsg, OP_EQ, "Descriptor still rebuilding - not ready yet"); done: tor_free(answer);