r14421@tombo: nickm | 2008-02-24 17:05:18 -0500

Patch from mwenge: always willingly serve our own extrainfo from the controlport


svn:r13699
This commit is contained in:
Nick Mathewson 2008-02-24 22:11:12 +00:00
parent b8f1092077
commit ee8dce3084
5 changed files with 30 additions and 3 deletions

View File

@ -55,6 +55,9 @@ Changes in version 0.2.0.20-?? - 2008-02-??
get saved to disk by SAVECONF. Make Tor automatically convert get saved to disk by SAVECONF. Make Tor automatically convert
"HashedControlPassword" to this new option but only when it's "HashedControlPassword" to this new option but only when it's
given on the command line. Partial fix for bug 586. given on the command line. Partial fix for bug 586.
- If we have an extra-info document for our server, always make
it available on the control port, even if we haven't gotten
a copy of it from an authority yet. Patch from mwenge.
o Minor features (logging): o Minor features (logging):
- When SafeLogging is disabled, log addresses along with all TLS - When SafeLogging is disabled, log addresses along with all TLS

View File

@ -1523,8 +1523,17 @@ getinfo_helper_dir(control_connection_t *control_conn,
if (strlen(question) == HEX_DIGEST_LEN) { if (strlen(question) == HEX_DIGEST_LEN) {
char d[DIGEST_LEN]; char d[DIGEST_LEN];
signed_descriptor_t *sd = NULL; signed_descriptor_t *sd = NULL;
if (base16_decode(d, sizeof(d), question, strlen(question))==0) if (base16_decode(d, sizeof(d), question, strlen(question))==0) {
sd = extrainfo_get_by_descriptor_digest(d); /* XXXX this test should move into extrainfo_get_by_descriptor_digest,
* but I don't want to risk affecting other parts of the code,
* especially since the rules for using our own extrainfo (including
* when it might be freed) are different from those for using one
* we have downloaded. */
if (router_extrainfo_digest_is_me(d))
sd = &(router_get_my_extrainfo()->cache_info);
else
sd = extrainfo_get_by_descriptor_digest(d);
}
if (sd) { if (sd) {
const char *body = signed_descriptor_get_body(sd); const char *body = signed_descriptor_get_body(sd);
if (body) if (body)

View File

@ -2673,7 +2673,8 @@ dirserv_get_routerdescs(smartlist_t *descs_out, const char *key,
SMARTLIST_FOREACH(digests, const char *, d, SMARTLIST_FOREACH(digests, const char *, d,
{ {
if (router_digest_is_me(d)) { if (router_digest_is_me(d)) {
smartlist_add(descs_out, &(router_get_my_routerinfo()->cache_info)); if (router_get_my_routerinfo()) /* make sure desc_routerinfo exists */
smartlist_add(descs_out, &(router_get_my_routerinfo()->cache_info));
} else { } else {
routerinfo_t *ri = router_get_by_digest(d); routerinfo_t *ri = router_get_by_digest(d);
/* Don't actually serve a descriptor that everyone will think is /* Don't actually serve a descriptor that everyone will think is

View File

@ -3794,6 +3794,7 @@ routerinfo_t *router_get_my_routerinfo(void);
extrainfo_t *router_get_my_extrainfo(void); extrainfo_t *router_get_my_extrainfo(void);
const char *router_get_my_descriptor(void); const char *router_get_my_descriptor(void);
int router_digest_is_me(const char *digest); int router_digest_is_me(const char *digest);
int router_extrainfo_digest_is_me(const char *digest);
int router_is_me(routerinfo_t *router); int router_is_me(routerinfo_t *router);
int router_fingerprint_is_me(const char *fp); int router_fingerprint_is_me(const char *fp);
int router_pick_published_address(or_options_t *options, uint32_t *addr); int router_pick_published_address(or_options_t *options, uint32_t *addr);

View File

@ -1094,6 +1094,19 @@ router_digest_is_me(const char *digest)
return identitykey && !memcmp(identitykey_digest, digest, DIGEST_LEN); return identitykey && !memcmp(identitykey_digest, digest, DIGEST_LEN);
} }
/** Return true iff I'm a server and <b>digest</b> is equal to
* my identity digest. */
int
router_extrainfo_digest_is_me(const char *digest)
{
if (!router_get_my_extrainfo())
return 0;
return !memcmp(digest,
&(router_get_my_extrainfo()->cache_info).signed_descriptor_digest,
DIGEST_LEN);
}
/** A wrapper around router_digest_is_me(). */ /** A wrapper around router_digest_is_me(). */
int int
router_is_me(routerinfo_t *router) router_is_me(routerinfo_t *router)