------------------------------------------------------------
revno: 1633
fixes bug: https://launchpad.net/bugs/1555798
committer: Mark Sapiro <m...@msapiro.net>
branch nick: 2.1
timestamp: Thu 2016-03-10 16:41:32 -0800
message:
  Fixed _set_date() in pipermail.py do do a better job.
modified:
  Mailman/Archiver/pipermail.py
  NEWS


--
lp:mailman/2.1
https://code.launchpad.net/~mailman-coders/mailman/2.1

Your team Mailman Checkins is subscribed to branch lp:mailman/2.1.
To unsubscribe from this branch go to 
https://code.launchpad.net/~mailman-coders/mailman/2.1/+edit-subscription
=== modified file 'Mailman/Archiver/pipermail.py'
--- Mailman/Archiver/pipermail.py	2013-12-14 00:53:13 +0000
+++ Mailman/Archiver/pipermail.py	2016-03-11 00:41:32 +0000
@@ -16,6 +16,7 @@
 VERSION = __version__
 CACHESIZE = 100    # Number of slots in the cache
 
+from Mailman import mm_cfg
 from Mailman import Errors
 from Mailman.Mailbox import ArchiverMailbox
 from Mailman.Logging.Syslog import syslog
@@ -230,22 +231,46 @@
         self.body = s.readlines()
 
     def _set_date(self, message):
-        def floatdate(header):
-            missing = []
-            datestr = message.get(header, missing)
-            if datestr is missing:
+        def floatdate(datestr):
+            if not datestr:
                 return None
             date = parsedate_tz(datestr)
             try:
                 return mktime_tz(date)
             except (TypeError, ValueError, OverflowError):
                 return None
-        date = floatdate('date')
+        def check_range(date):
+            """Checks for date in current Unix epoch and not further in the
+            future than mm_config.ARCHIVER_ALLOWABLE_SANE_DATE_SKEW.
+            """
+            if (date < 0 or
+                date - time.time() >
+                    mm_cfg.ARCHIVER_ALLOWABLE_SANE_DATE_SKEW
+               ):
+                return False
+            return True
+        def fix_date():
+            # We have a bad date.
+            # Try a Received: header first.
+            date = floatdate(re.sub(r'^.*;\s*', '',
+                                    message.get('received'), flags=re.S))
+            if date and check_range(date):
+                return date
+            # Try the Unix From date from the mbox.
+            date = floatdate(re.sub(r'From \s*\S+\s+', '',
+                                    message.get_unixfrom()))
+            if date and check_range(date):
+                return date
+            return self._last_article_time + 1
+        date = floatdate(message.get('date'))
         if date is None:
-            date = floatdate('x-list-received-date')
+            date = floatdate(message.get('x-list-received-date'))
         if date is None:
             # What's left to try?
-            date = self._last_article_time + 1
+            date = fix_date()
+        # Sanity check this date.
+        if not check_range(date):
+            date = fix_date()
         self._last_article_time = date
         self.date = '%011i' % date
         self.datestr = message.get('date') \

=== modified file 'NEWS'
--- NEWS	2016-03-09 19:37:20 +0000
+++ NEWS	2016-03-11 00:41:32 +0000
@@ -14,6 +14,15 @@
 
   Bug fixes and other patches
 
+    - Fixed the pipermail archiver to do a better job of figuring the date of
+      a post when its Date: header is missing, unparseable or has an obviously
+      out of range date.  This should only affect bin/arch as ArchRunner has
+      code to fix dates at least if ARCHIVER_CLOBBER_DATE_POLICY has not been
+      set to 0 in mm_cfg.py.  If posts have been added in the past to a list's
+      archive using bin/arch and an imported mbox, running bin/arch again could
+      result is some of those posts being archived with a different date.
+      (LP: #1555798)
+
     - Fixed an issue with CommandRunner shunting a malformed message with a
       null byte in the body.  (LP: #1553888)
 

_______________________________________________
Mailman-checkins mailing list
Mailman-checkins@python.org
Unsubscribe: 
https://mail.python.org/mailman/options/mailman-checkins/archive%40jab.org

Reply via email to