]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
Do not replace old directory if new one is invalid
authorNick Mathewson <nickm@torproject.org>
Wed, 7 May 2003 18:39:44 +0000 (18:39 +0000)
committerNick Mathewson <nickm@torproject.org>
Wed, 7 May 2003 18:39:44 +0000 (18:39 +0000)
svn:r272

src/or/routers.c

index 747d4f992e7c476f0c7cdae0432cafa8f9a2633c..e3f5bc211076ea8acea452a96129f54c2d676b43 100644 (file)
@@ -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;