aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2003-05-07 18:39:44 +0000
committerNick Mathewson <nickm@torproject.org>2003-05-07 18:39:44 +0000
commitb58939745e3750f6702af8e50da6e03194fcb913 (patch)
tree8ad7a230e89134399aa0b452d71efc36b7c776d8
parentafc0eb2c7198de0b14d18cf59484d34ac47b95a5 (diff)
downloadtor-b58939745e3750f6702af8e50da6e03194fcb913.tar
tor-b58939745e3750f6702af8e50da6e03194fcb913.tar.gz
Do not replace old directory if new one is invalid
svn:r272
-rw-r--r--src/or/routers.c12
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;