Package: calypso Version: 1.4 Severity: wishlist Hi, attached patch adds minimal autopkgtest support via caldav-tester. Note that in order for this to work we need caldav-tester (ITP #742999, about to be uploaded) and the config dir patch posted to the ML recently.
I've only enabled some working tests so far so that we don't regress. I hope to get around to make the get/put tests work too. Cheers, -- Guido -- System Information: Debian Release: jessie/sid APT prefers testing APT policy: (990, 'testing'), (500, 'testing-updates'), (500, 'unstable'), (1, 'experimental') Architecture: amd64 (x86_64) Kernel: Linux 3.14.0-rc1+ (SMP w/4 CPU cores) Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8) Shell: /bin/sh linked to /bin/dash Versions of packages calypso depends on: ii git 1:1.9.0-1 ii python 2.7.5-5 ii python-daemon 1.5.5-1 ii python-vobject 0.8.1c-4 calypso recommends no packages. calypso suggests no packages. -- no debconf information
>From bda7ed427047d377dc91d2dce837973859cef117 Mon Sep 17 00:00:00 2001 Message-Id: <bda7ed427047d377dc91d2dce837973859cef117.1396186929.git....@sigxcpu.org> From: =?UTF-8?q?Guido=20G=C3=BCnther?= <a...@sigxcpu.org> Date: Sat, 29 Mar 2014 22:34:30 +0100 Subject: [PATCH] Add autopkgtest based on caldav-tester This makes sure the server listens and processes events. This will need more work to pass more parts of the testsuite. --- debian/control | 1 + debian/tests/caldav | 54 ++++ debian/tests/control | 3 + debian/tests/serverinfo.xml | 759 ++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 817 insertions(+) create mode 100755 debian/tests/caldav create mode 100644 debian/tests/control create mode 100644 debian/tests/serverinfo.xml diff --git a/debian/control b/debian/control index a4012a4..ed68a4d 100644 --- a/debian/control +++ b/debian/control @@ -6,6 +6,7 @@ Build-Depends: debhelper (>= 8.0.0), python (>= 2.7), python-setuptools, python- Standards-Version: 3.9.4 Homepage: http://keithp.com/calypso X-Python-Version: >= 2.7 +XS-Testsuite: autopkgtest Package: calypso Architecture: all diff --git a/debian/tests/caldav b/debian/tests/caldav new file mode 100755 index 0000000..c4d78b1 --- /dev/null +++ b/debian/tests/caldav @@ -0,0 +1,54 @@ +#!/bin/sh + +TESTS="\ + CalDAV/delete.xml \ + CalDAV/vtodos.xml \ +" + +set -e + +cleanup () +{ + kill $(cat $WORKDIR/pid) + rm --preserve-root -rf $WORKDIR +} + +WORKDIR=$(mktemp -d) +trap cleanup 0 INT QUIT ABRT PIPE TERM + +export CALYPSO_CONFIG=$WORKDIR/config + +# Initial calendars +CALENDARS="\ + $WORKDIR/calendars/__uids__/user01/calendar/ \ + $WORKDIR/calendars/__uids__/user01/tasks/ \ + " + +for d in $CALENDARS; do + mkdir -p $d + git init $d +done + +# config +cat <<EOF > $WORKDIR/config +[server] +ssl=false + +[acl] +type=htpasswd +filename=$WORKDIR/passwd +encryption=plain + +[storage] +folder=$WORKDIR/ +EOF +echo "user01:user01" > $WORKDIR/passwd + +# Run the server +calypso -d -P $WORKDIR/pid +sleep 2 + +# Run the tests +testcaldav -s $PWD/debian/tests/serverinfo.xml $TESTS + +echo "run: OK" diff --git a/debian/tests/control b/debian/tests/control new file mode 100644 index 0000000..e78ddac --- /dev/null +++ b/debian/tests/control @@ -0,0 +1,3 @@ +Tests: caldav +Restrictions: isolation-container +Depends: caldav-tester diff --git a/debian/tests/serverinfo.xml b/debian/tests/serverinfo.xml new file mode 100644 index 0000000..9378d76 --- /dev/null +++ b/debian/tests/serverinfo.xml @@ -0,0 +1,759 @@ +<?xml version="1.0" standalone="no"?> + +<!DOCTYPE serverinfo SYSTEM "serverinfo.dtd"> + +<!-- + Copyright (c) 2006-2013 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. + --> + +<serverinfo> + <host>localhost</host> + <nonsslport>5233</nonsslport> + <sslport>8443</sslport> + <authtype>basic</authtype> + + <waitcount>120</waitcount> + <waitdelay>0.25</waitdelay> + + <features> + <!-- Generic WebDAV extensions --> + <feature>COPY Method</feature> <!-- COPY method --> + <feature>MOVE Method</feature> <!-- MOVE method --> + + <feature>ctag</feature> <!-- ctag extension --> + <feature>directory listing</feature> <!-- GET on collection --> + + <!-- CalDAV specific extension --> + <feature>caldav</feature> <!-- Basic CalDAV feature enabler --> + <feature>no-duplicate-uids</feature> <!-- duplicate UIDs in same home not supported --> + + <!-- CardDAV specific extension --> + <feature>carddav</feature> <!-- Basic CardDAV feature enabler --> + <feature>default-addressbook</feature> <!-- Default address book behavior --> + <feature>shared-addressbooks</feature> <!-- Shared address books extension --> + <!-- <feature>directory-gateway</feature> --> <!-- Directory gateway extension --> + + </features> + + <substitutions> + <!-- Useful xpath shortcuts for verifiers --> + <substitution> + <key>$multistatus-response-prefix:</key> + <value>/{DAV:}multistatus/{DAV:}response</value> + </substitution> + <substitution> + <key>$multistatus-href-prefix:</key> + <value>/{DAV:}multistatus/{DAV:}response/{DAV:}href</value> + </substitution> + <substitution> + <key>$verify-response-prefix:</key> + <value>{DAV:}response/{DAV:}propstat/{DAV:}prop</value> + </substitution> + <substitution> + <key>$verify-property-prefix:</key> + <value>/{DAV:}multistatus/{DAV:}response/{DAV:}propstat/{DAV:}prop</value> + </substitution> + <substitution> + <key>$verify-bad-response:</key> + <value>/{DAV:}multistatus/{DAV:}response/{DAV:}status</value> + </substitution> + <substitution> + <key>$verify-error-response:</key> + <value>/{DAV:}multistatus/{DAV:}response/{DAV:}error</value> + </substitution> + <substitution> + <key>$CALDAV:</key> + <value>urn:ietf:params:xml:ns:caldav</value> + </substitution> + <substitution> + <key>$CARDDAV:</key> + <value>urn:ietf:params:xml:ns:carddav</value> + </substitution> + <substitution> + <key>$CS:</key> + <value>http://calendarserver.org/ns/</value> + </substitution> + + <!-- Server configuration settings --> + <!-- $host: and $hostssl: are implicitly added by CalDAVTester based + on the host/nonsslport/sslport values and ssl command line switch --> + + <!-- relative path to caldav root--> + <substitution> + <key>$root:</key> + <value>/</value> + </substitution> + + <!-- relative path to main principal collection--> + <substitution> + <key>$principalcollection:</key> + <value>$root:principals/</value> + </substitution> + + <!-- the core recored type collections--> + <substitution> + <key>$uidstype:</key> + <value>__uids__</value> + </substitution> + <substitution> + <key>$userstype:</key> + <value>users</value> + </substitution> + <substitution> + <key>$groupstype:</key> + <value>groups</value> + </substitution> + <substitution> + <key>$locationstype:</key> + <value>locations</value> + </substitution> + <substitution> + <key>$resourcestype:</key> + <value>resources</value> + </substitution> + + <!-- relative path to record type principal collections--> + <substitution> + <key>$principals_uids:</key> + <value>$principalcollection:$uidstype:/</value> + </substitution> + <substitution> + <key>$principals_users:</key> + <value>$principalcollection:$userstype:/</value> + </substitution> + <substitution> + <key>$principals_groups:</key> + <value>$principalcollection:$groupstype:/</value> + </substitution> + <substitution> + <key>$principals_resources:</key> + <value>$principalcollection:$resourcestype:/</value> + </substitution> + <substitution> + <key>$principals_locations:</key> + <value>$principalcollection:$locationstype:/</value> + </substitution> + + <!-- relative path to calendars collection--> + <substitution> + <key>$calendars:</key> + <value>$root:calendars/</value> + </substitution> + + <!-- relative path to record type calendar collections--> + <substitution> + <key>$calendars_uids:</key> + <value>$calendars:$uidstype:/</value> + </substitution> + <substitution> + <key>$calendars_users:</key> + <value>$calendars:$userstype:/</value> + </substitution> + <substitution> + <key>$calendars_groups:</key> + <value>$calendars:$groupstype:/</value> + </substitution> + <substitution> + <key>$calendars_resources:</key> + <value>$calendars:$resourcestype:/</value> + </substitution> + <substitution> + <key>$calendars_locations:</key> + <value>$calendars:$locationstype:/</value> + </substitution> + + <!-- primary calendar name--> + <substitution> + <key>$calendar:</key> + <value>calendar</value> + </substitution> + + <!-- primary tasks-only calendar name--> + <substitution> + <key>$tasks:</key> + <value>tasks</value> + </substitution> + + <!-- primary polls-only calendar name--> + <substitution> + <key>$polls:</key> + <value>polls</value> + </substitution> + + <!-- inbox name--> + <substitution> + <key>$inbox:</key> + <value>inbox</value> + </substitution> + + <!-- outbox name--> + <substitution> + <key>$outbox:</key> + <value>outbox</value> + </substitution> + + <!-- dropbox name--> + <substitution> + <key>$dropbox:</key> + <value>dropbox</value> + </substitution> + + <!-- attachments name--> + <substitution> + <key>$attachments:</key> + <value>dropbox</value> + </substitution> + + <!-- notification name--> + <substitution> + <key>$notification:</key> + <value>notification</value> + </substitution> + + <!-- freebusy name--> + <substitution> + <key>$freebusy:</key> + <value>freebusy</value> + </substitution> + + <!-- server-to-server inbox--> + <substitution> + <key>$servertoserver:</key> + <value>$root:inbox</value> + </substitution> + + <!-- timezone service--> + <substitution> + <key>$timezoneservice:</key> + <value>$root:timezones</value> + </substitution> + + <!-- timezone std service--> + <substitution> + <key>$timezonestdservice:</key> + <value>$root:stdtimezones</value> + </substitution> + + <!-- relative path to addressbooks collection--> + <substitution> + <key>$addressbooks:</key> + <value>$root:addressbooks/</value> + </substitution> + + <!-- relative path to record type addressbook collections--> + <substitution> + <key>$addressbooks_uids:</key> + <value>$addressbooks:$uidstype:/</value> + </substitution> + <substitution> + <key>$addressbooks_users:</key> + <value>$addressbooks:$userstype:/</value> + </substitution> + <substitution> + <key>$addressbooks_groups:</key> + <value>$addressbooks:$groupstype:/</value> + </substitution> + + <!-- primary addressbook name --> + <substitution> + <key>$addressbook:</key> + <value>addressbook</value> + </substitution> + + <!-- directory name --> + <substitution> + <key>$directory:</key> + <value>$root:directory/</value> + </substitution> + + <!-- POST add-member URI suffix --> + <substitution> + <key>$add-member:</key> + <value>;add-member</value> + </substitution> + + <!-- user id for admin user --> + <substitution> + <key>$useradmin:</key> + <value>admin</value> + </substitution> + <!-- guid for admin user --> + <substitution> + <key>$useradminguid:</key> + <value>admin</value> + </substitution> + <!-- password for admin user --> + <substitution> + <key>$pswdadmin:</key> + <value>admin</value> + </substitution> + + <!-- relative path to admin principal resource--> + <substitution> + <key>$principal_admin:</key> + <value>$principals_users:$useradmin:/</value> + </substitution> + <substitution> + <key>$principaluri_admin:</key> + <value>$principals_uids:$useradminguid:/</value> + </substitution> + + <!-- user id for apprentice user --> + <substitution> + <key>$userapprentice:</key> + <value>apprentice</value> + </substitution> + <!-- guid for apprentice user --> + <substitution> + <key>$userapprenticeguid:</key> + <value>apprentice</value> + </substitution> + <!-- password for admin user --> + <substitution> + <key>$pswdapprentice:</key> + <value>apprentice</value> + </substitution> + + <!-- relative path to apprentice principal resource--> + <substitution> + <key>$principal_apprentice:</key> + <value>$principals_users:$userapprentice:/</value> + </substitution> + <substitution> + <key>$principaluri_apprentice:</key> + <value>$principals_uids:$userapprenticeguid:/</value> + </substitution> + + <!-- user id for proxy user --> + <substitution> + <key>$userproxy:</key> + <value>superuser</value> + </substitution> + <!-- password for proxy user --> + <substitution> + <key>$pswdproxy:</key> + <value>superuser</value> + </substitution> + + <!-- Forty user accounts --> + <repeat count="40"> + <!-- user id --> + <substitution> + <key>$userid%d:</key> + <value>user%02d</value> + </substitution> + <!-- user guid --> + <substitution> + <key>$userguid%d:</key> + <value>user%02d</value> + </substitution> + <!-- user name --> + <substitution> + <key>$username%d:</key> + <value>User %02d</value> + </substitution> + <!-- user name URI encoded --> + <substitution> + <key>$username-encoded%d:</key> + <value>User%%20%02d</value> + </substitution> + <!-- first name --> + <substitution> + <key>$firstname%d:</key> + <value>User</value> + </substitution> + <!-- last name --> + <substitution> + <key>$lastname%d:</key> + <value>%02d</value> + </substitution> + <!-- password --> + <substitution> + <key>$pswd%d:</key> + <value>user%02d</value> + </substitution> + <!-- relative path to user principal resource--> + <substitution> + <key>$principal%d:</key> + <value>$principals_users:$userid%d:/</value> + </substitution> + <substitution> + <key>$principaluri%d:</key> + <value>$principals_uids:$userguid%d:/</value> + </substitution> + <substitution> + <key>$principal%dnoslash:</key> + <value>$principals_users:$userid%d:</value> + </substitution> + + <!-- relative path to user calendar home--> + <substitution> + <key>$calendarhome%d:</key> + <value>$calendars_uids:$userguid%d:</value> + </substitution> + <!-- relative path to user alternate calendar home--> + <substitution> + <key>$calendarhomealt%d:</key> + <value>$calendars_users:$userid%d:</value> + </substitution> + <!-- relative path to user calendar--> + <substitution> + <key>$calendarpath%d:</key> + <value>$calendarhome%d:/$calendar:</value> + </substitution> + <!-- relative path to user alternate calendar--> + <substitution> + <key>$calendarpathalt%d:</key> + <value>$calendarhomealt%d:/$calendar:</value> + </substitution> + <!-- relative path to user tasks calendar--> + <substitution> + <key>$taskspath%d:</key> + <value>$calendarhome%d:/$tasks:</value> + </substitution> + <!-- relative path to user polls calendar--> + <substitution> + <key>$pollspath%d:</key> + <value>$calendarhome%d:/$polls:</value> + </substitution> + <!-- relative path to user inbox--> + <substitution> + <key>$inboxpath%d:</key> + <value>$calendarhome%d:/$inbox:</value> + </substitution> + <!-- relative path to user outbox--> + <substitution> + <key>$outboxpath%d:</key> + <value>$calendarhome%d:/$outbox:</value> + </substitution> + <!-- relative path to user dropbox--> + <substitution> + <key>$dropboxpath%d:</key> + <value>$calendarhome%d:/$dropbox:</value> + </substitution> + <!-- relative path to user notification--> + <substitution> + <key>$notificationpath%d:</key> + <value>$calendarhome%d:/$notification:</value> + </substitution> + <!-- relative path to user freebusy--> + <substitution> + <key>$freebusypath%d:</key> + <value>$calendarhome%d:/$freebusy:</value> + </substitution> + <substitution> + <key>$email%d:</key> + <value>$userid%d:@example.com</value> + </substitution> + <!-- calendar user address of user--> + <substitution> + <key>$cuaddr%d:</key> + <value>mailto:$email%d:</value> + </substitution> + <substitution> + <key>$cuaddralt%d:</key> + <value>$principaluri%d:</value> + </substitution> + <substitution> + <key>$cuaddraltnoslash%d:</key> + <value>$principals_uids:$userguid%d:</value> + </substitution> + <substitution> + <key>$cuaddrurn%d:</key> + <value>urn:uuid:$userguid%d:</value> + </substitution> + + <!-- relative path to user addressbook home--> + <substitution> + <key>$addressbookhome%d:</key> + <value>$addressbooks_uids:$userguid%d:</value> + </substitution> + <!-- relative path to user addressbook--> + <substitution> + <key>$addressbookpath%d:</key> + <value>$addressbookhome%d:/$addressbook:</value> + </substitution> + </repeat> + + <!-- Ten public accounts --> + <repeat count="10"> + <!-- user id --> + <substitution> + <key>$publicuserid%d:</key> + <value>public%02d</value> + </substitution> + <!-- user guid --> + <substitution> + <key>$publicuserguid%d:</key> + <value>public%02d</value> + </substitution> + <!-- user name --> + <substitution> + <key>$publicusername%d:</key> + <value>Public %02d</value> + </substitution> + <!-- password --> + <substitution> + <key>$publicpswd%d:</key> + <value>public%02d</value> + </substitution> + <!-- relative path to user principal resource--> + <substitution> + <key>$publicprincipal%d:</key> + <value>$principals_users:$publicuserid%d:/</value> + </substitution> + <substitution> + <key>$publicprincipaluri%d:</key> + <value>$principals_uids:$publicuserguid%d:/</value> + </substitution> + <!-- relative path to user calendar home--> + <substitution> + <key>$publiccalendarhome%d:</key> + <value>$calendars_uids:$publicuserguid%d:</value> + </substitution> + <!-- relative path to user calendar--> + <substitution> + <key>$publiccalendarpath%d:</key> + <value>$calendars_uids:$publicuserguid%d:/$calendar:</value> + </substitution> + <substitution> + <key>$publicemail%d:</key> + <value>$publicuserid%d:@example.com</value> + </substitution> + <!-- calendar user address of user--> + <substitution> + <key>$publiccuaddr%d:</key> + <value>mailto:$publicemail%d:</value> + </substitution> + <substitution> + <key>$publiccuaddralt%d:</key> + <value>$publicprincipaluri%d:</value> + </substitution> + <substitution> + <key>$publiccuaddrurn%d:</key> + <value>urn:uuid:$publicuserguid%d:</value> + </substitution> + </repeat> + + <!-- Twenty resource accounts --> + <repeat count="20"> + <substitution> + <key>$resourceid%d:</key> + <value>resource%02d</value> + </substitution> + <!-- resource guid--> + <substitution> + <key>$resourceguid%d:</key> + <value>resource%02d</value> + </substitution> + <!-- resource name--> + <substitution> + <key>$resourcename%d:</key> + <value>Resource %02d</value> + </substitution> + <!-- relative path to first resource calendar home--> + <substitution> + <key>$rcalendarhome%d:</key> + <value>$calendars_uids:$resourceguid%d:</value> + </substitution> + <!-- relative path to first resource calendar home--> + <substitution> + <key>$rcalendarpath%d:</key> + <value>$calendars_uids:$resourceguid%d:/$calendar:</value> + </substitution> + <!-- relative path to first resource inbox--> + <substitution> + <key>$rinboxpath%d:</key> + <value>$calendars_uids:$resourceguid%d:/$inbox:</value> + </substitution> + <!-- relative path to first resource outbox--> + <substitution> + <key>$routboxpath%d:</key> + <value>$calendars_uids:$resourceguid%d:/$outbox:</value> + </substitution> + <!-- relative path to first resource principal resource--> + <substitution> + <key>$rprincipal%d:</key> + <value>$principals_resources:$resourceid%d:/</value> + </substitution> + <substitution> + <key>$rprincipaluri%d:</key> + <value>$principals_uids:$resourceguid%d:/</value> + </substitution> + <substitution> + <key>$rcuaddralt%d:</key> + <value>$rprincipaluri%d:</value> + </substitution> + <substitution> + <key>$rcuaddrurn%d:</key> + <value>urn:uuid:$resourceguid%d:</value> + </substitution> + </repeat> + + <!-- Ten Location accounts --> + <repeat count="10"> + <substitution> + <key>$locationid%d:</key> + <value>location%02d</value> + </substitution> + <!-- location guid--> + <substitution> + <key>$locationguid%d:</key> + <value>location%02d</value> + </substitution> + <!-- location name--> + <substitution> + <key>$locationname%d:</key> + <value>Location %02d</value> + </substitution> + <!-- relative path to first location calendar home--> + <substitution> + <key>$lcalendarhome%d:</key> + <value>$calendars_uids:$locationguid%d:</value> + </substitution> + <!-- relative path to first location calendar home--> + <substitution> + <key>$lcalendarpath%d:</key> + <value>$calendars_uids:$locationguid%d:/$calendar:</value> + </substitution> + <!-- relative path to first location inbox--> + <substitution> + <key>$linboxpath%d:</key> + <value>$calendars_uids:$locationguid%d:/$inbox:</value> + </substitution> + <!-- relative path to first location outbox--> + <substitution> + <key>$loutboxpath%d:</key> + <value>$calendars_uids:$locationguid%d:/$outbox:</value> + </substitution> + <!-- relative path to first location principal resource--> + <substitution> + <key>$lprincipal%d:</key> + <value>$principals_resources:$locationid%d:/</value> + </substitution> + <substitution> + <key>$lprincipaluri%d:</key> + <value>$principals_uids:$locationguid%d:/</value> + </substitution> + <substitution> + <key>$lcuaddralt%d:</key> + <value>$lprincipaluri%d:</value> + </substitution> + <substitution> + <key>$lcuaddrurn%d:</key> + <value>urn:uuid:$locationguid%d:</value> + </substitution> + </repeat> + + + <!-- Ten Group accounts --> + <repeat count="10"> + <substitution> + <key>$groupid%d:</key> + <value>group%02d</value> + </substitution> + <!-- group guid--> + <substitution> + <key>$groupguid%d:</key> + <value>group%02d</value> + </substitution> + <!-- group name--> + <substitution> + <key>$groupname%d:</key> + <value>Group %02d</value> + </substitution> + <!-- relative path to first group principal resource--> + <substitution> + <key>$gprincipal%d:</key> + <value>$principals_resources:$groupid%d:/</value> + </substitution> + <substitution> + <key>$gprincipaluri%d:</key> + <value>$principals_uids:$groupguid%d:/</value> + </substitution> + <substitution> + <key>$gcuaddralt%d:</key> + <value>$gprincipaluri%d:</value> + </substitution> + <substitution> + <key>$gcuaddrurn%d:</key> + <value>urn:uuid:$groupguid%d:</value> + </substitution> + </repeat> + + <!-- User with non-ascii name --> + <substitution> + <key>$i18nid:</key> + <value>i18nuser</value> + </substitution> + <!-- group guid--> + <substitution> + <key>$i18nguid:</key> + <value>i18nuser</value> + </substitution> + <!-- group name--> + <substitution> + <key>$i18nname:</key> + <value>まだ</value> + </substitution> + <!-- password --> + <substitution> + <key>$i18npswd:</key> + <value>i18nuser</value> + </substitution> + <!-- relative path to user calendar--> + <substitution> + <key>$i18ncalendarpath:</key> + <value>$calendars_uids:$i18nguid:/$calendar:</value> + </substitution> + <substitution> + <key>$i18nemail:</key> + <value>$i18nid:@example.com</value> + </substitution> + <!-- CUAddrs --> + <substitution> + <key>$i18ncuaddr:</key> + <value>mailto:$i18nemail:</value> + </substitution> + <substitution> + <key>$i18ncuaddrurn:</key> + <value>urn:uuid:$i18nguid:</value> + </substitution> + + <!-- relative path to disabled group principal resource--> + <substitution> + <key>$principaldisabled:</key> + <value>$principals_groups:disabledgroup/</value> + </substitution> + <substitution> + <key>$principaluridisabled:</key> + <value>$principals_uids:disabledgroup/</value> + </substitution> + <!-- calendar user address of disabled group--> + <substitution> + <key>$cuaddrdisabled:</key> + <value>$principals_uids:disabledgroup/</value> + </substitution> + + <!-- Override some of the above definitions for special cases --> + + <!-- calendar user address of second user--> + <substitution> + <key>$cuaddr2:</key> + <value>MAILTO:$email2:</value> + </substitution> + + </substitutions> +</serverinfo> -- 1.9.0