Browse Source

r11461@Kushana: nickm | 2006-12-07 13:16:45 -0500
Change logging format of state file to only include non-default values. Adjust clients to never store bandwidth history in the state file. (Possible backport candidate.)


svn:r9043

Nick Mathewson 17 years ago
parent
commit
63e4cfbeb6
3 changed files with 18 additions and 7 deletions
  1. 3 0
      ChangeLog
  2. 5 5
      src/or/config.c
  3. 10 2
      src/or/rephist.c

+ 3 - 0
ChangeLog

@@ -12,6 +12,9 @@ Changes in version 0.1.2.5-xxxx - 200?-??-??
   o Security bugfixes:
     - Do not log introduction points for hidden services if SafeLogging
       is set.
+    - Clients do not store bandwidth history in their state files. (This
+      shouldn't be an exploitable security issue, but it's better to be
+      safe.)
 
   o Controller bugfixes:
     - Report the circuit number correctly in STREAM CLOSED events. (Bug

+ 5 - 5
src/or/config.c

@@ -274,11 +274,11 @@ static config_var_t _state_vars[] = {
   VAR("EntryGuards",             LINELIST_V,  EntryGuards,             NULL),
 
   VAR("BWHistoryReadEnds",       ISOTIME,     BWHistoryReadEnds,      NULL),
-  VAR("BWHistoryReadInterval",   UINT,        BWHistoryReadInterval,  NULL),
-  VAR("BWHistoryReadValues",     CSV,         BWHistoryReadValues,    NULL),
+  VAR("BWHistoryReadInterval",   UINT,        BWHistoryReadInterval,  "900"),
+  VAR("BWHistoryReadValues",     CSV,         BWHistoryReadValues,    ""),
   VAR("BWHistoryWriteEnds",      ISOTIME,     BWHistoryWriteEnds,     NULL),
-  VAR("BWHistoryWriteInterval",  UINT,        BWHistoryWriteInterval, NULL),
-  VAR("BWHistoryWriteValues",    CSV,         BWHistoryWriteValues,   NULL),
+  VAR("BWHistoryWriteInterval",  UINT,        BWHistoryWriteInterval, "900"),
+  VAR("BWHistoryWriteValues",    CSV,         BWHistoryWriteValues,   ""),
 
   VAR("TorVersion",              STRING,      TorVersion,             NULL),
 
@@ -3968,7 +3968,7 @@ or_state_save(void)
   global_state->LastWritten = time(NULL);
   tor_free(global_state->TorVersion);
   global_state->TorVersion = tor_strdup("Tor " VERSION);
-  state = config_dump(&state_format, global_state, 0);
+  state = config_dump(&state_format, global_state, 1);
   len = strlen(state)+128;
   contents = tor_malloc(len);
   format_local_iso_time(tbuf, time(NULL));

+ 10 - 2
src/or/rephist.c

@@ -659,12 +659,20 @@ rep_hist_update_state(or_state_t *state)
     s_interval= r?&state->BWHistoryReadInterval:&state->BWHistoryWriteInterval;
     s_values  = r?&state->BWHistoryReadValues  :&state->BWHistoryWriteValues;
 
-    *s_begins = b->next_period;
-    *s_interval = NUM_SECS_BW_SUM_INTERVAL;
     if (*s_values) {
       SMARTLIST_FOREACH(*s_values, char *, cp, tor_free(cp));
       smartlist_free(*s_values);
     }
+    if (! server_mode(get_options())) {
+      /* Clients don't need to store bandwidth history persistently;
+       * force these values to the defaults. */
+      *s_begins = 0;
+      *s_interval = 900;
+      *s_values = smartlist_create();
+      continue;
+    }
+    *s_begins = b->next_period;
+    *s_interval = NUM_SECS_BW_SUM_INTERVAL;
     cp = buf;
     cp += rep_hist_fill_bandwidth_history(cp, len, b);
     tor_snprintf(cp, len-(cp-buf), cp == buf ? U64_FORMAT : ","U64_FORMAT,