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 18 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
       can time them out correctly. (Bug found by mwenge) [Bugfix on
       0.2.0.2-alpha]
       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
 Changes in version 0.1.2.15 - 2007-07-17
   o Major bugfixes (compilation):
   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
       client-side DNS cache; the 'control' key returns the mappings set
       via the control interface; the 'all' target returns the mappings
       via the control interface; the 'all' target returns the mappings
       set through any mechanism.
       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.
       First introduced in 0.2.0.3-alpha.
 
 
     "addr-mappings/*" -- as for address-mappings/*, but without the
     "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
   If extended events are enabled (see 3.19), optional reason and
   circuit counting information is provided for CLOSED and FAILED
   circuit counting information is provided for CLOSED and FAILED
-  events. 
+  events.
 
 
       Reason = "MISC" / "DONE" / "CONNECTREFUSED" /
       Reason = "MISC" / "DONE" / "CONNECTREFUSED" /
                "IDENTITY" / "CONNECTRESET" / "TIMEOUT" / "NOROUTE" /
                "IDENTITY" / "CONNECTRESET" / "TIMEOUT" / "NOROUTE" /
@@ -963,10 +964,17 @@ $Id$
 4.1.7. New Address mapping
 4.1.7. New Address mapping
 
 
   Syntax:
   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 = 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
   These events are generated when a new address mapping is entered in the
   cache, or when the answer for a RESOLVE command is found.
   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);
              tor_snprintf(line, len, "%s %s NEVER", key, val->new_address);
            else {
            else {
              char time[ISO_TIME_LEN+1];
              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,
              tor_snprintf(line, len, "%s %s \"%s\"", key, val->new_address,
                           time);
                           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);
                                 error);
   else {
   else {
     char buf[ISO_TIME_LEN+1];
     char buf[ISO_TIME_LEN+1];
+    char buf2[ISO_TIME_LEN+1];
     format_local_iso_time(buf,expires);
     format_local_iso_time(buf,expires);
+    format_iso_time(buf2,expires);
     send_control_event_extended(EVENT_ADDRMAP, ALL_NAMES,
     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;
   return 0;