Explorar o código

Never use time(NULL) as assumed publication time for a directory.

svn:r2105
Nick Mathewson %!s(int64=21) %!d(string=hai) anos
pai
achega
33fe5e362f
Modificáronse 3 ficheiros con 9 adicións e 6 borrados
  1. 2 1
      src/or/or.h
  2. 1 1
      src/or/routerlist.c
  3. 6 4
      src/or/routerparse.c

+ 2 - 1
src/or/or.h

@@ -1415,7 +1415,8 @@ int router_get_dir_hash(const char *s, char *digest);
 int router_get_runningrouters_hash(const char *s, char *digest);
 int router_parse_list_from_string(const char **s,
                                   routerlist_t **dest,
-                                  smartlist_t *good_nickname_list);
+                                  smartlist_t *good_nickname_list,
+                                  time_t published);
 int router_parse_routerlist_from_directory(const char *s,
                                            routerlist_t **dest,
                                            crypto_pk_env_t *pkey);

+ 1 - 1
src/or/routerlist.c

@@ -561,7 +561,7 @@ 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)) {
+  if (router_parse_list_from_string(&s, &new_list, NULL, 0)) {
     log(LOG_WARN, "Error parsing router file");
     return -1;
   }

+ 6 - 4
src/or/routerparse.c

@@ -393,14 +393,15 @@ router_parse_routerlist_from_directory(const char *str,
   {
     routerinfo_t *me = router_get_my_routerinfo();
     if(me)
-      router_update_status_from_smartlist(me, time(NULL), good_nickname_list);
+      router_update_status_from_smartlist(me, published_on,
+                                          good_nickname_list);
   }
 
   /* Read the router list from s, advancing s up past the end of the last
    * router. */
   str = end;
   if (router_parse_list_from_string(&str, &new_dir,
-                                    good_nickname_list)) {
+                                    good_nickname_list, published_on)) {
     log_fn(LOG_WARN, "Error reading routers from directory");
     goto err;
   }
@@ -576,7 +577,8 @@ static int check_directory_signature(const char *digest,
  */
 int
 router_parse_list_from_string(const char **s, routerlist_t **dest,
-                              smartlist_t *good_nickname_list)
+                              smartlist_t *good_nickname_list,
+                              time_t published_on)
 {
   routerinfo_t *router;
   smartlist_t *routers;
@@ -607,7 +609,7 @@ router_parse_list_from_string(const char **s, routerlist_t **dest,
     }
 
     if (good_nickname_list) {
-      router_update_status_from_smartlist(router, time(NULL),
+      router_update_status_from_smartlist(router, published_on,
                                           good_nickname_list);
     } else {
       router->is_running = 1; /* start out assuming all dirservers are up */