[CalendarServer-changes] [7597] CalendarServer/trunk/twistedcaldav

source_changes at macosforge.org source_changes at macosforge.org
Tue Jun 14 15:33:16 PDT 2011


Revision: 7597
          http://trac.macosforge.org/projects/calendarserver/changeset/7597
Author:   sagen at apple.com
Date:     2011-06-14 15:33:14 -0700 (Tue, 14 Jun 2011)
Log Message:
-----------
Move the purging of old mail tokens to startService so we've shed privileges (9541985)

Modified Paths:
--------------
    CalendarServer/trunk/twistedcaldav/mail.py
    CalendarServer/trunk/twistedcaldav/test/test_mail.py

Modified: CalendarServer/trunk/twistedcaldav/mail.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/mail.py	2011-06-14 21:25:46 UTC (rev 7596)
+++ CalendarServer/trunk/twistedcaldav/mail.py	2011-06-14 22:33:14 UTC (rev 7597)
@@ -529,6 +529,18 @@
 # Service
 #
 
+class MailGatewayService(service.MultiService):
+
+    def startService(self):
+        """
+        Purge old database tokens -- doing this in startService so that
+        it happens after we've shed privileges
+        """
+        service.MultiService.startService(self)
+        if self.mailer is not None:
+            self.mailer.purge()
+
+
 class MailGatewayServiceMaker(LoggingMixIn):
     implements(IPlugin, service.IServiceMaker)
 
@@ -543,7 +555,7 @@
             config.Memcached.MaxClients,
         )
 
-        multiService = service.MultiService()
+        mailGatewayService = MailGatewayService()
 
         settings = config.Scheduling['iMIP']
         if settings['Enabled']:
@@ -560,18 +572,19 @@
                 # TODO: raise error?
                 self.log_error("Invalid iMIP type in configuration: %s" %
                     (mailType,))
-                return multiService
+                return mailGatewayService
 
-            client.setServiceParent(multiService)
+            client.setServiceParent(mailGatewayService)
 
-
             # Set up /inbox -- server POSTs to it to send out iMIP invites
-            IScheduleService(settings, mailer).setServiceParent(multiService)
+            IScheduleService(settings, mailer).setServiceParent(mailGatewayService)
 
         else:
+            mailer = None
             self.log_info("Mail Gateway Service not enabled")
 
-        return multiService
+        mailGatewayService.mailer = mailer
+        return mailGatewayService
 
 
 class IScheduleService(service.MultiService, LoggingMixIn):
@@ -609,9 +622,14 @@
         if dataRoot is None:
             dataRoot = config.DataRoot
         self.db = MailGatewayTokensDatabase(dataRoot)
-        days = config.Scheduling['iMIP']['InvitationDaysToLive']
+        self.days = config.Scheduling['iMIP']['InvitationDaysToLive']
+
+    def purge(self):
+        """
+        Purge old database tokens
+        """
         self.db.purgeOldTokens(datetime.date.today() -
-            datetime.timedelta(days=days))
+            datetime.timedelta(days=self.days))
 
     def checkDSN(self, message):
         # returns (isDSN, Action, icalendar attachment)

Modified: CalendarServer/trunk/twistedcaldav/test/test_mail.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/test/test_mail.py	2011-06-14 21:25:46 UTC (rev 7596)
+++ CalendarServer/trunk/twistedcaldav/test/test_mail.py	2011-06-14 22:33:14 UTC (rev 7597)
@@ -25,6 +25,7 @@
 from twistedcaldav.mail import MailHandler
 from twistedcaldav.mail import MailGatewayTokensDatabase
 import os
+import datetime
 
 
 def echo(*args):
@@ -38,6 +39,32 @@
         self.handler = MailHandler(dataRoot=":memory:")
         self.dataDir = os.path.join(os.path.dirname(__file__), "data", "mail")
 
+
+    def test_purge(self):
+        """
+        Ensure that purge( ) cleans out old tokens
+        """
+
+        # Insert an "old" token
+        token = "test_token"
+        organizer = "me at example.com"
+        attendee = "you at example.com"
+        icaluid = "123"
+        pastDate = datetime.date(2009,1,1)
+        self.handler.db._db_execute(
+            """
+            insert into TOKENS (TOKEN, ORGANIZER, ATTENDEE, ICALUID, DATESTAMP)
+            values (:1, :2, :3, :4, :5)
+            """, token, organizer, attendee, icaluid, pastDate
+        )
+        self.handler.db._db_commit()
+
+        # purge, and make sure we don't see that token anymore
+        self.handler.purge()
+        retrieved = self.handler.db.getToken(organizer, attendee, icaluid)
+        self.assertEquals(retrieved, None)
+
+
     def test_iconPath(self):
         iconPath = self.handler.getIconPath({'day':'1', 'month':'1'}, False, language='en')
         iconDir = "/usr/share/caldavd/share/date_icons"
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20110614/e29bf8fd/attachment-0001.html>


More information about the calendarserver-changes mailing list