<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[13170] CalendarServer/branches/users/sagen/move2who-4</title>
</head>
<body>
<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; }
#msg dl a { font-weight: bold}
#msg dl a:link { color:#fc3; }
#msg dl a:active { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.calendarserver.org//changeset/13170">13170</a></dd>
<dt>Author</dt> <dd>gaya@apple.com</dd>
<dt>Date</dt> <dd>2014-04-04 16:10:03 -0700 (Fri, 04 Apr 2014)</dd>
</dl>
<h3>Log Message</h3>
<pre></pre>
<h3>Modified Paths</h3>
<ul>
<li><a href="#CalendarServerbranchesuserssagenmove2who4twistedcaldavdirectorybackedaddressbookpy">CalendarServer/branches/users/sagen/move2who-4/twistedcaldav/directorybackedaddressbook.py</a></li>
<li><a href="#CalendarServerbranchesuserssagenmove2who4twistedcaldavmethodreport_addressbook_querypy">CalendarServer/branches/users/sagen/move2who-4/twistedcaldav/method/report_addressbook_query.py</a></li>
<li><a href="#CalendarServerbranchesuserssagenmove2who4twistedcaldavmethodreport_multiget_commonpy">CalendarServer/branches/users/sagen/move2who-4/twistedcaldav/method/report_multiget_common.py</a></li>
<li><a href="#CalendarServerbranchesuserssagenmove2who4txdavwhovcardpy">CalendarServer/branches/users/sagen/move2who-4/txdav/who/vcard.py</a></li>
</ul>
<h3>Added Paths</h3>
<ul>
<li><a href="#CalendarServerbranchesuserssagenmove2who4confcaldavdodtestplist">CalendarServer/branches/users/sagen/move2who-4/conf/caldavd-odtest.plist</a></li>
</ul>
</div>
<div id="patch">
<h3>Diff</h3>
<a id="CalendarServerbranchesuserssagenmove2who4confcaldavdodtestplist"></a>
<div class="addfile"><h4>Added: CalendarServer/branches/users/sagen/move2who-4/conf/caldavd-odtest.plist (0 => 13170)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/sagen/move2who-4/conf/caldavd-odtest.plist         (rev 0)
+++ CalendarServer/branches/users/sagen/move2who-4/conf/caldavd-odtest.plist        2014-04-04 23:10:03 UTC (rev 13170)
</span><span class="lines">@@ -0,0 +1,1024 @@
</span><ins>+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+ Copyright (c) 2006-2014 Apple Inc. All rights reserved.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+ <dict>
+
+ <!--
+ Public network address information
+
+ This is the server's public network address, which is provided to
+ clients in URLs and the like. It may or may not be the network
+ address that the server is listening to directly, though it is by
+ default. For example, it may be the address of a load balancer or
+ proxy which forwards connections to the server.
+ -->
+
+ <!-- Network host name [empty = system host name] -->
+ <key>ServerHostName</key>
+ <string>localhost</string> <!-- The hostname clients use when connecting -->
+
+ <!-- Enable Calendars -->
+ <key>EnableCalDAV</key>
+ <true/>
+
+ <!-- Enable AddressBooks -->
+ <key>EnableCardDAV</key>
+ <true/>
+
+ <!-- HTTP port [0 = disable HTTP] -->
+ <key>HTTPPort</key>
+ <integer>8008</integer>
+
+ <!-- SSL port [0 = disable HTTPS] -->
+ <!-- (Must also configure SSLCertificate and SSLPrivateKey below) -->
+ <key>SSLPort</key>
+ <integer>8443</integer>
+
+ <!-- Enable listening on SSL port(s) -->
+ <key>EnableSSL</key>
+ <true/>
+
+ <!-- Redirect non-SSL ports to an SSL port (if configured for SSL) -->
+ <key>RedirectHTTPToHTTPS</key>
+ <false/>
+
+
+ <!--
+ Network address configuration information
+
+ This configures the actual network address that the server binds to.
+ -->
+
+ <!-- List of IP addresses to bind to [empty = all] -->
+ <key>BindAddresses</key>
+ <array>
+ </array>
+
+ <!-- List of port numbers to bind to for HTTP [empty = same as "Port"] -->
+ <key>BindHTTPPorts</key>
+ <array>
+ <integer>8008</integer>
+ <integer>8800</integer>
+ </array>
+
+ <!-- List of port numbers to bind to for SSL [empty = same as "SSLPort"] -->
+ <key>BindSSLPorts</key>
+ <array>
+ <integer>8443</integer>
+ <integer>8843</integer>
+ </array>
+
+
+ <!--
+ Data Store
+ -->
+
+ <!-- Server root -->
+ <key>ServerRoot</key>
+ <string>./data</string>
+
+ <!-- Database connection -->
+ <!--
+ <key>DBType</key>
+ <string>postgres</string>
+ <key>DSN</key>
+ <string>:caldav:caldav:::</string>
+ -->
+
+ <!-- Data root -->
+ <key>DataRoot</key>
+ <string>Data</string>
+
+ <!-- Database root -->
+ <key>DatabaseRoot</key>
+ <string>Database</string>
+
+ <!-- Document root -->
+ <key>DocumentRoot</key>
+ <string>Documents</string>
+
+ <!-- Configuration root -->
+ <key>ConfigRoot</key>
+ <string>./conf</string>
+
+ <!-- Run root -->
+ <key>RunRoot</key>
+ <string>Logs/state</string>
+
+ <!-- Child aliases -->
+ <key>Aliases</key>
+ <array>
+ <!--
+ <dict>
+ <key>url</key>
+ <string>/foo</string>
+ <key>path</key>
+ <string>/path/to/foo</string>
+ </dict>
+ -->
+ </array>
+
+ <!-- Don't exit if the DB needs an upgrade. -->
+ <key>FailIfUpgradeNeeded</key>
+ <false/>
+
+ <!--
+ Quotas and limits
+ -->
+
+ <!-- User quota (in bytes) [0 = no quota] applies to attachments only -->
+ <key>UserQuota</key>
+ <integer>104857600</integer><!-- 100Mb -->
+
+ <!-- Maximum number of calendars/address books allowed in a home -->
+ <!-- 0 for no limit -->
+ <key>MaxCollectionsPerHome</key>
+ <integer>50</integer>
+
+ <!-- Maximum number of resources in a calendar/address book -->
+ <!-- 0 for no limit -->
+ <key>MaxResourcesPerCollection</key>
+ <integer>10000</integer>
+
+ <!-- Maximum resource size (in bytes) -->
+ <key>MaxResourceSize</key>
+ <integer>1048576</integer> <!-- 1Mb -->
+
+ <!-- Maximum number of unique attendees per entire event -->
+ <!-- 0 for no limit -->
+ <key>MaxAttendeesPerInstance</key>
+ <integer>100</integer>
+
+ <!-- Maximum number of instances allowed during expansion -->
+ <!-- 0 for no limit -->
+ <key>MaxAllowedInstances</key>
+ <integer>3000</integer>
+
+ <!--
+ Directory service
+
+ A directory service provides information about principals (eg.
+ users, groups, locations and resources) to the server.
+
+ A variety of directory services are available for use.
+ -->
+
+ <!-- XML File Directory Service -->
+ <!--
+ <key>DirectoryService</key>
+ <dict>
+ <key>type</key>
+ <string>twistedcaldav.directory.xmlfile.XMLDirectoryService</string>
+
+ <key>params</key>
+ <dict>
+ <key>xmlFile</key>
+ <string>./conf/auth/accounts-test.xml</string>
+ </dict>
+ </dict>
+ -->
+
+ <!-- Open Directory Service (Mac OS X) -->
+ <key>DirectoryService</key>
+ <dict>
+ <key>type</key>
+ <string>twistedcaldav.directory.appleopendirectory.OpenDirectoryService</string>
+
+ <key>params</key>
+ <dict>
+ <key>node</key>
+ <string>/Search</string>
+ <key>cacheTimeout</key>
+ <integer>10</integer>
+ </dict>
+ </dict>
+
+ <!-- OpenLDAP Directory Service -->
+ <!--
+ <key>DirectoryService</key>
+ <dict>
+ <key>type</key>
+ <string>twistedcaldav.directory.ldapdirectory.LdapDirectoryService</string>
+
+ <key>params</key>
+ <dict>
+ <key>recordTypes</key>
+ <array>
+ <string>users</string>
+ <string>groups</string>
+ <string>locations</string>
+ <string>resources</string>
+ </array>
+ <key>cacheTimeout</key>
+ <integer>10</integer>
+ <key>uri</key>
+ <string>ldap://ldapserver.example.com/</string>
+ <key>tls</key>
+ <false/>
+ <key>tlsCACertFile</key>
+ <string></string>
+ <key>tlsCACertDir</key>
+ <string></string>
+ <key>tlsRequireCert</key>
+ <string>never</string>
+ <key>credentials</key>
+ <dict>
+ <key>dn</key>
+ <string>uid=admin,ou=people,o=example.com</string>
+ <key>password</key>
+ <string>PASSWORD</string>
+ </dict>
+ <key>rdnSchema</key>
+ <dict>
+ <key>base</key>
+ <string>o=example.com</string>
+ <key>guidAttr</key>
+ <string>GUID</string>
+ <key>users</key>
+ <dict>
+ <key>rdn</key>
+ <string>ou=people</string>
+ <key>mapping</key>
+ <dict>
+ <key>recordName</key>
+ <string>uid</string>
+ <key>fullName</key>
+ <string>cn</string>
+ <key>emailAddresses</key>
+ <array>
+ <string>mail</string>
+ <string>mailAlias</string>
+ </array>
+ <key>firstName</key>
+ <string>givenName</string>
+ <key>lastName</key>
+ <string>sn</string>
+ </dict>
+ </dict>
+ <key>groups</key>
+ <dict>
+ <key>rdn</key>
+ <string>ou=groups</string>
+ <key>mapping</key>
+ <dict>
+ <key>recordName</key>
+ <string>cn</string>
+ <key>fullName</key>
+ <string>cn</string>
+ <key>emailAddresses</key>
+ <array>
+ <string>mail</string>
+ <string>mailAlias</string>
+ </array>
+ </dict>
+ </dict>
+ <key>locations</key>
+ <dict>
+ <key>rdn</key>
+ <string>ou=locations</string>
+ <key>associatedAddressAttr</key>
+ <string></string>
+ <key>mapping</key>
+ <dict>
+ <key>recordName</key>
+ <string>cn</string>
+ <key>fullName</key>
+ <string>cn</string>
+ </dict>
+ </dict>
+ <key>resources</key>
+ <dict>
+ <key>rdn</key>
+ <string>ou=resources</string>
+ <key>mapping</key>
+ <dict>
+ <key>recordName</key>
+ <string>cn</string>
+ <key>fullName</key>
+ <string>cn</string>
+ </dict>
+ </dict>
+ <key>addresses</key>
+ <dict>
+ <key>rdn</key>
+ <string>ou=buildings</string>
+ <key>geoAttr</key>
+ <string></string>
+ <key>streetAddressAttr</key>
+ <string></string>
+ <key>mapping</key>
+ <dict>
+ <key>recordName</key>
+ <string>cn</string>
+ <key>fullName</key>
+ <string>cn</string>
+ </dict>
+ </dict>
+ </dict>
+ <key>groupSchema</key>
+ <dict>
+ <key>membersAttr</key>
+ <string>uniqueMember</string>
+ <key>nestedGroupsAttr</key>
+ <string></string>
+ <key>memberIdAttr</key>
+ <string></string>
+ </dict>
+ <key>resourceSchema</key>
+ <dict>
+ <key>resourceInfoAttr</key>
+ <string></string>
+ <key>autoScheduleAttr</key>
+ <string></string>
+ <key>autoScheduleEnabledValue</key>
+ <string></string>
+ <key>proxyAttr</key>
+ <string></string>
+ <key>readOnlyProxyAttr</key>
+ <string></string>
+ </dict>
+ </dict>
+ </dict>
+ -->
+
+ <!-- Resource and Location Service -->
+ <key>ResourceService</key>
+ <dict>
+ <key>Enabled</key>
+ <true/>
+ <key>type</key>
+ <string>twistedcaldav.directory.xmlfile.XMLDirectoryService</string>
+
+ <key>params</key>
+ <dict>
+ <key>xmlFile</key>
+ <string>./conf/auth/resources-test.xml</string>
+ </dict>
+ </dict>
+
+ <!-- XML File Augment Service -->
+ <key>AugmentService</key>
+ <dict>
+ <key>type</key>
+ <string>twistedcaldav.directory.augment.AugmentXMLDB</string>
+
+ <key>params</key>
+ <dict>
+ <key>xmlFiles</key>
+ <array>
+         <string>./conf/auth/augments-test.xml</string>
+ </array>
+ </dict>
+ </dict>
+
+ <!-- Sqlite Augment Service -->
+ <!--
+ <key>AugmentService</key>
+ <dict>
+ <key>type</key>
+ <string>twistedcaldav.directory.augment.AugmentSqliteDB</string>
+
+ <key>params</key>
+ <dict>
+ <key>dbpath</key>
+ <string>./conf/auth/augments.sqlite</string>
+ </dict>
+ </dict>
+ -->
+
+ <!-- PostgreSQL Augment Service -->
+ <!--
+ <key>AugmentService</key>
+ <dict>
+ <key>type</key>
+ <string>twistedcaldav.directory.augment.AugmentPostgreSQLDB</string>
+
+ <key>params</key>
+ <dict>
+ <key>host</key>
+ <string>localhost</string>
+ <key>database</key>
+ <string>augments</string>
+ </dict>
+ </dict>
+ -->
+
+ <!-- Sqlite ProxyDB Service -->
+ <key>ProxyDBService</key>
+ <dict>
+ <key>type</key>
+ <string>twistedcaldav.directory.calendaruserproxy.ProxySqliteDB</string>
+
+ <key>params</key>
+ <dict>
+ <key>dbpath</key>
+ <string>proxies.sqlite</string>
+ </dict>
+ </dict>
+
+ <!-- PostgreSQL ProxyDB Service -->
+ <!--
+ <key>ProxyDBService</key>
+ <dict>
+ <key>type</key>
+ <string>twistedcaldav.directory.calendaruserproxy.ProxyPostgreSQLDB</string>
+
+ <key>params</key>
+ <dict>
+ <key>host</key>
+ <string>localhost</string>
+ <key>database</key>
+ <string>proxies</string>
+ </dict>
+ </dict>
+ -->
+
+ <key>ProxyLoadFromFile</key>
+ <string>./conf/auth/proxies-test.xml</string>
+
+
+ <!--
+ Special principals
+
+ These principals are granted special access and/or perform
+ special roles on the server.
+ -->
+
+ <!-- Principals with "DAV:all" access (relative URLs) -->
+ <key>AdminPrincipals</key>
+ <array>
+ <string>/principals/__uids__/0C8BDE62-E600-4696-83D3-8B5ECABDFD2E/</string>
+ </array>
+
+ <!-- Principals with "DAV:read" access (relative URLs) -->
+ <key>ReadPrincipals</key>
+ <array>
+ <!-- <string>/principals/__uids__/983C8238-FB6B-4D92-9242-89C0A39E5F81/</string> -->
+ </array>
+
+ <!-- Create "proxy access" principals -->
+ <key>EnableProxyPrincipals</key>
+ <true/>
+
+
+ <!--
+ Permissions
+ -->
+
+ <!-- Anonymous read access for root resource -->
+ <key>EnableAnonymousReadRoot</key>
+ <true/>
+
+ <!-- Anonymous read access for resource hierarchy -->
+ <key>EnableAnonymousReadNav</key>
+ <false/>
+
+ <!-- Enables directory listings for principals -->
+ <key>EnablePrincipalListings</key>
+ <true/>
+
+ <!-- Render calendar collections as a monolithic iCalendar object -->
+ <key>EnableMonolithicCalendars</key>
+ <true/>
+
+
+ <!--
+ Authentication
+ -->
+
+ <key>Authentication</key>
+ <dict>
+
+ <!-- Clear text; best avoided -->
+ <key>Basic</key>
+ <dict>
+ <key>Enabled</key>
+ <true/>
+ <key>AllowedOverWireUnencrypted</key> <!-- advertised over non SSL? -->
+ <true/>
+ </dict>
+
+ <!-- Digest challenge/response -->
+ <key>Digest</key>
+ <dict>
+ <key>Enabled</key>
+ <false/>
+ <key>AllowedOverWireUnencrypted</key> <!-- advertised over non SSL? -->
+ <true/>
+ <key>Algorithm</key>
+ <string>md5</string>
+ <key>Qop</key>
+ <string></string>
+ </dict>
+
+ <!-- Kerberos/SPNEGO -->
+ <key>Kerberos</key>
+ <dict>
+ <key>Enabled</key>
+ <false/>
+ <key>AllowedOverWireUnencrypted</key> <!-- advertised over non SSL? -->
+ <true/>
+ <key>ServicePrincipal</key>
+ <string></string>
+ </dict>
+
+ <!-- Wikiserver authentication (Mac OS X) -->
+ <key>Wiki</key>
+ <dict>
+ <key>Enabled</key>
+ <false/>
+ <key>Cookie</key>
+ <string>sessionID</string>
+ <key>URL</key>
+ <string>http://127.0.0.1/RPC2</string>
+ <key>UserMethod</key>
+ <string>userForSession</string>
+ <key>WikiMethod</key>
+ <string>accessLevelForUserWikiCalendar</string>
+ </dict>
+
+ </dict>
+
+
+ <!--
+ Logging
+ -->
+
+ <!-- Log root -->
+ <key>LogRoot</key>
+ <string>Logs</string>
+
+ <!-- Apache-style access log -->
+ <key>AccessLogFile</key>
+ <string>access.log</string>
+ <key>RotateAccessLog</key>
+ <false/>
+
+ <!-- Server activity log -->
+ <key>ErrorLogFile</key>
+ <string>error.log</string>
+
+ <!-- Log levels -->
+ <key>DefaultLogLevel</key>
+ <string>debug</string> <!-- debug, info, warn, error -->
+
+ <!-- Log level overrides for specific functionality -->
+ <key>LogLevels</key>
+ <dict>
+ <!--
+ <key>twistedcaldav.directory.appleopendirectory.OpenDirectoryService</key>
+ <string>debug</string>
+ -->
+ </dict>
+
+ <!-- Server process ID file -->
+ <key>PIDFile</key>
+ <string>caldavd.pid</string>
+
+
+ <!--
+ Accounting
+ -->
+
+ <!-- Enable accounting for certain operations -->
+ <key>AccountingCategories</key>
+ <dict>
+ <key>iTIP</key>
+ <false/>
+ <key>HTTP</key>
+ <false/>
+ </dict>
+
+ <!-- Enable accounting for specific principals -->
+ <key>AccountingPrincipals</key>
+ <array>
+ <!-- <string>/principals/__uids__/454D85C0-09F0-4DC6-A3C6-97DFEB4622CD/</string> -->
+ </array>
+
+
+ <!--
+ SSL/TLS
+ -->
+
+ <!-- Public key -->
+ <key>SSLCertificate</key>
+ <string>twistedcaldav/test/data/server.pem</string>
+
+ <!-- SSL authority chain (for intermediate certs) -->
+ <key>SSLAuthorityChain</key>
+ <string></string>
+
+ <!-- Private key -->
+ <key>SSLPrivateKey</key>
+ <string>twistedcaldav/test/data/server.pem</string>
+
+
+ <!--
+ Process management
+ -->
+
+ <key>UserName</key>
+ <string></string>
+
+ <key>GroupName</key>
+ <string></string>
+
+ <key>ProcessType</key>
+ <string>Combined</string>
+
+ <key>MultiProcess</key>
+ <dict>
+ <key>ProcessCount</key>
+ <integer>2</integer> <!-- 0 = automatic -->
+ </dict>
+
+
+ <!--
+ Notifications
+ -->
+
+ <key>Notifications</key>
+ <dict>
+ <!-- Time spent coalescing notifications before delivery -->
+ <key>CoalesceSeconds</key>
+ <integer>3</integer>
+
+ <key>Services</key>
+ <dict>
+
+ <key>AMP</key>
+ <dict>
+ <key>Enabled</key>
+ <true/>
+ <key>Port</key>
+ <integer>62311</integer>
+ <key>EnableStaggering</key>
+ <false/>
+ <key>StaggerSeconds</key>
+ <integer>3</integer>
+ </dict>
+
+ </dict>
+ </dict>
+
+
+ <!--
+ Server-to-server protocol
+ -->
+
+ <key>Scheduling</key>
+ <dict>
+
+ <!-- CalDAV protocol options -->
+ <key>CalDAV</key>
+ <dict>
+ <key>EmailDomain</key>
+ <string></string>
+ <key>HTTPDomain</key>
+ <string></string>
+ <key>AddressPatterns</key>
+ <array>
+ </array>
+ <key>OldDraftCompatibility</key>
+ <true/>
+ <key>ScheduleTagCompatibility</key>
+ <true/>
+ <key>EnablePrivateComments</key>
+ <true/>
+ </dict>
+
+ <!-- iSchedule protocol options -->
+ <key>iSchedule</key>
+ <dict>
+ <key>Enabled</key>
+ <false/>
+ <key>AddressPatterns</key>
+ <array>
+ </array>
+ <key>RemoteServers</key>
+ <string>remoteservers-test.xml</string>
+ </dict>
+
+ <!-- iMIP protocol options -->
+ <key>iMIP</key>
+ <dict>
+ <key>Enabled</key>
+ <false/>
+ <key>MailGatewayServer</key>
+ <string>localhost</string>
+ <key>MailGatewayPort</key>
+ <integer>62310</integer>
+ <key>Sending</key>
+ <dict>
+ <key>Server</key>
+ <string></string>
+ <key>Port</key>
+ <integer>587</integer>
+ <key>UseSSL</key>
+ <true/>
+ <key>Username</key>
+ <string></string>
+ <key>Password</key>
+ <string></string>
+ <key>Address</key>
+ <string></string> <!-- Address email will be sent from -->
+ <key>SupressionDays</key>
+ <integer>7</integer> <!-- Don't send messages for events earlier than this many days in the past -->
+ </dict>
+ <key>Receiving</key>
+ <dict>
+ <key>Server</key>
+ <string></string>
+ <key>Port</key>
+ <integer>995</integer>
+ <key>Type</key>
+ <string></string> <!-- Either "pop" or "imap" -->
+ <key>UseSSL</key>
+ <true/>
+ <key>Username</key>
+ <string></string>
+ <key>Password</key>
+ <string></string>
+ <key>PollingSeconds</key>
+ <integer>30</integer>
+ </dict>
+ <key>AddressPatterns</key>
+ <array>
+ <string>mailto:.*</string>
+ </array>
+ </dict>
+
+ <!-- General options for scheduling -->
+ <key>Options</key>
+ <dict>
+ <key>AllowGroupAsOrganizer</key>
+ <false/>
+ <key>AllowLocationAsOrganizer</key>
+ <false/>
+ <key>AllowResourceAsOrganizer</key>
+ <false/>
+ <key>AttendeeRefreshBatch</key>
+ <integer>0</integer>
+ <key>AttendeeRefreshCountLimit</key>
+ <integer>50</integer>
+
+                <key>AutoSchedule</key>
+                <dict>
+                        <key>Enabled</key>
+                        <true/>
+                        <key>Always</key>
+                        <false/>
+                        <!-- Default mode for auto-schedule processing, one of:
+         "none" - no auto-scheduling
+         "accept-always" - always accept, ignore busy time
+         "decline-always" - always decline, ignore free time
+         "accept-if-free" - accept if free, do nothing if busy
+         "decline-if-busy" - decline if busy, do nothing if free
+         "automatic" - accept if free, decline if busy -->
+         <key>DefaultMode</key>
+         <string>automatic</string>
+                </dict>
+                
+                <key>WorkQueues</key>
+                <dict>
+                        <key>Enabled</key>
+                        <true/>
+ <key>RequestDelaySeconds</key>
+ <integer>1</integer>
+ <key>ReplyDelaySeconds</key>
+ <integer>2</integer>
+ <key>AutoReplyDelaySeconds</key>
+ <integer>1</integer>
+ <key>AttendeeRefreshBatchDelaySeconds</key>
+ <integer>2</integer>
+ <key>AttendeeRefreshBatchIntervalSeconds</key>
+ <integer>2</integer>
+                </dict>
+ </dict>
+ </dict>
+
+
+ <!--
+ Free-busy URL protocol
+ -->
+
+ <key>FreeBusyURL</key>
+ <dict>
+ <key>Enabled</key>
+ <true/>
+ <key>TimePeriod</key>
+ <integer>14</integer>
+ <key>AnonymousAccess</key>
+ <false/>
+ </dict>
+
+
+ <!--
+ Non-standard CalDAV extensions
+ -->
+
+ <!-- Calendar Drop Box -->
+ <key>EnableDropBox</key>
+ <false/>
+
+ <!-- Calendar Managed Attachments -->
+ <key>EnableManagedAttachments</key>
+ <true/>
+
+ <!-- Private Events -->
+ <key>EnablePrivateEvents</key>
+ <true/>
+
+ <!-- Private Comment fix off for testing -->
+ <key>RemoveDuplicatePrivateComments</key>
+ <false/>
+
+ <!-- Timezone Service -->
+ <key>EnableTimezoneService</key>
+ <true/>
+
+ <!-- Standard Timezone Service -->
+ <key>TimezoneService</key>
+ <dict>
+         <key>Enabled</key>
+         <true/>
+         <key>Mode</key>
+         <string>primary</string>
+         <key>BasePath</key>
+         <string></string>
+         <key>XMLInfoPath</key>
+         <string></string>
+         <key>SecondaryService</key>
+         <dict>
+                 <key>Host</key>
+                 <string></string>
+                 <key>URI</key>
+                 <string></string>
+                 <key>UpdateIntervalMinutes</key>
+                 <integer>1440</integer>
+         </dict>
+ </dict>
+
+        <key>UsePackageTimezones</key>
+        <true/>
+
+ <!-- Batch Upload via POST -->
+ <key>EnableBatchUpload</key>
+ <true/>
+
+ <!-- Shared Calendars & Address Books -->
+ <key>Sharing</key>
+ <dict>
+ <key>Enabled</key>
+ <true/>
+ <key>AllowExternalUsers</key>
+ <false/>
+ <key>Calendars</key>
+ <dict>
+         <key>Enabled</key>
+         <true/>
+ </dict>
+ <key>AddressBooks</key>
+ <dict>
+         <key>Enabled</key>
+         <true/>
+ </dict>
+ </dict>
+
+ <!--
+ Miscellaneous items
+ -->
+
+ <!-- Service ACLs (Mac OS X) -->
+ <key>EnableSACLs</key>
+ <false/>
+
+ <!-- Make entire server read-only -->
+ <key>EnableReadOnlyServer</key>
+ <false/>
+
+ <!-- Web-based administration -->
+ <key>EnableWebAdmin</key>
+ <true/>
+
+ <!-- Support for Content-Encoding compression -->
+ <key>ResponseCompression</key>
+ <false/> <!-- Off for testing, as debugging is easier that way. -->
+
+
+ <!-- The retry-after value (in seconds) to return with a 503 error. -->
+ <key>HTTPRetryAfter</key>
+ <integer>180</integer>
+
+ <!-- For child-master IPC. [empty = use tcp] -->
+ <key>ControlSocket</key>
+ <string>caldavd.sock</string>
+
+ <!-- Support for Memcached -->
+ <key>Memcached</key>
+ <dict>
+ <key>MaxClients</key>
+ <integer>5</integer>
+ <key>memcached</key>
+ <string>memcached</string> <!-- Find in PATH -->
+ <key>Options</key>
+ <array>
+ <!--<string>-vv</string>--> <!-- Be very verbose -->
+ </array>
+ </dict>
+
+ <!-- Response Caching -->
+ <key>EnableResponseCache</key>
+ <true/>
+ <key>ResponseCacheTimeout</key>
+ <integer>30</integer> <!-- in minutes -->
+
+ <!-- Support for Postgres -->
+ <key>Postgres</key>
+ <dict>
+ <key>Options</key>
+ <array>
+         <!-- Optional extra logging for posgres -->
+         <!-- <string>-c log_lock_waits=TRUE</string> -->
+         <!-- <string>-c log_statement=all</string> -->
+         <!-- <string>-c log_line_prefix='%t [%p]: [%l] '</string> -->
+ </array>
+ </dict>
+
+ <!-- SQL Query Caching -->
+ <key>QueryCaching</key>
+ <dict>
+ <key>Enabled</key>
+ <true/>
+ <key>MemcachedPool</key>
+ <string>Default</string>
+ <key>ExpireSeconds</key>
+ <integer>3600</integer>
+ </dict>
+
+ <!-- Group Membership Caching -->
+ <key>GroupCaching</key>
+ <dict>
+ <key>Enabled</key>
+ <true/>
+ <key>EnableUpdater</key>
+ <true/>
+ <key>MemcachedPool</key>
+ <string>Default</string>
+ <key>UpdateSeconds</key>
+ <integer>300</integer>
+ <key>ExpireSeconds</key>
+ <integer>3600</integer>
+ <key>LockSeconds</key>
+ <integer>300</integer>
+ <key>UseExternalProxies</key>
+ <false/>
+ </dict>
+
+ <!-- Maximum number of results returned by principal-property-search REPORT -->
+ <key>MaxPrincipalSearchReportResults</key>
+ <integer>500</integer>
+
+ <!--
+ Twisted
+ -->
+
+ <key>Twisted</key>
+ <dict>
+ <key>twistd</key>
+ <string>../Twisted/bin/twistd</string>
+ </dict>
+
+
+ <key>Localization</key>
+ <dict>
+ <key>TranslationsDirectory</key>
+ <string>locales</string>
+ <key>LocalesDirectory</key>
+ <string>locales</string>
+ <key>Language</key>
+ <string>en</string>
+ </dict>
+
+ <!-- Directory Address Book -->
+ <key>EnableSearchAddressBook</key>
+ <true/>
+ </dict>
+</plist>
</ins></span></pre></div>
<a id="CalendarServerbranchesuserssagenmove2who4twistedcaldavdirectorybackedaddressbookpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/sagen/move2who-4/twistedcaldav/directorybackedaddressbook.py (13169 => 13170)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/sagen/move2who-4/twistedcaldav/directorybackedaddressbook.py        2014-04-04 22:59:48 UTC (rev 13169)
+++ CalendarServer/branches/users/sagen/move2who-4/twistedcaldav/directorybackedaddressbook.py        2014-04-04 23:10:03 UTC (rev 13170)
</span><span class="lines">@@ -157,7 +157,7 @@
</span><span class="cx">
</span><span class="cx">
</span><span class="cx"> @inlineCallbacks
</span><del>- def doAddressBookDirectoryQuery(self, addressBookFilter, addressBookQuery, maxResults, defaultKind=None):
</del><ins>+ def doAddressBookDirectoryQuery(self, addressBookFilter, addressBookQuery, maxResults, defaultKind="individual"):
</ins><span class="cx"> """
</span><span class="cx"> Get vCards for a given addressBookFilter and addressBookQuery
</span><span class="cx"> """
</span></span></pre></div>
<a id="CalendarServerbranchesuserssagenmove2who4twistedcaldavmethodreport_addressbook_querypy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/sagen/move2who-4/twistedcaldav/method/report_addressbook_query.py (13169 => 13170)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/sagen/move2who-4/twistedcaldav/method/report_addressbook_query.py        2014-04-04 22:59:48 UTC (rev 13169)
+++ CalendarServer/branches/users/sagen/move2who-4/twistedcaldav/method/report_addressbook_query.py        2014-04-04 23:10:03 UTC (rev 13170)
</span><span class="lines">@@ -157,7 +157,7 @@
</span><span class="cx"> def queryDirectoryBackedAddressBook(directoryBackedAddressBook, addressBookFilter):
</span><span class="cx"> """
</span><span class="cx"> """
</span><del>- results, limited[0] = yield directoryBackedAddressBook.doAddressBookDirectoryQuery(addressBookFilter, query, max_number_of_results[0], defaultKind="individual")
</del><ins>+ results, limited[0] = yield directoryBackedAddressBook.doAddressBookDirectoryQuery(addressBookFilter, query, max_number_of_results[0])
</ins><span class="cx"> for vCardResult in results:
</span><span class="cx">
</span><span class="cx"> # match against original filter if different from addressBookFilter
</span></span></pre></div>
<a id="CalendarServerbranchesuserssagenmove2who4twistedcaldavmethodreport_multiget_commonpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/sagen/move2who-4/twistedcaldav/method/report_multiget_common.py (13169 => 13170)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/sagen/move2who-4/twistedcaldav/method/report_multiget_common.py        2014-04-04 22:59:48 UTC (rev 13169)
+++ CalendarServer/branches/users/sagen/move2who-4/twistedcaldav/method/report_multiget_common.py        2014-04-04 23:10:03 UTC (rev 13170)
</span><span class="lines">@@ -267,7 +267,7 @@
</span><span class="cx">
</span><span class="cx"> #get vCards and filter
</span><span class="cx"> limit = config.DirectoryAddressBook.MaxQueryResults
</span><del>- results, limited = (yield self.doAddressBookDirectoryQuery(addressBookFilter, propertyreq, limit))
</del><ins>+ results, limited = (yield self.doAddressBookDirectoryQuery(addressBookFilter, propertyreq, limit, defaultKind=None))
</ins><span class="cx"> if limited:
</span><span class="cx"> log.error("Too many results in multiget report: {count}", count=len(resources))
</span><span class="cx"> raise HTTPError(ErrorResponse(
</span></span></pre></div>
<a id="CalendarServerbranchesuserssagenmove2who4txdavwhovcardpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/sagen/move2who-4/txdav/who/vcard.py (13169 => 13170)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/sagen/move2who-4/txdav/who/vcard.py        2014-04-04 22:59:48 UTC (rev 13169)
+++ CalendarServer/branches/users/sagen/move2who-4/txdav/who/vcard.py        2014-04-04 23:10:03 UTC (rev 13170)
</span><span class="lines">@@ -55,7 +55,8 @@
</span><span class="cx"> # all possible generated parameters.
</span><span class="cx"> vCardPropToParamMap = {
</span><span class="cx"> #"PHOTO": {"ENCODING": ("B",), "TYPE": ("JPEG",), },
</span><del>- "ADR": {"TYPE": ("WORK", "PREF", "POSTAL", "PARCEL",), },
</del><ins>+ "ADR": {"TYPE": ("WORK", "PREF", "POSTAL", "PARCEL",),
+ "LABEL": None, "GEO": None, },
</ins><span class="cx"> #"LABEL": {"TYPE": ("POSTAL", "PARCEL",)},
</span><span class="cx"> #"TEL": {"TYPE": None, }, # None means param can contain can be anything
</span><span class="cx"> "EMAIL": {"TYPE": None, },
</span><span class="lines">@@ -188,17 +189,29 @@
</span><span class="cx"> # 3.2 Delivery Addressing Types http://tools.ietf.org/html/rfc2426#section-3.2
</span><span class="cx"> #===========================================================================
</span><span class="cx"> # 3.2.1 ADR
</span><ins>+ #
+ # Experimental:
+ # Use vCard 4.0 ADR: http://tools.ietf.org/html/rfc6350#section-6.3.1
+ params = {}
+ geo = record.fields.get(CalFieldName.geographicLocation)
+ if geo:
+ params["GEO"] = geo.encode("utf-8")
+ label = record.fields.get(CalFieldName.streetAddress)
+ if label:
+ params["LABEL"] = label.encode("utf-8")
</ins><span class="cx">
</span><ins>+ #
</ins><span class="cx"> extended = record.fields.get(CalFieldName.floor)
</span><span class="cx">
</span><del>- #TODO: parse !
</del><ins>+ # TODO: Parse?
</ins><span class="cx"> street = record.fields.get(CalFieldName.streetAddress)
</span><span class="cx"> city = None
</span><span class="cx"> region = None
</span><span class="cx"> postalcode = None
</span><span class="cx"> country = None
</span><span class="cx">
</span><del>- if extended or street or city or region or postalcode or country:
</del><ins>+ if extended or street or city or region or postalcode or country or params:
+ params["TYPE"] = ("WORK", "PREF", "POSTAL", "PARCEL",)
</ins><span class="cx"> vcard.addProperty(
</span><span class="cx"> Property(
</span><span class="cx"> "ADR", Adr(
</span><span class="lines">@@ -210,7 +223,7 @@
</span><span class="cx"> postalcode=postalcode.encode("utf-8") if postalcode else None,
</span><span class="cx"> country=country.encode("utf-8") if country else None,
</span><span class="cx"> ),
</span><del>- params={"TYPE": ("WORK", "PREF", "POSTAL", "PARCEL",), }
</del><ins>+ params=params
</ins><span class="cx"> )
</span><span class="cx"> )
</span><span class="cx">
</span><span class="lines">@@ -308,7 +321,8 @@
</span><span class="cx"> # add members
</span><span class="cx"> # FIXME: members() is a deferred, so all of vCardFromRecord is deferred.
</span><span class="cx"> for memberRecord in (yield record.members()):
</span><del>- vcard.addProperty(Property("X-ADDRESSBOOKSERVER-MEMBER", "urn:uuid:" + memberRecord.fields[FieldName.uid].encode("utf-8")))
</del><ins>+ if memberRecord:
+ vcard.addProperty(Property("X-ADDRESSBOOKSERVER-MEMBER", "urn:uuid:" + memberRecord.fields[FieldName.uid].encode("utf-8")))
</ins><span class="cx">
</span><span class="cx"> #===================================================================
</span><span class="cx"> # vCard 4.0 http://tools.ietf.org/html/rfc6350
</span></span></pre>
</div>
</div>
</body>
</html>