[CalendarServer-changes] [2000]
CalendarServer/branches/release/CalendarServer-1.1-dev
source_changes at macosforge.org
source_changes at macosforge.org
Tue Oct 30 11:33:52 PDT 2007
Revision: 2000
http://trac.macosforge.org/projects/calendarserver/changeset/2000
Author: wsanchez at apple.com
Date: 2007-10-30 11:33:51 -0700 (Tue, 30 Oct 2007)
Log Message:
-----------
Pulled up r1950 from trunk.
Modified Paths:
--------------
CalendarServer/branches/release/CalendarServer-1.1-dev/conf/accounts.dtd
CalendarServer/branches/release/CalendarServer-1.1-dev/twistedcaldav/directory/principal.py
CalendarServer/branches/release/CalendarServer-1.1-dev/twistedcaldav/directory/test/accounts.xml
CalendarServer/branches/release/CalendarServer-1.1-dev/twistedcaldav/directory/test/test_principal.py
CalendarServer/branches/release/CalendarServer-1.1-dev/twistedcaldav/directory/test/test_proxyprincipalmembers.py
CalendarServer/branches/release/CalendarServer-1.1-dev/twistedcaldav/directory/test/test_xmlfile.py
CalendarServer/branches/release/CalendarServer-1.1-dev/twistedcaldav/directory/test/util.py
CalendarServer/branches/release/CalendarServer-1.1-dev/twistedcaldav/directory/xmlaccountsparser.py
CalendarServer/branches/release/CalendarServer-1.1-dev/twistedcaldav/directory/xmlfile.py
Modified: CalendarServer/branches/release/CalendarServer-1.1-dev/conf/accounts.dtd
===================================================================
--- CalendarServer/branches/release/CalendarServer-1.1-dev/conf/accounts.dtd 2007-10-30 18:31:54 UTC (rev 1999)
+++ CalendarServer/branches/release/CalendarServer-1.1-dev/conf/accounts.dtd 2007-10-30 18:33:51 UTC (rev 2000)
@@ -22,7 +22,7 @@
<!ELEMENT user (uid, guid, password, name, cuaddr*)>
<!ATTLIST user repeat CDATA "1">
- <!ELEMENT group (uid, guid, password, name, members, cuaddr*)>
+ <!ELEMENT group (uid, guid, password, name, members, cuaddr*, disable-calendar?)>
<!ATTLIST group repeat CDATA "1">
<!ELEMENT resource (uid, guid, password, name, cuaddr*, auto-schedule?, proxies?)>
@@ -34,12 +34,13 @@
<!ELEMENT member (#PCDATA)>
<!ATTLIST member type (users|groups|locations|resources) "users">
- <!ELEMENT uid (#PCDATA)>
- <!ELEMENT guid (#PCDATA)>
- <!ELEMENT password (#PCDATA)>
- <!ELEMENT name (#PCDATA)>
- <!ELEMENT cuaddr (#PCDATA)>
- <!ELEMENT members (member*)>
- <!ELEMENT auto-schedule EMPTY>
- <!ELEMENT proxies (member*)>
+ <!ELEMENT uid (#PCDATA)>
+ <!ELEMENT guid (#PCDATA)>
+ <!ELEMENT password (#PCDATA)>
+ <!ELEMENT name (#PCDATA)>
+ <!ELEMENT cuaddr (#PCDATA)>
+ <!ELEMENT members (member*)>
+ <!ELEMENT auto-schedule EMPTY>
+ <!ELEMENT disable-calendar EMPTY>
+ <!ELEMENT proxies (member*)>
>
Modified: CalendarServer/branches/release/CalendarServer-1.1-dev/twistedcaldav/directory/principal.py
===================================================================
--- CalendarServer/branches/release/CalendarServer-1.1-dev/twistedcaldav/directory/principal.py 2007-10-30 18:31:54 UTC (rev 1999)
+++ CalendarServer/branches/release/CalendarServer-1.1-dev/twistedcaldav/directory/principal.py 2007-10-30 18:33:51 UTC (rev 2000)
@@ -456,6 +456,21 @@
# ACL
##
+ def _calendar_user_proxy_index(self):
+ """
+ Return the SQL database for calendar user proxies.
+
+ @return: the L{CalendarUserProxyDatabase} for the principal collection.
+ """
+
+ # Get the principal collection we are contained in
+ pcollection = self.parent.parent
+
+ # The db is located in the principal collection root
+ if not hasattr(pcollection, "calendar_user_proxy_db"):
+ setattr(pcollection, "calendar_user_proxy_db", CalendarUserProxyDatabase(pcollection.fp.path))
+ return pcollection.calendar_user_proxy_db
+
def alternateURIs(self):
# FIXME: Add API to IDirectoryRecord for getting a record URI?
return self._alternate_urls
@@ -492,8 +507,24 @@
return self._getRelatives("members")
def groupMemberships(self):
- return self._getRelatives("groups")
+ groups = self._getRelatives("groups")
+ if config.EnableProxyPrincipals:
+ # Get any directory specified proxies
+ groups.update(self._getRelatives("proxyFor", proxy=True))
+
+ # Get proxy group UIDs and map to principal resources
+ proxies = []
+ for uid in self._calendar_user_proxy_index().getMemberships(self.principalUID()):
+ subprincipal = self.parent.principalForUID(uid)
+ if subprincipal:
+ proxies.append(subprincipal)
+
+ groups.update(proxies)
+
+ return groups
+
+
def principalCollections(self):
return self.parent.principalCollections()
@@ -577,43 +608,6 @@
return d
##
- # ACL
- ##
-
- def _calendar_user_proxy_index(self):
- """
- Return the SQL database for calendar user proxies.
-
- @return: the L{CalendarUserProxyDatabase} for the principal collection.
- """
-
- # Get the principal collection we are contained in
- pcollection = self.parent.parent
-
- # The db is located in the principal collection root
- if not hasattr(pcollection, "calendar_user_proxy_db"):
- setattr(pcollection, "calendar_user_proxy_db", CalendarUserProxyDatabase(pcollection.fp.path))
- return pcollection.calendar_user_proxy_db
-
- def groupMemberships(self):
- groups = self._getRelatives("groups")
-
- if config.EnableProxyPrincipals:
- # Get any directory specified proxies
- groups.update(self._getRelatives("proxyFor", proxy=True))
-
- # Get proxy group UIDs and map to principal resources
- proxies = []
- for uid in self._calendar_user_proxy_index().getMemberships(self.principalUID()):
- subprincipal = self.parent.principalForUID(uid)
- if subprincipal:
- proxies.append(subprincipal)
-
- groups.update(proxies)
-
- return groups
-
- ##
# CalDAV
##
Modified: CalendarServer/branches/release/CalendarServer-1.1-dev/twistedcaldav/directory/test/accounts.xml
===================================================================
--- CalendarServer/branches/release/CalendarServer-1.1-dev/twistedcaldav/directory/test/accounts.xml 2007-10-30 18:31:54 UTC (rev 1999)
+++ CalendarServer/branches/release/CalendarServer-1.1-dev/twistedcaldav/directory/test/accounts.xml 2007-10-30 18:33:51 UTC (rev 2000)
@@ -129,6 +129,16 @@
<member>cdaboo</member>
</members>
</group>
+ <group>
+ <uid>non_calendar_group</uid>
+ <password>non_calendar_group</password>
+ <name>Non-calendar group</name>
+ <members>
+ <member>cdaboo</member>
+ <member>lecroy</member>
+ </members>
+ <disable-calendar/>
+ </group>
<location>
<uid>mercury</uid>
<password>mercury</password>
@@ -178,4 +188,14 @@
<name>Faster-Than-Light Microprocessor</name>
<cuaddr>mailto:ftlcpu at example.com</cuaddr>
</resource>
+ <resource>
+ <uid>non_calendar_proxy</uid>
+ <guid>non_calendar_proxy</guid>
+ <password>non_calendar_proxy</password>
+ <name>Non-calendar proxy</name>
+ <cuaddr>mailto:non_calendar_proxy at example.com</cuaddr>
+ <proxies>
+ <member type="groups">non_calendar_group</member>
+ </proxies>
+ </resource>
</accounts>
Modified: CalendarServer/branches/release/CalendarServer-1.1-dev/twistedcaldav/directory/test/test_principal.py
===================================================================
--- CalendarServer/branches/release/CalendarServer-1.1-dev/twistedcaldav/directory/test/test_principal.py 2007-10-30 18:31:54 UTC (rev 1999)
+++ CalendarServer/branches/release/CalendarServer-1.1-dev/twistedcaldav/directory/test/test_principal.py 2007-10-30 18:33:51 UTC (rev 2000)
@@ -40,6 +40,7 @@
from twistedcaldav.directory.principal import DirectoryPrincipalProvisioningResource
from twistedcaldav.directory.principal import DirectoryPrincipalTypeProvisioningResource
from twistedcaldav.directory.principal import DirectoryPrincipalResource
+from twistedcaldav.directory.principal import DirectoryCalendarPrincipalResource
import twistedcaldav.test.util
@@ -198,10 +199,26 @@
for provisioningResource, recordType, recordResource, record in self._allRecords():
principal = provisioningResource.principalForRecord(record)
self.failIf(principal is None)
- self.assertEquals(record.autoSchedule, principal.autoSchedule())
- if record.shortName == "gemini":
- self.assertTrue(principal.autoSchedule())
+ if record.enabledForCalendaring:
+ self.assertEquals(record.autoSchedule, principal.autoSchedule())
+ if record.shortName == "gemini":
+ self.assertTrue(principal.autoSchedule())
+ else:
+ self.assertFalse(principal.autoSchedule())
+ def test_enabledForCalendaring(self):
+ """
+ DirectoryPrincipalProvisioningResource.principalForCalendarUserAddress()
+ """
+ for provisioningResource, recordType, recordResource, record in self._allRecords():
+ principal = provisioningResource.principalForRecord(record)
+ self.failIf(principal is None)
+ if record.enabledForCalendaring:
+ self.assertTrue(isinstance(principal, DirectoryCalendarPrincipalResource))
+ else:
+ self.assertTrue(isinstance(principal, DirectoryPrincipalResource))
+ self.assertFalse(isinstance(principal, DirectoryCalendarPrincipalResource))
+
# FIXME: Run DirectoryPrincipalProvisioningResource tests on DirectoryPrincipalTypeProvisioningResource also
##
@@ -234,8 +251,9 @@
DirectoryPrincipalResource.proxies()
"""
for provisioningResource, recordType, recordResource, record in self._allRecords():
- self.failUnless(set(record.proxies()).issubset(set(r.record for r in recordResource.proxies())))
- self.assertEqual(record.hasEditableProxyMembership(), recordResource.hasEditableProxyMembership())
+ if record.enabledForCalendaring:
+ self.failUnless(set(record.proxies()).issubset(set(r.record for r in recordResource.proxies())))
+ self.assertEqual(record.hasEditableProxyMembership(), recordResource.hasEditableProxyMembership())
def test_principalUID(self):
"""
@@ -249,12 +267,13 @@
DirectoryPrincipalResource.calendarUserAddresses()
"""
for provisioningResource, recordType, recordResource, record in self._allRecords():
- self.failUnless(
- (
- set((recordResource.principalURL(),)) |
- set(record.calendarUserAddresses)
- ).issubset(set(recordResource.calendarUserAddresses()))
- )
+ if record.enabledForCalendaring:
+ self.failUnless(
+ (
+ set((recordResource.principalURL(),)) |
+ set(record.calendarUserAddresses)
+ ).issubset(set(recordResource.calendarUserAddresses()))
+ )
def test_calendarHomeURLs(self):
"""
@@ -264,9 +283,10 @@
"""
# No calendar home provisioner should result in no calendar homes.
for provisioningResource, recordType, recordResource, record in self._allRecords():
- self.failIf(tuple(recordResource.calendarHomeURLs()))
- self.failIf(recordResource.scheduleInboxURL())
- self.failIf(recordResource.scheduleOutboxURL())
+ if record.enabledForCalendaring:
+ self.failIf(tuple(recordResource.calendarHomeURLs()))
+ self.failIf(recordResource.scheduleInboxURL())
+ self.failIf(recordResource.scheduleOutboxURL())
# Need to create a calendar home provisioner for each service.
calendarRootResources = {}
@@ -285,33 +305,34 @@
# Calendar home provisioners should result in calendar homes.
for provisioningResource, recordType, recordResource, record in self._allRecords():
- homeURLs = tuple(recordResource.calendarHomeURLs())
- self.failUnless(homeURLs)
+ if record.enabledForCalendaring:
+ homeURLs = tuple(recordResource.calendarHomeURLs())
+ self.failUnless(homeURLs)
+
+ calendarRootURL = calendarRootResources[record.service.__class__.__name__].url()
+
+ inboxURL = recordResource.scheduleInboxURL()
+ outboxURL = recordResource.scheduleOutboxURL()
+
+ self.failUnless(inboxURL)
+ self.failUnless(outboxURL)
+
+ for homeURL in homeURLs:
+ self.failUnless(homeURL.startswith(calendarRootURL))
+
+ if inboxURL and inboxURL.startswith(homeURL):
+ self.failUnless(len(inboxURL) > len(homeURL))
+ self.failUnless(inboxURL.endswith("/"))
+ inboxURL = None
+
+ if outboxURL and outboxURL.startswith(homeURL):
+ self.failUnless(len(outboxURL) > len(homeURL))
+ self.failUnless(outboxURL.endswith("/"))
+ outboxURL = None
+
+ self.failIf(inboxURL)
+ self.failIf(outboxURL)
- calendarRootURL = calendarRootResources[record.service.__class__.__name__].url()
-
- inboxURL = recordResource.scheduleInboxURL()
- outboxURL = recordResource.scheduleOutboxURL()
-
- self.failUnless(inboxURL)
- self.failUnless(outboxURL)
-
- for homeURL in homeURLs:
- self.failUnless(homeURL.startswith(calendarRootURL))
-
- if inboxURL and inboxURL.startswith(homeURL):
- self.failUnless(len(inboxURL) > len(homeURL))
- self.failUnless(inboxURL.endswith("/"))
- inboxURL = None
-
- if outboxURL and outboxURL.startswith(homeURL):
- self.failUnless(len(outboxURL) > len(homeURL))
- self.failUnless(outboxURL.endswith("/"))
- outboxURL = None
-
- self.failIf(inboxURL)
- self.failIf(outboxURL)
-
def test_defaultAccessControlList_principals(self):
"""
Default access controls for principals.
Modified: CalendarServer/branches/release/CalendarServer-1.1-dev/twistedcaldav/directory/test/test_proxyprincipalmembers.py
===================================================================
--- CalendarServer/branches/release/CalendarServer-1.1-dev/twistedcaldav/directory/test/test_proxyprincipalmembers.py 2007-10-30 18:31:54 UTC (rev 1999)
+++ CalendarServer/branches/release/CalendarServer-1.1-dev/twistedcaldav/directory/test/test_proxyprincipalmembers.py 2007-10-30 18:33:51 UTC (rev 2000)
@@ -100,6 +100,18 @@
members = set([p.displayName() for p in members])
self.assertEquals(members, set(('Wilfredo Sanchez', 'Cyrus Daboo', 'Recursive1 Coasts', 'Recursive2 Coasts',)))
+ def test_groupMembersProxySingleGroupWithNonCalendarGroup(self):
+ """
+ DirectoryPrincipalResource.groupMembers()
+ """
+ members = self._getRecordByShortName(DirectoryService.recordType_resources, "non_calendar_proxy").getChild("calendar-proxy-write").groupMembers()
+ members = set([p.displayName() for p in members])
+ self.assertEquals(members, set(('Chris Lecroy', 'Cyrus Daboo', 'Non-calendar group')))
+
+ memberships = self._getRecordByShortName(DirectoryService.recordType_groups, "non_calendar_group").groupMemberships()
+ memberships = set([p.principalUID() for p in memberships])
+ self.assertEquals(memberships, set(('non_calendar_proxy#calendar-proxy-write',)))
+
def _getRecordByShortName(self, type, name):
"""
@return: an iterable of tuples
Modified: CalendarServer/branches/release/CalendarServer-1.1-dev/twistedcaldav/directory/test/test_xmlfile.py
===================================================================
--- CalendarServer/branches/release/CalendarServer-1.1-dev/twistedcaldav/directory/test/test_xmlfile.py 2007-10-30 18:31:54 UTC (rev 1999)
+++ CalendarServer/branches/release/CalendarServer-1.1-dev/twistedcaldav/directory/test/test_xmlfile.py 2007-10-30 18:33:51 UTC (rev 2000)
@@ -58,10 +58,12 @@
(DirectoryService.recordType_users , "lecroy")) },
"both_coasts": { "password": "both_coasts", "guid": None, "addresses": (), "members": ((DirectoryService.recordType_groups, "right_coast"),
(DirectoryService.recordType_groups, "left_coast")) },
- "recursive1_coasts": { "password": "recursive1_coasts", "guid": None, "addresses": (), "members": ((DirectoryService.recordType_groups, "recursive2_coasts"),
+ "recursive1_coasts": { "password": "recursive1_coasts", "guid": None, "addresses": (), "members": ((DirectoryService.recordType_groups, "recursive2_coasts"),
(DirectoryService.recordType_users, "wsanchez")) },
- "recursive2_coasts": { "password": "recursive2_coasts", "guid": None, "addresses": (), "members": ((DirectoryService.recordType_groups, "recursive1_coasts"),
+ "recursive2_coasts": { "password": "recursive2_coasts", "guid": None, "addresses": (), "members": ((DirectoryService.recordType_groups, "recursive1_coasts"),
(DirectoryService.recordType_users, "cdaboo")) },
+ "non_calendar_group": { "password": "non_calendar_group", "guid": None, "addresses": (), "members": ((DirectoryService.recordType_users , "cdaboo"),
+ (DirectoryService.recordType_users , "lecroy")) },
}
locations = {
@@ -72,8 +74,9 @@
}
resources = {
- "transporter": { "password": "transporter", "guid": None, "addresses": ("mailto:transporter at example.com",) },
- "ftlcpu" : { "password": "ftlcpu", "guid": None, "addresses": ("mailto:ftlcpu at example.com",) },
+ "transporter" : { "password": "transporter", "guid": None, "addresses": ("mailto:transporter at example.com",) },
+ "ftlcpu" : { "password": "ftlcpu", "guid": None, "addresses": ("mailto:ftlcpu at example.com",) },
+ "non_calendar_proxy" : { "password": "non_calendar_proxy", "guid": "non_calendar_proxy", "addresses": ("mailto:non_calendar_proxy at example.com",) },
}
def xmlFile(self):
@@ -168,7 +171,63 @@
set(r.shortName for r in service.listRecords(DirectoryService.recordType_users))
self.assertRaises(ValueError, _findRecords)
+
+ def test_okDisableCalendar(self):
+ service = self.service()
+ self.xmlFile().open("w").write(
+"""<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE accounts SYSTEM "accounts.dtd">
+<accounts realm="Test Realm">
+ <group>
+ <uid>enabled</uid>
+ <password>enabled</password>
+ <name>Enabled</name>
+ </group>
+ <group>
+ <uid>disabled</uid>
+ <password>disabled</password>
+ <name>Disabled</name>
+ <disable-calendar/>
+ </group>
+</accounts>
+"""
+ )
+ for recordType, expectedRecords in (
+ ( DirectoryService.recordType_users , () ),
+ ( DirectoryService.recordType_groups , ("enabled", "disabled") ),
+ ( DirectoryService.recordType_locations , () ),
+ ( DirectoryService.recordType_resources , () ),
+ ):
+ self.assertEquals(
+ set(r.shortName for r in service.listRecords(recordType)),
+ set(expectedRecords)
+ )
+ self.assertTrue(service.recordWithShortName(DirectoryService.recordType_groups, "enabled").enabledForCalendaring)
+ self.assertFalse(service.recordWithShortName(DirectoryService.recordType_groups, "disabled").enabledForCalendaring)
+
+ def test_badDisableCalendar(self):
+ service = self.service()
+
+ self.xmlFile().open("w").write(
+"""<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE accounts SYSTEM "accounts.dtd">
+<accounts realm="Test Realm">
+ <user>
+ <uid>my office</uid>
+ <password>nimda</password>
+ <name>Super User</name>
+ <disable-calendar/>
+ </user>
+</accounts>
+"""
+ )
+
+ def _findRecords():
+ set(r.shortName for r in service.listRecords(DirectoryService.recordType_users))
+
+ self.assertRaises(ValueError, _findRecords)
+
def test_okProxies(self):
service = self.service()
Modified: CalendarServer/branches/release/CalendarServer-1.1-dev/twistedcaldav/directory/test/util.py
===================================================================
--- CalendarServer/branches/release/CalendarServer-1.1-dev/twistedcaldav/directory/test/util.py 2007-10-30 18:31:54 UTC (rev 1999)
+++ CalendarServer/branches/release/CalendarServer-1.1-dev/twistedcaldav/directory/test/util.py 2007-10-30 18:33:51 UTC (rev 2000)
@@ -231,7 +231,8 @@
guid = record.guid
addresses = set(value("addresses"))
- addresses.add("urn:uuid:%s" % (record.guid,))
+ if record.enabledForCalendaring:
+ addresses.add("urn:uuid:%s" % (record.guid,))
if hasattr(record.service, "recordTypePrefix"):
prefix = record.service.recordTypePrefix
Modified: CalendarServer/branches/release/CalendarServer-1.1-dev/twistedcaldav/directory/xmlaccountsparser.py
===================================================================
--- CalendarServer/branches/release/CalendarServer-1.1-dev/twistedcaldav/directory/xmlaccountsparser.py 2007-10-30 18:31:54 UTC (rev 1999)
+++ CalendarServer/branches/release/CalendarServer-1.1-dev/twistedcaldav/directory/xmlaccountsparser.py 2007-10-30 18:33:51 UTC (rev 2000)
@@ -31,25 +31,26 @@
from twistedcaldav.directory.directory import DirectoryService
-ELEMENT_ACCOUNTS = "accounts"
-ELEMENT_USER = "user"
-ELEMENT_GROUP = "group"
-ELEMENT_LOCATION = "location"
-ELEMENT_RESOURCE = "resource"
+ELEMENT_ACCOUNTS = "accounts"
+ELEMENT_USER = "user"
+ELEMENT_GROUP = "group"
+ELEMENT_LOCATION = "location"
+ELEMENT_RESOURCE = "resource"
-ELEMENT_SHORTNAME = "uid"
-ELEMENT_GUID = "guid"
-ELEMENT_PASSWORD = "password"
-ELEMENT_NAME = "name"
-ELEMENT_MEMBERS = "members"
-ELEMENT_MEMBER = "member"
-ELEMENT_CUADDR = "cuaddr"
-ELEMENT_AUTOSCHEDULE = "auto-schedule"
-ELEMENT_PROXIES = "proxies"
+ELEMENT_SHORTNAME = "uid"
+ELEMENT_GUID = "guid"
+ELEMENT_PASSWORD = "password"
+ELEMENT_NAME = "name"
+ELEMENT_MEMBERS = "members"
+ELEMENT_MEMBER = "member"
+ELEMENT_CUADDR = "cuaddr"
+ELEMENT_AUTOSCHEDULE = "auto-schedule"
+ELEMENT_DISABLECALENDAR = "disable-calendar"
+ELEMENT_PROXIES = "proxies"
-ATTRIBUTE_REALM = "realm"
-ATTRIBUTE_REPEAT = "repeat"
-ATTRIBUTE_RECORDTYPE = "type"
+ATTRIBUTE_REALM = "realm"
+ATTRIBUTE_REPEAT = "repeat"
+ATTRIBUTE_RECORDTYPE = "type"
RECORD_TYPES = {
ELEMENT_USER : DirectoryService.recordType_users,
@@ -157,6 +158,7 @@
self.groups = set()
self.calendarUserAddresses = set()
self.autoSchedule = False
+ self.enabledForCalendaring = True
self.proxies = set()
self.proxyFor = set()
@@ -227,6 +229,11 @@
if self.recordType not in (DirectoryService.recordType_resources, DirectoryService.recordType_locations):
raise ValueError("<auto-schedule> element only allowed for Resources and Locations: %s" % (child_name,))
self.autoSchedule = True
+ elif child_name == ELEMENT_DISABLECALENDAR:
+ # Only Groups
+ if self.recordType not in (DirectoryService.recordType_groups):
+ raise ValueError("<disable-calendar> element only allowed for Groups: %s" % (child_name,))
+ self.enabledForCalendaring = False
elif child_name == ELEMENT_PROXIES:
# Only Resources & Locations
if self.recordType not in (DirectoryService.recordType_resources, DirectoryService.recordType_locations):
Modified: CalendarServer/branches/release/CalendarServer-1.1-dev/twistedcaldav/directory/xmlfile.py
===================================================================
--- CalendarServer/branches/release/CalendarServer-1.1-dev/twistedcaldav/directory/xmlfile.py 2007-10-30 18:31:54 UTC (rev 1999)
+++ CalendarServer/branches/release/CalendarServer-1.1-dev/twistedcaldav/directory/xmlfile.py 2007-10-30 18:33:51 UTC (rev 2000)
@@ -112,6 +112,7 @@
fullName = xmlPrincipal.name,
calendarUserAddresses = xmlPrincipal.calendarUserAddresses,
autoSchedule = xmlPrincipal.autoSchedule,
+ enabledForCalendaring = xmlPrincipal.enabledForCalendaring,
)
self.password = xmlPrincipal.password
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20071030/7e4580a7/attachment-0001.html
More information about the calendarserver-changes
mailing list