[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
[or-cvs] protect dirservers from overzealous descriptor uploading
- To: or-cvs@freehaven.net
- Subject: [or-cvs] protect dirservers from overzealous descriptor uploading
- From: arma@seul.org (Roger Dingledine)
- Date: Thu, 23 Sep 2004 15:58:47 -0400 (EDT)
- Delivered-to: archiver@seul.org
- Delivered-to: or-cvs-outgoing@seul.org
- Delivered-to: or-cvs@seul.org
- Delivery-date: Thu, 23 Sep 2004 15:59:05 -0400
- Reply-to: or-dev@freehaven.net
- Sender: owner-or-cvs@freehaven.net
Update of /home/or/cvsroot/src/or
In directory moria.mit.edu:/home2/arma/work/onion/cvs/src/or
Modified Files:
dirserv.c
Log Message:
protect dirservers from overzealous descriptor uploading
wait 10 seconds after directory gets dirty, before regenerating
Index: dirserv.c
===================================================================
RCS file: /home/or/cvsroot/src/or/dirserv.c,v
retrieving revision 1.79
retrieving revision 1.80
diff -u -d -r1.79 -r1.80
--- dirserv.c 21 Sep 2004 18:09:38 -0000 1.79
+++ dirserv.c 23 Sep 2004 19:58:44 -0000 1.80
@@ -11,6 +11,8 @@
/** How far in the future do we allow a router to get? (seconds) */
#define ROUTER_ALLOW_SKEW (30*60)
+/** How many seconds do we wait before regenerating the directory? */
+#define DIR_REGEN_SLACK_TIME 10
extern or_options_t options; /**< command-line and config-file options */
@@ -422,8 +424,12 @@
void
directory_set_dirty()
{
- the_directory_is_dirty = 1;
- runningrouters_is_dirty = 1;
+ time_t now = time(NULL);
+
+ if(!the_directory_is_dirty)
+ the_directory_is_dirty = now;
+ if(!runningrouters_is_dirty)
+ runningrouters_is_dirty = now;
}
/** Load all descriptors from a directory stored in the string
@@ -672,7 +678,8 @@
return 0;
}
}
- if (the_directory_is_dirty) {
+ if (the_directory_is_dirty &&
+ the_directory_is_dirty + DIR_REGEN_SLACK_TIME < time(NULL)) {
if (dirserv_regenerate_directory())
return 0;
} else {
@@ -792,7 +799,8 @@
* size of the directory on success, and 0 on failure. */
size_t dirserv_get_runningrouters(const char **rr)
{
- if (runningrouters_is_dirty) {
+ if (runningrouters_is_dirty &&
+ runningrouters_is_dirty + DIR_REGEN_SLACK_TIME < time(NULL)) {
if(generate_runningrouters(get_identity_key())) {
log_fn(LOG_ERR, "Couldn't generate running-routers list?");
return 0;