[CalendarServer-changes] [4222] CalendarServer/trunk
source_changes at macosforge.org
source_changes at macosforge.org
Fri May 8 20:05:44 PDT 2009
Revision: 4222
http://trac.macosforge.org/projects/calendarserver/changeset/4222
Author: cdaboo at apple.com
Date: 2009-05-08 20:05:43 -0700 (Fri, 08 May 2009)
Log Message:
-----------
Make sure REPLY processing ignores invalid instances. Make sure REPLYs only contain the minimum set
of instances being changed.
Modified Paths:
--------------
CalendarServer/trunk/run
CalendarServer/trunk/twistedcaldav/scheduling/icaldiff.py
CalendarServer/trunk/twistedcaldav/scheduling/implicit.py
CalendarServer/trunk/twistedcaldav/scheduling/itip.py
CalendarServer/trunk/twistedcaldav/scheduling/test/test_icaldiff.py
Modified: CalendarServer/trunk/run
===================================================================
--- CalendarServer/trunk/run 2009-05-09 03:02:13 UTC (rev 4221)
+++ CalendarServer/trunk/run 2009-05-09 03:05:43 UTC (rev 4222)
@@ -727,7 +727,7 @@
caldavtester="${top}/CalDAVTester";
-svn_get "CalDAVTester" "${caldavtester}" "${svn_uri_base}/CalDAVTester/trunk" 4212;
+svn_get "CalDAVTester" "${caldavtester}" "${svn_uri_base}/CalDAVTester/trunk" 4221;
#
# PyFlakes
Modified: CalendarServer/trunk/twistedcaldav/scheduling/icaldiff.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/scheduling/icaldiff.py 2009-05-09 03:02:13 UTC (rev 4221)
+++ CalendarServer/trunk/twistedcaldav/scheduling/icaldiff.py 2009-05-09 03:05:43 UTC (rev 4222)
@@ -293,7 +293,7 @@
# Mark Attendee as DECLINED in the server instance
if self._attendeeDecline(self.newCalendar.overriddenComponent(rid)):
changeCausesReply = True
- changedRids.append(rid)
+ changedRids.append(toString(rid) if rid else "")
else:
log.debug("attendeeMerge: Missing uncancelled component from first calendar: %s" % (key,))
return False, False, (), None
@@ -356,7 +356,7 @@
return False, False, (), None
changeCausesReply |= reply
if reply:
- changedRids.append(rid)
+ changedRids.append(toString(rid) if rid else "")
# We need to derive instances for any declined using an EXDATE
for decline in sorted(declines):
@@ -367,7 +367,7 @@
self.newCalendar.addComponent(overridden)
if self._attendeeDecline(overridden):
changeCausesReply = True
- changedRids.append(decline)
+ changedRids.append(toString(decline) if decline else "")
else:
log.debug("Unable to override and instance to mark as DECLINED: %s" % (decline,))
return False, False, (), None
Modified: CalendarServer/trunk/twistedcaldav/scheduling/implicit.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/scheduling/implicit.py 2009-05-09 03:02:13 UTC (rev 4221)
+++ CalendarServer/trunk/twistedcaldav/scheduling/implicit.py 2009-05-09 03:05:43 UTC (rev 4222)
@@ -726,7 +726,7 @@
if self.organizer_calendar:
# Determine whether the current change is allowed
- changeAllowed, doITipReply, _ignore_changedRids, newCalendar = self.isAttendeeChangeInsignificant()
+ changeAllowed, doITipReply, changedRids, newCalendar = self.isAttendeeChangeInsignificant()
if changeAllowed:
self.return_calendar = self.calendar = newCalendar
@@ -759,10 +759,10 @@
# to make any change they like as we cannot verify what is reasonable. In reality
# we ought to be comparing the Attendee changes against the attendee's own copy
# and restrict changes based on that when the organizer's copy is not available.
- pass
+ changedRids = None
log.debug("Implicit - attendee '%s' is updating UID: '%s'" % (self.attendee, self.uid))
- yield self.scheduleWithOrganizer()
+ yield self.scheduleWithOrganizer(changedRids)
@inlineCallbacks
def getOrganizersCopy(self):
@@ -811,16 +811,16 @@
differ = iCalDiff(oldcalendar, self.calendar, self.do_smart_merge)
return differ.attendeeMerge(self.attendee)
- def scheduleWithOrganizer(self):
+ def scheduleWithOrganizer(self, changedRids=None):
- itipmsg = iTipGenerator.generateAttendeeReply(self.calendar, self.attendee)
+ itipmsg = iTipGenerator.generateAttendeeReply(self.calendar, self.attendee, changedRids=changedRids)
# Send scheduling message
return self.sendToOrganizer("REPLY", itipmsg)
def scheduleCancelWithOrganizer(self):
- itipmsg = iTipGenerator.generateAttendeeReply(self.calendar, self.attendee, True)
+ itipmsg = iTipGenerator.generateAttendeeReply(self.calendar, self.attendee, force_decline=True)
# Send scheduling message
return self.sendToOrganizer("CANCEL", itipmsg)
Modified: CalendarServer/trunk/twistedcaldav/scheduling/itip.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/scheduling/itip.py 2009-05-09 03:02:13 UTC (rev 4221)
+++ CalendarServer/trunk/twistedcaldav/scheduling/itip.py 2009-05-09 03:05:43 UTC (rev 4222)
@@ -304,6 +304,9 @@
match_component = calendar.deriveInstance(rid)
if match_component:
calendar.addComponent(match_component)
+ else:
+ log.error("Ignoring instance: %s in iTIP REPLY for: %s" % (rid, itip_message.resourceUID()))
+ continue
attendee, partstat, private_comment = iTipProcessing.updateAttendeeData(itip_component, match_component)
attendees.add(attendee)
@@ -571,13 +574,16 @@
return None
@staticmethod
- def generateAttendeeReply(original, attendee, force_decline=False):
+ def generateAttendeeReply(original, attendee, changedRids=None, force_decline=False):
# Start with a copy of the original as we may have to modify bits of it
itip = original.duplicate()
itip.replaceProperty(Property("PRODID", iCalendarProductID))
itip.addProperty(Property("METHOD", "REPLY"))
-
+
+ # Now filter out components except the ones specified
+ itip.filterComponents(changedRids)
+
# Force update to DTSTAMP everywhere
itip.replacePropertyInAllComponents(Property("DTSTAMP", datetime.datetime.now(tz=utc)))
@@ -592,6 +598,7 @@
"UID",
"RECURRENCE-ID",
"SEQUENCE",
+ "STATUS",
"DTSTAMP",
"DTSTART",
"DTEND",
Modified: CalendarServer/trunk/twistedcaldav/scheduling/test/test_icaldiff.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/scheduling/test/test_icaldiff.py 2009-05-09 03:02:13 UTC (rev 4221)
+++ CalendarServer/trunk/twistedcaldav/scheduling/test/test_icaldiff.py 2009-05-09 03:05:43 UTC (rev 4222)
@@ -18,7 +18,6 @@
from twistedcaldav.scheduling.icaldiff import iCalDiff
import twistedcaldav.test.util
from difflib import unified_diff
-from twistedcaldav.dateops import toString
import itertools
@@ -552,7 +551,7 @@
END:VCALENDAR
""",
"mailto:user2 at example.com",
- (True, True, (None,), """BEGIN:VCALENDAR
+ (True, True, ("",), """BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
BEGIN:VEVENT
@@ -1122,7 +1121,7 @@
diffResult = (
diffResult[0],
diffResult[1],
- tuple([toString(i) if i else None for i in diffResult[2]]),
+ tuple(diffResult[2]),
str(diffResult[3]).replace("\r", "") if diffResult[3] else None,
)
self.assertEqual(diffResult, result, msg="%s: actual result: (%s)" % (description, ", ".join([str(i).replace("\r", "") for i in diffResult]),))
@@ -1568,7 +1567,7 @@
diffResult = (
diffResult[0],
diffResult[1],
- tuple([toString(i) if i else None for i in diffResult[2]]),
+ tuple(diffResult[2]),
str(diffResult[3]).replace("\r", "") if diffResult[3] else None,
)
self.assertEqual(diffResult, result, msg="%s: actual result: (%s)" % (description, ", ".join([str(i).replace("\r", "") for i in diffResult]),))
@@ -1910,7 +1909,7 @@
diffResult = (
diffResult[0],
diffResult[1],
- tuple([toString(i) if i else None for i in diffResult[2]]),
+ tuple(diffResult[2]),
str(diffResult[3]).replace("\r", "") if diffResult[3] else None,
)
self.assertEqual(diffResult, result, msg="%s: actual result: (%s)" % (description, ", ".join([str(i).replace("\r", "") for i in diffResult]),))
@@ -2248,7 +2247,7 @@
diffResult = (
diffResult[0],
diffResult[1],
- tuple([toString(i) if i else None for i in diffResult[2]]),
+ tuple(diffResult[2]),
str(diffResult[3]).replace("\r", "") if diffResult[3] else None,
)
self.assertEqual(diffResult, result, msg="%s: actual result: (%s)" % (description, ", ".join([str(i).replace("\r", "") for i in diffResult]),))
@@ -2499,7 +2498,7 @@
diffResult = (
diffResult[0],
diffResult[1],
- tuple([toString(i) if i else None for i in diffResult[2]]),
+ tuple(diffResult[2]),
str(diffResult[3]).replace("\r", "") if diffResult[3] else None,
)
self.assertEqual(diffResult, result, msg="%s: actual result: (%s)" % (description, ", ".join([str(i).replace("\r", "") for i in diffResult]),))
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20090508/f4b075bf/attachment-0001.html>
More information about the calendarserver-changes
mailing list