Browse Source

r13905@catbus: nickm | 2007-07-25 18:48:44 -0400
ADDRMAP events should never have specified local time. Extend them to have the proper gmt time, and make GETINFO address-mappings always do the right thing (since it is new in this version).


svn:r10930

Nick Mathewson 17 years ago
parent
commit
a8821e2d82
4 changed files with 25 additions and 7 deletions
  1. 5 0
      ChangeLog
  2. 12 4
      doc/spec/control-spec.txt
  3. 1 1
      src/or/connection_edge.c
  4. 7 2
      src/or/control.c

+ 5 - 0
ChangeLog

@@ -77,6 +77,11 @@ Changes in version 0.2.0.3-alpha - 2007-??-??
       can time them out correctly. (Bug found by mwenge) [Bugfix on
       0.2.0.2-alpha]
 
+  o Minor bugfixes (controller)
+    - Provide DNS expiry times in GMT, not in local time.  For backward
+      compatibility, ADDRMAP events only provide GMT expiry in an extended
+      field.  "GETINFO address-mappings" always does the right thing.
+
 
 Changes in version 0.1.2.15 - 2007-07-17
   o Major bugfixes (compilation):

+ 12 - 4
doc/spec/control-spec.txt

@@ -387,7 +387,8 @@ $Id$
       client-side DNS cache; the 'control' key returns the mappings set
       via the control interface; the 'all' target returns the mappings
       set through any mechanism.
-      Expiry is formatted as with ADDRMAP events; see section 4.1.7.
+      Expiry is formatted as with ADDRMAP events, except that "expiry" is
+      always a time in GMT or the string "NEVER"; see section 4.1.7.
       First introduced in 0.2.0.3-alpha.
 
     "addr-mappings/*" -- as for address-mappings/*, but without the
@@ -925,7 +926,7 @@ $Id$
 
   If extended events are enabled (see 3.19), optional reason and
   circuit counting information is provided for CLOSED and FAILED
-  events. 
+  events.
 
       Reason = "MISC" / "DONE" / "CONNECTREFUSED" /
                "IDENTITY" / "CONNECTRESET" / "TIMEOUT" / "NOROUTE" /
@@ -963,10 +964,17 @@ $Id$
 4.1.7. New Address mapping
 
   Syntax:
-     "650" SP "ADDRMAP" SP Address SP Address SP Expiry
+     "650" SP "ADDRMAP" SP Address SP Address SP Expiry SP Error SP GMTExpiry
      Expiry = DQUOTE ISOTime DQUOTE / "NEVER"
 
-  Expiry is expressed as the local time (rather than GMT).
+     Error = / "error=" ErrorCode
+     GMTExpiry = "EXPIRES=" DQUOTE IsoTime DQUOTE
+
+  Error and GMTExpiry are only provided if extended events are enabled.
+
+  Expiry is expressed as the local time (rather than GMT).  This is a bug,
+  left in for backward compatibility; new code should look at GMTExpiry
+  instead.
 
   These events are generated when a new address mapping is entered in the
   cache, or when the answer for a RESOLVE command is found.

+ 1 - 1
src/or/connection_edge.c

@@ -1161,7 +1161,7 @@ addressmap_get_mappings(smartlist_t *sl, time_t min_expires,
              tor_snprintf(line, len, "%s %s NEVER", key, val->new_address);
            else {
              char time[ISO_TIME_LEN+1];
-             format_local_iso_time(time, val->expires);
+             format_iso_time(time, val->expires);
              tor_snprintf(line, len, "%s %s \"%s\"", key, val->new_address,
                           time);
            }

+ 7 - 2
src/or/control.c

@@ -3099,10 +3099,15 @@ control_event_address_mapped(const char *from, const char *to, time_t expires,
                                 error);
   else {
     char buf[ISO_TIME_LEN+1];
+    char buf2[ISO_TIME_LEN+1];
     format_local_iso_time(buf,expires);
+    format_iso_time(buf2,expires);
     send_control_event_extended(EVENT_ADDRMAP, ALL_NAMES,
-                                "650 ADDRMAP %s %s \"%s\"@%s\r\n",
-                                from, to, buf, error);
+                                "650 ADDRMAP %s %s \"%s\""
+                                "@%s%sEXPIRES=\"%s\"\r\n",
+                                from, to, buf,
+                                error, error?" ":"",
+                                buf2);
   }
 
   return 0;