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

source_changes at macosforge.org source_changes at macosforge.org
Thu Aug 9 12:41:20 PDT 2007


Revision: 1776
          http://trac.macosforge.org/projects/calendarserver/changeset/1776
Author:   cdaboo at apple.com
Date:     2007-08-09 12:41:19 -0700 (Thu, 09 Aug 2007)

Log Message:
-----------
Ignore "." prefixed files in calendar collections and for indexing etc. Prevent a PUT or COPY/MOVE of a
"." prefixed file into a calendar collection.

Modified Paths:
--------------
    CalendarServer/trunk/twistedcaldav/index.py
    CalendarServer/trunk/twistedcaldav/method/put_common.py
    CalendarServer/trunk/twistedcaldav/static.py
    CalendarServer/trunk/twistedcaldav/test/test_collectioncontents.py

Modified: CalendarServer/trunk/twistedcaldav/index.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/index.py	2007-08-09 18:38:28 UTC (rev 1775)
+++ CalendarServer/trunk/twistedcaldav/index.py	2007-08-09 19:41:19 UTC (rev 1776)
@@ -566,7 +566,7 @@
         #
         fp = self.resource.fp
         for name in fp.listdir():
-            if name.startswith(db_prefix):
+            if name.startswith("."):
                 continue
 
             try:
@@ -677,7 +677,7 @@
         #
         fp = self.resource.fp
         for name in fp.listdir():
-            if name.startswith(db_prefix):
+            if name.startswith("."):
                 continue
 
             try:

Modified: CalendarServer/trunk/twistedcaldav/method/put_common.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/method/put_common.py	2007-08-09 18:38:28 UTC (rev 1775)
+++ CalendarServer/trunk/twistedcaldav/method/put_common.py	2007-08-09 19:41:19 UTC (rev 1776)
@@ -182,6 +182,19 @@
     
     rollback = RollbackState()
 
+    def validResourceName():
+        """
+        Make sure that the resource name for the new resource is valid.
+        """
+        result = True
+        message = ""
+        filename = destination.fp.basename()
+        if filename.startswith("."):
+            result = False
+            message = "File name %s not allowed in calendar collection" % (filename,)
+
+        return result, message
+        
     def validContentType():
         """
         Make sure that the content-type of the source resource is text/calendar.
@@ -298,6 +311,12 @@
         """
         reserved = False
         if destinationcal:
+            # Valid resource name check
+            result, message = validResourceName()
+            if not result:
+                log.err(message)
+                raise HTTPError(StatusResponse(responsecode.FORBIDDEN, "Resource name not allowed"))
+
             if not sourcecal:
                 # Valid content type check on the source resource if its not in a calendar collection
                 if source is not None:

Modified: CalendarServer/trunk/twistedcaldav/static.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/static.py	2007-08-09 18:38:28 UTC (rev 1775)
+++ CalendarServer/trunk/twistedcaldav/static.py	2007-08-09 19:41:19 UTC (rev 1776)
@@ -69,7 +69,6 @@
 from twistedcaldav.directory.calendar import DirectoryCalendarHomeTypeProvisioningResource
 from twistedcaldav.directory.calendar import DirectoryCalendarHomeResource
 from twistedcaldav.directory.resource import AutoProvisioningResourceMixIn
-from twistedcaldav.sql import db_prefix
 
 class CalDAVFile (CalDAVResource, DAVFile):
     """
@@ -279,7 +278,7 @@
     def listChildren(self):
         return [
             child for child in super(CalDAVFile, self).listChildren()
-            if not child.startswith(db_prefix)
+            if not child.startswith(".")
         ]
 
     def updateCTag(self):
@@ -311,7 +310,7 @@
                 for f in top.listdir():
     
                     # Ignore the database
-                    if f.startswith(db_prefix):
+                    if f.startswith("."):
                         continue
     
                     child = top.child(f)

Modified: CalendarServer/trunk/twistedcaldav/test/test_collectioncontents.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/test/test_collectioncontents.py	2007-08-09 18:38:28 UTC (rev 1775)
+++ CalendarServer/trunk/twistedcaldav/test/test_collectioncontents.py	2007-08-09 19:41:19 UTC (rev 1776)
@@ -160,3 +160,50 @@
 
         request = SimpleRequest(self.site, "MKCALENDAR", calendar_uri)
         return self.send(request, mkcalendar_cb)
+
+    def test_ignore_dot_files(self):
+        """
+        Make sure database files are not listed as children.
+        """
+        colpath = self.site.resource.fp.path
+        fd = open(os.path.join(colpath, "._bogus"), "w")
+        fd.close()
+        fd = open(os.path.join(colpath, "bogus"), "w")
+        fd.close()
+        children = self.site.resource.listChildren()
+        self.assertTrue("bogus" in children)
+        self.assertFalse("._bogus" in children)
+
+    def test_fail_dot_file_put_in_calendar(self):
+        """
+        Make (regular) collection in calendar
+        """
+        calendar_path, calendar_uri = self.mkdtemp("dot_file_in_calendar")
+        os.rmdir(calendar_path)
+
+        def mkcalendar_cb(response):
+            response = IResponse(response)
+
+            if response.code != responsecode.CREATED:
+                self.fail("MKCALENDAR failed: %s" % (response.code,))
+
+            def put_cb(response):
+                response = IResponse(response)
+
+                if response.code != responsecode.FORBIDDEN:
+                    self.fail("Incorrect response to dot file PUT: %s" % (response.code,))
+
+            stream = file(os.path.join(self.data_dir, "Holidays", "C318AA54-1ED0-11D9-A5E0-000A958A3252.ics"))
+            try: calendar = str(Component.fromStream(stream))
+            finally: stream.close()
+
+            event_uri  = os.path.join(calendar_uri, ".event.ics")
+
+            request = SimpleRequest(self.site, "PUT", event_uri)
+            request.headers.setHeader("content-type", MimeType("text", "calendar"))
+            request.stream = MemoryStream(calendar)
+            self.send(request, put_cb)
+
+        request = SimpleRequest(self.site, "MKCALENDAR", calendar_uri)
+        return self.send(request, mkcalendar_cb)
+

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20070809/02865745/attachment.html


More information about the calendarserver-changes mailing list