[CalendarServer-changes] [2304] CalendarServer/trunk/twistedcaldav/directory

source_changes at macosforge.org source_changes at macosforge.org
Fri Apr 11 20:08:28 PDT 2008


Revision: 2304
          http://trac.macosforge.org/projects/calendarserver/changeset/2304
Author:   cdaboo at apple.com
Date:     2008-04-11 20:08:28 -0700 (Fri, 11 Apr 2008)

Log Message:
-----------
Make sure invalid plist in directory record does not cause cache reload to fail.

Modified Paths:
--------------
    CalendarServer/trunk/twistedcaldav/directory/appleopendirectory.py
    CalendarServer/trunk/twistedcaldav/directory/test/test_opendirectoryschema.py

Modified: CalendarServer/trunk/twistedcaldav/directory/appleopendirectory.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/directory/appleopendirectory.py	2008-04-11 21:23:17 UTC (rev 2303)
+++ CalendarServer/trunk/twistedcaldav/directory/appleopendirectory.py	2008-04-12 03:08:28 UTC (rev 2304)
@@ -338,19 +338,31 @@
                 
         return result
 
-    def _parseResourceInfo(self, plist):
+    def _parseResourceInfo(self, plist, guid, shortname):
         """
         Parse OD ResourceInfo attribute and extract information that the server needs.
 
         @param plist: the plist that is the attribute value.
         @type plist: str
+        @param guid: the directory GUID of the record being parsed.
+        @type guid: str
+        @param shortname: the record shortname of the record being parsed.
+        @type shortname: str
         @return: a C{tuple} of C{bool} for auto-accept and C{str} for proxy GUID.
         """
-        plist = readPlistFromString(plist)
-        wpframework = plist.get("com.apple.WhitePagesFramework", {})
-        autoaccept = wpframework.get("AutoAcceptsInvitation", False)
-        proxy = wpframework.get("CalendaringDelegate")
-        
+        try:
+            plist = readPlistFromString(plist)
+            wpframework = plist.get("com.apple.WhitePagesFramework", {})
+            autoaccept = wpframework.get("AutoAcceptsInvitation", False)
+            proxy = wpframework.get("CalendaringDelegate")
+        except AttributeError:
+            logging.err(
+                "Failed to parse ResourceInfo attribute of record %s (%s): %s" %
+                (shortname, guid, plist,)
+            )
+            autoaccept = False
+            proxy = None
+
         return (autoaccept, proxy)
 
     def recordTypes(self):
@@ -535,7 +547,7 @@
             if recordType in (DirectoryService.recordType_resources, DirectoryService.recordType_locations):
                 resourceInfo = value.get(dsattributes.kDSNAttrResourceInfo)
                 if resourceInfo is not None:
-                    autoSchedule, proxy = self._parseResourceInfo(resourceInfo)
+                    autoSchedule, proxy = self._parseResourceInfo(resourceInfo, recordGUID, recordShortName)
                     if proxy:
                         proxyGUIDs = (proxy,)
 

Modified: CalendarServer/trunk/twistedcaldav/directory/test/test_opendirectoryschema.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/directory/test/test_opendirectoryschema.py	2008-04-11 21:23:17 UTC (rev 2303)
+++ CalendarServer/trunk/twistedcaldav/directory/test/test_opendirectoryschema.py	2008-04-12 03:08:28 UTC (rev 2304)
@@ -1248,23 +1248,30 @@
 </plist>
 """
 
+        plist_invalid = """<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+    <key>com.apple.WhitePagesFramework</key>
+    <string>bogus</string>
+    <string>another bogon</string>
+</dict>
+</plist>
+"""
+
         test_bool = (
             (plist_good_false, False, "1234-GUID-5678"),
             (plist_good_true, True, ""),
             (plist_good_missing, False, None),
             (plist_wrong, False, None),
+            (plist_bad, False, None),
+            (plist_invalid, False, None),
         )
 
-        test_exception = (
-            (plist_bad, AttributeError),
-        )
-
         def test_plists(self):
             service = OpenDirectoryService(node="/Search", dosetup=False)
             
             for item in ODResourceInfoParse.test_bool:
-                self.assertEqual(service._parseResourceInfo(item[0])[0], item[1])
-                self.assertEqual(service._parseResourceInfo(item[0])[1], item[2])
-            
-            for item in ODResourceInfoParse.test_exception:
-                self.assertRaises(item[1], service._parseResourceInfo, item[0])
+                item1, item2 = service._parseResourceInfo(item[0], "guid", "name")
+                self.assertEqual(item1, item[1])
+                self.assertEqual(item2, item[2])

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


More information about the calendarserver-changes mailing list