diff options
author | Nick Mathewson <nickm@torproject.org> | 2003-05-07 18:39:44 +0000 |
---|---|---|
committer | Nick Mathewson <nickm@torproject.org> | 2003-05-07 18:39:44 +0000 |
commit | b58939745e3750f6702af8e50da6e03194fcb913 (patch) | |
tree | 8ad7a230e89134399aa0b452d71efc36b7c776d8 | |
parent | afc0eb2c7198de0b14d18cf59484d34ac47b95a5 (diff) | |
download | tor-b58939745e3750f6702af8e50da6e03194fcb913.tar tor-b58939745e3750f6702af8e50da6e03194fcb913.tar.gz |
Do not replace old directory if new one is invalid
svn:r272
-rw-r--r-- | src/or/routers.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/src/or/routers.c b/src/or/routers.c index 747d4f992..e3f5bc211 100644 --- a/src/or/routers.c +++ b/src/or/routers.c @@ -524,7 +524,7 @@ int router_get_list_from_string(char *s) int router_get_list_from_string_impl(char *s, directory_t **dest) { directory_token_t tok; if (router_get_next_token(&s, &tok)) { - return NULL; + return -1; } return router_get_list_from_string_tok(&s, dest, &tok); } @@ -557,6 +557,7 @@ int router_get_dir_from_string_impl(char *s, directory_t **dest, directory_token_t tok; char digest[20]; char signed_digest[128]; + directory_t *new_dir = NULL; #define NEXT_TOK() \ do { \ @@ -584,7 +585,7 @@ int router_get_dir_from_string_impl(char *s, directory_t **dest, TOK_IS(K_SERVER_SOFTWARE, "server-software"); NEXT_TOK(); - if (router_get_list_from_string_tok(&s, dest, &tok)) + if (router_get_list_from_string_tok(&s, &new_dir, &tok)) return -1; TOK_IS(K_DIRECTORY_SIGNATURE, "directory-signature"); @@ -608,6 +609,10 @@ int router_get_dir_from_string_impl(char *s, directory_t **dest, NEXT_TOK(); TOK_IS(_EOF, "end of directory"); + if (*dest) + directory_free(*dest); + *dest = new_dir; + return 0; #undef NEXT_TOK #undef TOK_IS @@ -655,7 +660,8 @@ static int router_get_list_from_string_tok(char **s, directory_t **dest, } return -1; } -static int + +int router_resolve(routerinfo_t *router) { struct hostent *rent; |