Loading ChangeLog +3 −0 Original line number Diff line number Diff line Loading @@ -23,6 +23,9 @@ Changes in version 0.2.0.9-alpha - 2007-10-?? that it shouldn't be considered to exist at all anymore. Now we clear all the flags for routers that fall out of the networkstatus consensus. Fixes bug 529. - Fix awful behavior in DownloadExtraInfo option where we'd fetch extrainfo documents and then discard them immediately for not matching the latest router. o Minor features (v3 directory protocol): - Allow tor-gencert to generate a new certificate without replacing the Loading src/or/dirserv.c +1 −1 Original line number Diff line number Diff line Loading @@ -701,7 +701,7 @@ dirserv_add_extrainfo(extrainfo_t *ei, const char **msg) extrainfo_free(ei); return -1; } if ((r = routerinfo_incompatible_with_extrainfo(ri, ei, msg))) { if ((r = routerinfo_incompatible_with_extrainfo(ri, ei, NULL, msg))) { extrainfo_free(ei); return r < 0 ? 0 : -1; } Loading src/or/or.h +2 −1 Original line number Diff line number Diff line Loading @@ -3612,7 +3612,7 @@ void routerlist_reset_warnings(void); void router_set_status(const char *digest, int up); int router_add_to_routerlist(routerinfo_t *router, const char **msg, int from_cache, int from_fetch); void router_add_extrainfo_to_routerlist(extrainfo_t *ei, const char **msg, int router_add_extrainfo_to_routerlist(extrainfo_t *ei, const char **msg, int from_cache, int from_fetch); void routerlist_remove_old_routers(void); int router_load_single_router(const char *s, uint8_t purpose, int cache, Loading Loading @@ -3643,6 +3643,7 @@ void router_dir_info_changed(void); void router_reset_descriptor_download_failures(void); int router_differences_are_cosmetic(routerinfo_t *r1, routerinfo_t *r2); int routerinfo_incompatible_with_extrainfo(routerinfo_t *ri, extrainfo_t *ei, signed_descriptor_t *sd, const char **msg); void routerlist_assert_ok(routerlist_t *rl); const char *esc_router_info(routerinfo_t *router); Loading src/or/router.c +1 −1 Original line number Diff line number Diff line Loading @@ -1305,7 +1305,7 @@ router_rebuild_descriptor(int force) router_get_router_hash(ri->cache_info.signed_descriptor_body, ri->cache_info.signed_descriptor_digest); tor_assert(! routerinfo_incompatible_with_extrainfo(ri, ei, NULL)); tor_assert(! routerinfo_incompatible_with_extrainfo(ri, ei, NULL, NULL)); if (desc_routerinfo) routerinfo_free(desc_routerinfo); Loading src/or/routerlist.c +23 −19 Original line number Diff line number Diff line Loading @@ -2205,7 +2205,8 @@ extrainfo_insert(routerlist_t *rl, extrainfo_t *ei) int r = 0; routerinfo_t *ri = rimap_get(rl->identity_map, ei->cache_info.identity_digest); signed_descriptor_t *sd; signed_descriptor_t *sd = sdmap_get(rl->desc_by_eid_map, ei->cache_info.signed_descriptor_digest); extrainfo_t *ei_tmp; { Loading @@ -2218,15 +2219,7 @@ extrainfo_insert(routerlist_t *rl, extrainfo_t *ei) /* This router is unknown; we can't even verify the signature. Give up.*/ goto done; } if (routerinfo_incompatible_with_extrainfo(ri, ei, NULL)) { if (ei->bad_sig) /* If the signature didn't check, it's just wrong. */ goto done; sd = sdmap_get(rl->desc_by_eid_map, ei->cache_info.signed_descriptor_digest); if (!sd || memcmp(sd->identity_digest, ei->cache_info.identity_digest, DIGEST_LEN) || sd->published_on != ei->cache_info.published_on) if (routerinfo_incompatible_with_extrainfo(ri, ei, sd, NULL)) { goto done; } Loading Loading @@ -2740,8 +2733,10 @@ router_add_to_routerlist(routerinfo_t *router, const char **msg, } /** Insert <b>ei</b> into the routerlist, or free it. Other arguments are * as for router_add_to_routerlist(). */ void * as for router_add_to_routerlist(). * DOCDOC Inserted */ int router_add_extrainfo_to_routerlist(extrainfo_t *ei, const char **msg, int from_cache, int from_fetch) { Loading @@ -2754,6 +2749,8 @@ router_add_extrainfo_to_routerlist(extrainfo_t *ei, const char **msg, if (inserted && !from_cache) signed_desc_append_to_journal(&ei->cache_info, &routerlist->extrainfo_store); return inserted; } /** Sorting helper: return <0, 0, or >0 depending on whether the Loading Loading @@ -3174,7 +3171,9 @@ router_load_extrainfo_from_string(const char *s, const char *eos, log_info(LD_DIR, "%d elements to add", smartlist_len(extrainfo_list)); SMARTLIST_FOREACH(extrainfo_list, extrainfo_t *, ei, { if (requested_fingerprints) { int added = router_add_extrainfo_to_routerlist(ei, &msg, from_cache, !from_cache); if (added && requested_fingerprints) { char fp[HEX_DIGEST_LEN+1]; base16_encode(fp, sizeof(fp), descriptor_digests ? ei->cache_info.signed_descriptor_digest : Loading @@ -3184,7 +3183,6 @@ router_load_extrainfo_from_string(const char *s, const char *eos, /* XXX020 We silently let people stuff us with extrainfos we * didn't ask for. Is this a problem? -RD */ } router_add_extrainfo_to_routerlist(ei, &msg, from_cache, !from_cache); }); routerlist_assert_ok(routerlist); Loading Loading @@ -4042,13 +4040,19 @@ router_differences_are_cosmetic(routerinfo_t *r1, routerinfo_t *r2) * dropped. Return 0 for "compatible", return 1 for "reject, and inform * whoever uploaded <b>ei</b>, and return -1 for "reject silently.". If * <b>msg</b> is present, set *<b>msg</b> to a description of the * incompatibility (if any). */ * incompatibility (if any) * * DOCDOC sd. **/ int routerinfo_incompatible_with_extrainfo(routerinfo_t *ri, extrainfo_t *ei, signed_descriptor_t *sd, const char **msg) { tor_assert(ri); tor_assert(ei); if (!sd) sd = &ri->cache_info; if (ei->bad_sig) { if (msg) *msg = "Extrainfo signature was bad, or signed with wrong key."; Loading Loading @@ -4079,16 +4083,16 @@ routerinfo_incompatible_with_extrainfo(routerinfo_t *ri, extrainfo_t *ei, tor_free(ei->pending_sig); } if (ei->cache_info.published_on < ri->cache_info.published_on) { if (ei->cache_info.published_on < sd->published_on) { if (msg) *msg = "Extrainfo published time did not match routerdesc"; return 1; } else if (ei->cache_info.published_on > ri->cache_info.published_on) { } else if (ei->cache_info.published_on > sd->published_on) { if (msg) *msg = "Extrainfo published time did not match routerdesc"; return -1; } if (memcmp(ei->cache_info.signed_descriptor_digest, ri->cache_info.extra_info_digest, DIGEST_LEN)) { sd->extra_info_digest, DIGEST_LEN)) { if (msg) *msg = "Extrainfo digest did not match value from routerdesc"; return 1; /* Digest doesn't match declared value. */ } Loading Loading
ChangeLog +3 −0 Original line number Diff line number Diff line Loading @@ -23,6 +23,9 @@ Changes in version 0.2.0.9-alpha - 2007-10-?? that it shouldn't be considered to exist at all anymore. Now we clear all the flags for routers that fall out of the networkstatus consensus. Fixes bug 529. - Fix awful behavior in DownloadExtraInfo option where we'd fetch extrainfo documents and then discard them immediately for not matching the latest router. o Minor features (v3 directory protocol): - Allow tor-gencert to generate a new certificate without replacing the Loading
src/or/dirserv.c +1 −1 Original line number Diff line number Diff line Loading @@ -701,7 +701,7 @@ dirserv_add_extrainfo(extrainfo_t *ei, const char **msg) extrainfo_free(ei); return -1; } if ((r = routerinfo_incompatible_with_extrainfo(ri, ei, msg))) { if ((r = routerinfo_incompatible_with_extrainfo(ri, ei, NULL, msg))) { extrainfo_free(ei); return r < 0 ? 0 : -1; } Loading
src/or/or.h +2 −1 Original line number Diff line number Diff line Loading @@ -3612,7 +3612,7 @@ void routerlist_reset_warnings(void); void router_set_status(const char *digest, int up); int router_add_to_routerlist(routerinfo_t *router, const char **msg, int from_cache, int from_fetch); void router_add_extrainfo_to_routerlist(extrainfo_t *ei, const char **msg, int router_add_extrainfo_to_routerlist(extrainfo_t *ei, const char **msg, int from_cache, int from_fetch); void routerlist_remove_old_routers(void); int router_load_single_router(const char *s, uint8_t purpose, int cache, Loading Loading @@ -3643,6 +3643,7 @@ void router_dir_info_changed(void); void router_reset_descriptor_download_failures(void); int router_differences_are_cosmetic(routerinfo_t *r1, routerinfo_t *r2); int routerinfo_incompatible_with_extrainfo(routerinfo_t *ri, extrainfo_t *ei, signed_descriptor_t *sd, const char **msg); void routerlist_assert_ok(routerlist_t *rl); const char *esc_router_info(routerinfo_t *router); Loading
src/or/router.c +1 −1 Original line number Diff line number Diff line Loading @@ -1305,7 +1305,7 @@ router_rebuild_descriptor(int force) router_get_router_hash(ri->cache_info.signed_descriptor_body, ri->cache_info.signed_descriptor_digest); tor_assert(! routerinfo_incompatible_with_extrainfo(ri, ei, NULL)); tor_assert(! routerinfo_incompatible_with_extrainfo(ri, ei, NULL, NULL)); if (desc_routerinfo) routerinfo_free(desc_routerinfo); Loading
src/or/routerlist.c +23 −19 Original line number Diff line number Diff line Loading @@ -2205,7 +2205,8 @@ extrainfo_insert(routerlist_t *rl, extrainfo_t *ei) int r = 0; routerinfo_t *ri = rimap_get(rl->identity_map, ei->cache_info.identity_digest); signed_descriptor_t *sd; signed_descriptor_t *sd = sdmap_get(rl->desc_by_eid_map, ei->cache_info.signed_descriptor_digest); extrainfo_t *ei_tmp; { Loading @@ -2218,15 +2219,7 @@ extrainfo_insert(routerlist_t *rl, extrainfo_t *ei) /* This router is unknown; we can't even verify the signature. Give up.*/ goto done; } if (routerinfo_incompatible_with_extrainfo(ri, ei, NULL)) { if (ei->bad_sig) /* If the signature didn't check, it's just wrong. */ goto done; sd = sdmap_get(rl->desc_by_eid_map, ei->cache_info.signed_descriptor_digest); if (!sd || memcmp(sd->identity_digest, ei->cache_info.identity_digest, DIGEST_LEN) || sd->published_on != ei->cache_info.published_on) if (routerinfo_incompatible_with_extrainfo(ri, ei, sd, NULL)) { goto done; } Loading Loading @@ -2740,8 +2733,10 @@ router_add_to_routerlist(routerinfo_t *router, const char **msg, } /** Insert <b>ei</b> into the routerlist, or free it. Other arguments are * as for router_add_to_routerlist(). */ void * as for router_add_to_routerlist(). * DOCDOC Inserted */ int router_add_extrainfo_to_routerlist(extrainfo_t *ei, const char **msg, int from_cache, int from_fetch) { Loading @@ -2754,6 +2749,8 @@ router_add_extrainfo_to_routerlist(extrainfo_t *ei, const char **msg, if (inserted && !from_cache) signed_desc_append_to_journal(&ei->cache_info, &routerlist->extrainfo_store); return inserted; } /** Sorting helper: return <0, 0, or >0 depending on whether the Loading Loading @@ -3174,7 +3171,9 @@ router_load_extrainfo_from_string(const char *s, const char *eos, log_info(LD_DIR, "%d elements to add", smartlist_len(extrainfo_list)); SMARTLIST_FOREACH(extrainfo_list, extrainfo_t *, ei, { if (requested_fingerprints) { int added = router_add_extrainfo_to_routerlist(ei, &msg, from_cache, !from_cache); if (added && requested_fingerprints) { char fp[HEX_DIGEST_LEN+1]; base16_encode(fp, sizeof(fp), descriptor_digests ? ei->cache_info.signed_descriptor_digest : Loading @@ -3184,7 +3183,6 @@ router_load_extrainfo_from_string(const char *s, const char *eos, /* XXX020 We silently let people stuff us with extrainfos we * didn't ask for. Is this a problem? -RD */ } router_add_extrainfo_to_routerlist(ei, &msg, from_cache, !from_cache); }); routerlist_assert_ok(routerlist); Loading Loading @@ -4042,13 +4040,19 @@ router_differences_are_cosmetic(routerinfo_t *r1, routerinfo_t *r2) * dropped. Return 0 for "compatible", return 1 for "reject, and inform * whoever uploaded <b>ei</b>, and return -1 for "reject silently.". If * <b>msg</b> is present, set *<b>msg</b> to a description of the * incompatibility (if any). */ * incompatibility (if any) * * DOCDOC sd. **/ int routerinfo_incompatible_with_extrainfo(routerinfo_t *ri, extrainfo_t *ei, signed_descriptor_t *sd, const char **msg) { tor_assert(ri); tor_assert(ei); if (!sd) sd = &ri->cache_info; if (ei->bad_sig) { if (msg) *msg = "Extrainfo signature was bad, or signed with wrong key."; Loading Loading @@ -4079,16 +4083,16 @@ routerinfo_incompatible_with_extrainfo(routerinfo_t *ri, extrainfo_t *ei, tor_free(ei->pending_sig); } if (ei->cache_info.published_on < ri->cache_info.published_on) { if (ei->cache_info.published_on < sd->published_on) { if (msg) *msg = "Extrainfo published time did not match routerdesc"; return 1; } else if (ei->cache_info.published_on > ri->cache_info.published_on) { } else if (ei->cache_info.published_on > sd->published_on) { if (msg) *msg = "Extrainfo published time did not match routerdesc"; return -1; } if (memcmp(ei->cache_info.signed_descriptor_digest, ri->cache_info.extra_info_digest, DIGEST_LEN)) { sd->extra_info_digest, DIGEST_LEN)) { if (msg) *msg = "Extrainfo digest did not match value from routerdesc"; return 1; /* Digest doesn't match declared value. */ } Loading