[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