summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2004-10-19 18:19:59 +0000
committerNick Mathewson <nickm@torproject.org>2004-10-19 18:19:59 +0000
commite5049d5aa32574ad6f5a1a73151e80b0db606237 (patch)
tree4244a3d0f28bd2b4e2d07bb745df5f08a5cd8544
parent62094ebd32c61421a24982c88b767826cdae75db (diff)
downloadtor-e5049d5aa32574ad6f5a1a73151e80b0db606237.tar.gz
tor-e5049d5aa32574ad6f5a1a73151e80b0db606237.zip
Remove routerinfo_t->is_trusted_dir, and all the twisted machinery used to
maintain it. Have clients default to the nickname "client" in their certificates. Give a less frightening warning on obsolete (pre-0.0.8) routerinfo_t's. svn:r2568
-rw-r--r--doc/TODO2
-rw-r--r--src/or/or.h4
-rw-r--r--src/or/router.c9
-rw-r--r--src/or/routerlist.c97
-rw-r--r--src/or/routerparse.c31
-rw-r--r--src/or/test.c1
6 files changed, 22 insertions, 122 deletions
diff --git a/doc/TODO b/doc/TODO
index 7f73f14dc0..a9d792e464 100644
--- a/doc/TODO
+++ b/doc/TODO
@@ -102,7 +102,7 @@ R - learn from ben about his openssl-reinitialization-trick to
o stop reading dirservers file.
o add some default TrustedDir lines if none defined, or if
no torrc.
- - remove notion of ->is_trusted_dir from the routerlist. that's
+ o remove notion of ->is_trusted_dir from the routerlist. that's
no longer where you look.
- clean up router parsing flow, since it's simpler now?
o when checking signature on a directory, look it up in
diff --git a/src/or/or.h b/src/or/or.h
index 196a1dc9a5..a6dd45193b 100644
--- a/src/or/or.h
+++ b/src/or/or.h
@@ -595,7 +595,6 @@ typedef struct {
int is_running; /**< As far as we know, is this OR currently running? */
time_t status_set_at; /**< When did we last update is_running? */
int is_verified; /**< Has a trusted dirserver validated this OR? */
- int is_trusted_dir; /**< Do we trust this OR as a directory server? */
smartlist_t *declared_family; /**< Nicknames of router which this router
* claims are its family. */
@@ -1451,13 +1450,10 @@ routerinfo_t *router_get_by_digest(const char *digest);
int router_digest_is_trusted_dir(const char *digest);
void router_get_routerlist(routerlist_t **prouterlist);
void routerlist_free(routerlist_t *routerlist);
-void routerlist_clear_trusted_directories(void);
void routerinfo_free(routerinfo_t *router);
routerinfo_t *routerinfo_copy(const routerinfo_t *router);
void router_mark_as_down(const char *digest);
void routerlist_remove_old_routers(int age);
-int router_load_routerlist_from_file(char *routerfile, int trusted);
-int router_load_routerlist_from_string(const char *s, int trusted);
int router_load_routerlist_from_directory(const char *s,crypto_pk_env_t *pkey,
int check_version);
int router_compare_addr_to_exit_policy(uint32_t addr, uint16_t port,
diff --git a/src/or/router.c b/src/or/router.c
index cb1f5b3169..3475882cc8 100644
--- a/src/or/router.c
+++ b/src/or/router.c
@@ -242,8 +242,10 @@ int init_keys(void) {
if (crypto_pk_generate_key(prkey))
return -1;
set_identity_key(prkey);
-/* XXX NM: do we have a convention for what client's Nickname is? */
- if (tor_tls_context_new(get_identity_key(), 1, options.Nickname,
+ /* XXX NM: do we have a convention for what client's Nickname is?
+ * No. Let me propose one: */
+ if (tor_tls_context_new(get_identity_key(), 1,
+ options.Nickname ? options.Nickname : "client",
MAX_SSL_KEY_LIFETIME) < 0) {
log_fn(LOG_ERR, "Error creating TLS context for OP.");
return -1;
@@ -398,7 +400,7 @@ void router_retry_connections(void) {
}
int router_is_clique_mode(routerinfo_t *router) {
- if(router->is_trusted_dir)
+ if(router_digest_is_trusted_dir(router->identity_digest))
return 1;
return 0;
}
@@ -541,7 +543,6 @@ int router_rebuild_descriptor(void) {
ri->bandwidthburst = options.BandwidthBurst;
ri->bandwidthcapacity = router_get_bandwidth_capacity();
router_add_exit_policy_from_config(ri);
- ri->is_trusted_dir = authdir_mode();
if(desc_routerinfo) /* inherit values */
ri->is_verified = desc_routerinfo->is_verified;
if (options.MyFamily) {
diff --git a/src/or/routerlist.c b/src/or/routerlist.c
index 0eeda7b589..0aca4028c3 100644
--- a/src/or/routerlist.c
+++ b/src/or/routerlist.c
@@ -48,7 +48,6 @@ extern int has_fetched_directory; /**< from main.c */
int router_reload_router_list(void)
{
char filename[512];
- routerlist_clear_trusted_directories();
if (get_data_directory(&options)) {
char *s;
snprintf(filename,sizeof(filename),"%s/cached-directory", get_data_directory(&options));
@@ -107,7 +106,6 @@ routerinfo_t *router_pick_directory_server(int requireothers,
log_fn(LOG_INFO,"Still no %s router entries. Reloading and trying again.",
options.FascistFirewall ? "reachable" : "known");
has_fetched_directory=0; /* reset it */
- routerlist_clear_trusted_directories();
if(router_reload_router_list()) {
return NULL;
}
@@ -135,7 +133,6 @@ trusted_dir_server_t *router_pick_trusteddirserver(int requireothers,
log_fn(LOG_WARN,"Still no dirservers %s. Reloading and trying again.",
options.FascistFirewall ? "reachable" : "known");
has_fetched_directory=0; /* reset it */
- routerlist_clear_trusted_directories();
if(router_reload_router_list()) {
return NULL;
}
@@ -221,11 +218,11 @@ router_pick_trusteddirserver_impl(int requireother, int fascistfirewall)
static void mark_all_trusteddirservers_up(void) {
if(routerlist) {
SMARTLIST_FOREACH(routerlist->routers, routerinfo_t *, router,
- if(router->is_trusted_dir) {
- tor_assert(router->dir_port > 0);
- router->is_running = 1;
- router->status_set_at = time(NULL);
- });
+ if(router_digest_is_trusted_dir(router->identity_digest)) {
+ tor_assert(router->dir_port > 0);
+ router->is_running = 1;
+ router->status_set_at = time(NULL);
+ });
}
if (trusted_dir_servers) {
SMARTLIST_FOREACH(trusted_dir_servers, trusted_dir_server_t *, dir,
@@ -737,8 +734,6 @@ int router_add_to_routerlist(routerinfo_t *router) {
for (i = 0; i < smartlist_len(routerlist->routers); ++i) {
r = smartlist_get(routerlist->routers, i);
- r->is_trusted_dir = router_digest_is_trusted_dir(r->identity_digest);
-
if (!crypto_pk_cmp_keys(router->identity_pkey, r->identity_pkey)) {
if (router->published_on > r->published_on) {
log_fn(LOG_DEBUG, "Replacing entry for router '%s/%s' [%s]",
@@ -809,9 +804,8 @@ routerlist_remove_old_routers(int age)
cutoff = time(NULL) - age;
for (i = 0; i < smartlist_len(routerlist->routers); ++i) {
router = smartlist_get(routerlist->routers, i);
- if (router->published_on <= cutoff &&
- !router->is_trusted_dir) {
- /* Too old. Remove it. But never remove dirservers! */
+ if (router->published_on <= cutoff) {
+ /* Too old. Remove it. */
log_fn(LOG_INFO,"Forgetting obsolete routerinfo for node %s.", router->nickname);
routerinfo_free(router);
smartlist_del(routerlist->routers, i--);
@@ -823,83 +817,6 @@ routerlist_remove_old_routers(int age)
* Code to parse router descriptors and directories.
*/
-/** Update the current router list with the one stored in
- * <b>routerfile</b>. If <b>trusted</b> is true, then we'll use
- * directory servers from the file. */
-int router_load_routerlist_from_file(char *routerfile, int trusted)
-{
- char *string;
-
- string = read_file_to_str(routerfile,0);
- if(!string) {
- log_fn(LOG_WARN,"Failed to load routerfile %s.",routerfile);
- return -1;
- }
-
- if(router_load_routerlist_from_string(string, trusted) < 0) {
- log_fn(LOG_WARN,"The routerfile itself was corrupt.");
- tor_free(string);
- return -1;
- }
- /* dump_onion_keys(LOG_NOTICE); */
-
- tor_free(string);
- return 0;
-}
-
-/** Mark all directories in the routerlist as nontrusted. */
-void routerlist_clear_trusted_directories(void)
-{
- if (routerlist) {
- SMARTLIST_FOREACH(routerlist->routers, routerinfo_t *, r,
- r->is_trusted_dir = 0);
- }
-}
-
-/** Helper function: read routerinfo elements from s, and throw out the
- * ones that don't parse and resolve. Add all remaining elements to the
- * routerlist. If <b>trusted</b> is true, then we'll use
- * directory servers from the string
- */
-int router_load_routerlist_from_string(const char *s, int trusted)
-{
- routerlist_t *new_list=NULL;
-
- if (router_parse_list_from_string(&s, &new_list, NULL, 0)) {
- log(LOG_WARN, "Error parsing router file");
- return -1;
- }
- if (*s) {
- log(LOG_WARN, "Extraneous text at start of router file");
- return -1;
- }
- if (trusted) {
- int i;
- for (i=0;i<smartlist_len(new_list->routers);++i) {
- routerinfo_t *r = smartlist_get(new_list->routers, i);
- if (r->dir_port) {
- log_fn(LOG_DEBUG,"Trusting router %s.", r->nickname);
- r->is_trusted_dir = 1;
- add_trusted_dir_server(r->address, r->dir_port, r->identity_digest);
- }
- }
- }
- if (routerlist) {
- SMARTLIST_FOREACH(new_list->routers, routerinfo_t *, r,
- router_add_to_routerlist(r));
- smartlist_clear(new_list->routers);
- routerlist_free(new_list);
- } else {
- routerlist = new_list;
- }
- if (router_resolve_routerlist(routerlist)) {
- log(LOG_WARN, "Error resolving routerlist");
- return -1;
- }
- /* dump_onion_keys(LOG_NOTICE); */
-
- return 0;
-}
/** Add to the current routerlist each router stored in the
* signed directory <b>s</b>. If pkey is provided, check the signature against
diff --git a/src/or/routerparse.c b/src/or/routerparse.c
index 7811881dfb..476c8af989 100644
--- a/src/or/routerparse.c
+++ b/src/or/routerparse.c
@@ -599,9 +599,7 @@ static int dir_signing_key_is_trusted(crypto_pk_env_t *key)
* was used to sign it, so we will use that key only if it is an
* authoritative directory signing key.
*
- * Otherwise, try to look up the router whose nickname is given in the
- * directory-signature token. If this fails, or the named router is
- * not authoritative, try to use pkey.
+ * Otherwise, if pkey is provided, try to use it.
*
* (New callers should always use <b>declared_key</b> when possible;
* <b>pkey is only for debugging.)
@@ -612,7 +610,6 @@ static int check_directory_signature(const char *digest,
crypto_pk_env_t *declared_key)
{
char signed_digest[PK_BYTES];
- routerinfo_t *r;
crypto_pk_env_t *_pkey = NULL;
if (tok->n_args != 1) {
@@ -624,24 +621,13 @@ static int check_directory_signature(const char *digest,
if (dir_signing_key_is_trusted(declared_key))
_pkey = declared_key;
}
+ if (!_pkey && pkey) {
+ /* pkey provided for debugging purposes */
+ _pkey = pkey;
+ }
if (!_pkey) {
- log_fn(LOG_WARN, "Processing directory in old (before 0.0.9pre3) format--this may fail.");
- r = router_get_by_nickname(tok->args[0]);
- log_fn(LOG_DEBUG, "Got directory signed (allegedly) by %s", tok->args[0]);
- if (r && r->is_trusted_dir) {
- _pkey = r->identity_pkey;
- } else if (!r && pkey) {
- /* pkey provided for debugging purposes. */
- _pkey = pkey;
- } else if (!r) {
- log_fn(LOG_WARN, "No server descriptor loaded for signer %s",
- tok->args[0]);
- return -1;
- } else if (r && !r->is_trusted_dir) {
- log_fn(LOG_WARN, "Directory was signed by non-trusted server %s",
- tok->args[0]);
- return -1;
- }
+ log_fn(LOG_WARN, "Found directory in old (before 0.0.9pre3) format--rejecting.");
+ return -1;
}
if (strcmp(tok->object_type, "SIGNATURE") || tok->object_size != 128) {
@@ -825,7 +811,8 @@ routerinfo_t *router_parse_entry_from_string(const char *s,
goto err;
} else if (tok) {
if (tok->n_args < 3) {
- log_fn(LOG_WARN,"Not enough arguments to \"bandwidth\"");
+ /* XXXX Once 0.0.7 is *really* dead, restore this warning to its old form*/
+ log_fn(LOG_WARN,"Not enough arguments to \"bandwidth\": must be an obsolete server. Rejecting.");
goto err;
}
router->bandwidthrate = tor_parse_long(tok->args[0],10,0,INT_MAX,NULL,NULL);
diff --git a/src/or/test.c b/src/or/test.c
index 8706600eb5..745a8fedc0 100644
--- a/src/or/test.c
+++ b/src/or/test.c
@@ -927,7 +927,6 @@ test_dir_format()
r1.or_port = 9000;
r1.socks_port = 9002;
r1.dir_port = 9003;
- r1.is_trusted_dir = 1;
r1.onion_pkey = pk1;
r1.identity_pkey = pk2;
r1.bandwidthrate = 1000;