Code Repositories xandikos / 21534e1
Add basic caldavtester runner. Jelmer Vernooij 3 years ago
4 changed file(s) with 802 addition(s) and 0 deletion(s). Raw diff Collapse all Expand all
11
22 check:
33 $(PYTHON) -m unittest dystros.tests.test_suite
4
5 web:
6 $(PYTHON) -m dystros.web
7
8 check-compat:
9 cd compat && ./run.sh
10
11 check-all: check check-compat
0 This directory contains scripts to run Apple's caldav-tester against the
1 dystros web server.
2
3 to run:
4
5 ./run.sh
0 #!/bin/bash
1
2 # Copied from debian/tests/caldav in calypso-1.5 by Guido Gunther.
3
4 DYSTROS_PID=
5 DAEMON_LOG=$(mktemp)
6 TESTS=
7
8 set -e
9
10 cleanup() {
11 [ -z ${DYSTROS_PID} ] || kill ${DYSTROS_PID}
12 rm --preserve-root -rf ${SERVEDIR}
13 cat ${DAEMON_LOG}
14 }
15
16 run_dystros()
17 {
18 PYTHONPATH=$PWD/.. python3 -m dystros.web -p5233 -llocalhost -d ${SERVEDIR} 2>&1 >$DAEMON_LOG &
19 DYSTROS_PID=$!
20 sleep 2
21 }
22
23 SERVEDIR=$(mktemp -d)
24 trap cleanup 0 INT QUIT ABRT PIPE TERM
25
26 run_dystros
27
28 testcaldav -s $PWD/serverinfo.xml ${TESTS}
0 <?xml version="1.0" standalone="no"?>
1
2 <!DOCTYPE serverinfo SYSTEM "serverinfo.dtd">
3
4 <!--
5 Copyright (c) 2006-2013 Apple Inc. All rights reserved.
6
7 Licensed under the Apache License, Version 2.0 (the "License");
8 you may not use this file except in compliance with the License.
9 You may obtain a copy of the License at
10
11 http://www.apache.org/licenses/LICENSE-2.0
12
13 Unless required by applicable law or agreed to in writing, software
14 distributed under the License is distributed on an "AS IS" BASIS,
15 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 See the License for the specific language governing permissions and
17 limitations under the License.
18 -->
19
20 <serverinfo>
21 <host>localhost</host>
22 <nonsslport>5233</nonsslport>
23 <sslport>8443</sslport>
24 <authtype>basic</authtype>
25
26 <waitcount>120</waitcount>
27 <waitdelay>0.25</waitdelay>
28
29 <features>
30 <!-- Generic WebDAV extensions -->
31 <feature>COPY Method</feature> <!-- COPY method -->
32 <feature>MOVE Method</feature> <!-- MOVE method -->
33
34 <feature>ctag</feature> <!-- ctag extension -->
35 <feature>directory listing</feature> <!-- GET on collection -->
36
37 <!-- CalDAV specific extension -->
38 <feature>caldav</feature> <!-- Basic CalDAV feature enabler -->
39 <feature>no-duplicate-uids</feature> <!-- duplicate UIDs in same home not supported -->
40
41 <!-- CardDAV specific extension -->
42 <feature>carddav</feature> <!-- Basic CardDAV feature enabler -->
43 <feature>default-addressbook</feature> <!-- Default address book behavior -->
44 <feature>shared-addressbooks</feature> <!-- Shared address books extension -->
45 <!-- <feature>directory-gateway</feature> --> <!-- Directory gateway extension -->
46
47 </features>
48
49 <substitutions>
50 <!-- Useful xpath shortcuts for verifiers -->
51 <substitution>
52 <key>$multistatus-response-prefix:</key>
53 <value>/{DAV:}multistatus/{DAV:}response</value>
54 </substitution>
55 <substitution>
56 <key>$multistatus-href-prefix:</key>
57 <value>/{DAV:}multistatus/{DAV:}response/{DAV:}href</value>
58 </substitution>
59 <substitution>
60 <key>$verify-response-prefix:</key>
61 <value>{DAV:}response/{DAV:}propstat/{DAV:}prop</value>
62 </substitution>
63 <substitution>
64 <key>$verify-property-prefix:</key>
65 <value>/{DAV:}multistatus/{DAV:}response/{DAV:}propstat/{DAV:}prop</value>
66 </substitution>
67 <substitution>
68 <key>$verify-bad-response:</key>
69 <value>/{DAV:}multistatus/{DAV:}response/{DAV:}status</value>
70 </substitution>
71 <substitution>
72 <key>$verify-error-response:</key>
73 <value>/{DAV:}multistatus/{DAV:}response/{DAV:}error</value>
74 </substitution>
75 <substitution>
76 <key>$CALDAV:</key>
77 <value>urn:ietf:params:xml:ns:caldav</value>
78 </substitution>
79 <substitution>
80 <key>$CARDDAV:</key>
81 <value>urn:ietf:params:xml:ns:carddav</value>
82 </substitution>
83 <substitution>
84 <key>$CS:</key>
85 <value>http://calendarserver.org/ns/</value>
86 </substitution>
87
88 <!-- Server configuration settings -->
89 <!-- $host: and $hostssl: are implicitly added by CalDAVTester based
90 on the host/nonsslport/sslport values and ssl command line switch -->
91
92 <!-- relative path to caldav root-->
93 <substitution>
94 <key>$root:</key>
95 <value>/</value>
96 </substitution>
97
98 <!-- relative path to main principal collection-->
99 <substitution>
100 <key>$principalcollection:</key>
101 <value>$root:principals/</value>
102 </substitution>
103
104 <!-- the core recored type collections-->
105 <substitution>
106 <key>$uidstype:</key>
107 <value>__uids__</value>
108 </substitution>
109 <substitution>
110 <key>$userstype:</key>
111 <value>users</value>
112 </substitution>
113 <substitution>
114 <key>$groupstype:</key>
115 <value>groups</value>
116 </substitution>
117 <substitution>
118 <key>$locationstype:</key>
119 <value>locations</value>
120 </substitution>
121 <substitution>
122 <key>$resourcestype:</key>
123 <value>resources</value>
124 </substitution>
125
126 <!-- relative path to record type principal collections-->
127 <substitution>
128 <key>$principals_uids:</key>
129 <value>$principalcollection:$uidstype:/</value>
130 </substitution>
131 <substitution>
132 <key>$principals_users:</key>
133 <value>$principalcollection:$userstype:/</value>
134 </substitution>
135 <substitution>
136 <key>$principals_groups:</key>
137 <value>$principalcollection:$groupstype:/</value>
138 </substitution>
139 <substitution>
140 <key>$principals_resources:</key>
141 <value>$principalcollection:$resourcestype:/</value>
142 </substitution>
143 <substitution>
144 <key>$principals_locations:</key>
145 <value>$principalcollection:$locationstype:/</value>
146 </substitution>
147
148 <!-- relative path to calendars collection-->
149 <substitution>
150 <key>$calendars:</key>
151 <value>$root:calendars/</value>
152 </substitution>
153
154 <!-- relative path to record type calendar collections-->
155 <substitution>
156 <key>$calendars_uids:</key>
157 <value>$calendars:$uidstype:/</value>
158 </substitution>
159 <substitution>
160 <key>$calendars_users:</key>
161 <value>$calendars:$userstype:/</value>
162 </substitution>
163 <substitution>
164 <key>$calendars_groups:</key>
165 <value>$calendars:$groupstype:/</value>
166 </substitution>
167 <substitution>
168 <key>$calendars_resources:</key>
169 <value>$calendars:$resourcestype:/</value>
170 </substitution>
171 <substitution>
172 <key>$calendars_locations:</key>
173 <value>$calendars:$locationstype:/</value>
174 </substitution>
175
176 <!-- primary calendar name-->
177 <substitution>
178 <key>$calendar:</key>
179 <value>calendar</value>
180 </substitution>
181
182 <!-- primary tasks-only calendar name-->
183 <substitution>
184 <key>$tasks:</key>
185 <value>tasks</value>
186 </substitution>
187
188 <!-- primary polls-only calendar name-->
189 <substitution>
190 <key>$polls:</key>
191 <value>polls</value>
192 </substitution>
193
194 <!-- inbox name-->
195 <substitution>
196 <key>$inbox:</key>
197 <value>inbox</value>
198 </substitution>
199
200 <!-- outbox name-->
201 <substitution>
202 <key>$outbox:</key>
203 <value>outbox</value>
204 </substitution>
205
206 <!-- dropbox name-->
207 <substitution>
208 <key>$dropbox:</key>
209 <value>dropbox</value>
210 </substitution>
211
212 <!-- attachments name-->
213 <substitution>
214 <key>$attachments:</key>
215 <value>dropbox</value>
216 </substitution>
217
218 <!-- notification name-->
219 <substitution>
220 <key>$notification:</key>
221 <value>notification</value>
222 </substitution>
223
224 <!-- freebusy name-->
225 <substitution>
226 <key>$freebusy:</key>
227 <value>freebusy</value>
228 </substitution>
229
230 <!-- server-to-server inbox-->
231 <substitution>
232 <key>$servertoserver:</key>
233 <value>$root:inbox</value>
234 </substitution>
235
236 <!-- timezone service-->
237 <substitution>
238 <key>$timezoneservice:</key>
239 <value>$root:timezones</value>
240 </substitution>
241
242 <!-- timezone std service-->
243 <substitution>
244 <key>$timezonestdservice:</key>
245 <value>$root:stdtimezones</value>
246 </substitution>
247
248 <!-- relative path to addressbooks collection-->
249 <substitution>
250 <key>$addressbooks:</key>
251 <value>$root:addressbooks/</value>
252 </substitution>
253
254 <!-- relative path to record type addressbook collections-->
255 <substitution>
256 <key>$addressbooks_uids:</key>
257 <value>$addressbooks:$uidstype:/</value>
258 </substitution>
259 <substitution>
260 <key>$addressbooks_users:</key>
261 <value>$addressbooks:$userstype:/</value>
262 </substitution>
263 <substitution>
264 <key>$addressbooks_groups:</key>
265 <value>$addressbooks:$groupstype:/</value>
266 </substitution>
267
268 <!-- primary addressbook name -->
269 <substitution>
270 <key>$addressbook:</key>
271 <value>addressbook</value>
272 </substitution>
273
274 <!-- directory name -->
275 <substitution>
276 <key>$directory:</key>
277 <value>$root:directory/</value>
278 </substitution>
279
280 <!-- POST add-member URI suffix -->
281 <substitution>
282 <key>$add-member:</key>
283 <value>;add-member</value>
284 </substitution>
285
286 <!-- user id for admin user -->
287 <substitution>
288 <key>$useradmin:</key>
289 <value>admin</value>
290 </substitution>
291 <!-- guid for admin user -->
292 <substitution>
293 <key>$useradminguid:</key>
294 <value>admin</value>
295 </substitution>
296 <!-- password for admin user -->
297 <substitution>
298 <key>$pswdadmin:</key>
299 <value>admin</value>
300 </substitution>
301
302 <!-- relative path to admin principal resource-->
303 <substitution>
304 <key>$principal_admin:</key>
305 <value>$principals_users:$useradmin:/</value>
306 </substitution>
307 <substitution>
308 <key>$principaluri_admin:</key>
309 <value>$principals_uids:$useradminguid:/</value>
310 </substitution>
311
312 <!-- user id for apprentice user -->
313 <substitution>
314 <key>$userapprentice:</key>
315 <value>apprentice</value>
316 </substitution>
317 <!-- guid for apprentice user -->
318 <substitution>
319 <key>$userapprenticeguid:</key>
320 <value>apprentice</value>
321 </substitution>
322 <!-- password for admin user -->
323 <substitution>
324 <key>$pswdapprentice:</key>
325 <value>apprentice</value>
326 </substitution>
327
328 <!-- relative path to apprentice principal resource-->
329 <substitution>
330 <key>$principal_apprentice:</key>
331 <value>$principals_users:$userapprentice:/</value>
332 </substitution>
333 <substitution>
334 <key>$principaluri_apprentice:</key>
335 <value>$principals_uids:$userapprenticeguid:/</value>
336 </substitution>
337
338 <!-- user id for proxy user -->
339 <substitution>
340 <key>$userproxy:</key>
341 <value>superuser</value>
342 </substitution>
343 <!-- password for proxy user -->
344 <substitution>
345 <key>$pswdproxy:</key>
346 <value>superuser</value>
347 </substitution>
348
349 <!-- Forty user accounts -->
350 <repeat count="40">
351 <!-- user id -->
352 <substitution>
353 <key>$userid%d:</key>
354 <value>user%02d</value>
355 </substitution>
356 <!-- user guid -->
357 <substitution>
358 <key>$userguid%d:</key>
359 <value>user%02d</value>
360 </substitution>
361 <!-- user name -->
362 <substitution>
363 <key>$username%d:</key>
364 <value>User %02d</value>
365 </substitution>
366 <!-- user name URI encoded -->
367 <substitution>
368 <key>$username-encoded%d:</key>
369 <value>User%%20%02d</value>
370 </substitution>
371 <!-- first name -->
372 <substitution>
373 <key>$firstname%d:</key>
374 <value>User</value>
375 </substitution>
376 <!-- last name -->
377 <substitution>
378 <key>$lastname%d:</key>
379 <value>%02d</value>
380 </substitution>
381 <!-- password -->
382 <substitution>
383 <key>$pswd%d:</key>
384 <value>user%02d</value>
385 </substitution>
386 <!-- relative path to user principal resource-->
387 <substitution>
388 <key>$principal%d:</key>
389 <value>$principals_users:$userid%d:/</value>
390 </substitution>
391 <substitution>
392 <key>$principaluri%d:</key>
393 <value>$principals_uids:$userguid%d:/</value>
394 </substitution>
395 <substitution>
396 <key>$principal%dnoslash:</key>
397 <value>$principals_users:$userid%d:</value>
398 </substitution>
399
400 <!-- relative path to user calendar home-->
401 <substitution>
402 <key>$calendarhome%d:</key>
403 <value>$calendars_uids:$userguid%d:</value>
404 </substitution>
405 <!-- relative path to user alternate calendar home-->
406 <substitution>
407 <key>$calendarhomealt%d:</key>
408 <value>$calendars_users:$userid%d:</value>
409 </substitution>
410 <!-- relative path to user calendar-->
411 <substitution>
412 <key>$calendarpath%d:</key>
413 <value>$calendarhome%d:/$calendar:</value>
414 </substitution>
415 <!-- relative path to user alternate calendar-->
416 <substitution>
417 <key>$calendarpathalt%d:</key>
418 <value>$calendarhomealt%d:/$calendar:</value>
419 </substitution>
420 <!-- relative path to user tasks calendar-->
421 <substitution>
422 <key>$taskspath%d:</key>
423 <value>$calendarhome%d:/$tasks:</value>
424 </substitution>
425 <!-- relative path to user polls calendar-->
426 <substitution>
427 <key>$pollspath%d:</key>
428 <value>$calendarhome%d:/$polls:</value>
429 </substitution>
430 <!-- relative path to user inbox-->
431 <substitution>
432 <key>$inboxpath%d:</key>
433 <value>$calendarhome%d:/$inbox:</value>
434 </substitution>
435 <!-- relative path to user outbox-->
436 <substitution>
437 <key>$outboxpath%d:</key>
438 <value>$calendarhome%d:/$outbox:</value>
439 </substitution>
440 <!-- relative path to user dropbox-->
441 <substitution>
442 <key>$dropboxpath%d:</key>
443 <value>$calendarhome%d:/$dropbox:</value>
444 </substitution>
445 <!-- relative path to user notification-->
446 <substitution>
447 <key>$notificationpath%d:</key>
448 <value>$calendarhome%d:/$notification:</value>
449 </substitution>
450 <!-- relative path to user freebusy-->
451 <substitution>
452 <key>$freebusypath%d:</key>
453 <value>$calendarhome%d:/$freebusy:</value>
454 </substitution>
455 <substitution>
456 <key>$email%d:</key>
457 <value>$userid%d:@example.com</value>
458 </substitution>
459 <!-- calendar user address of user-->
460 <substitution>
461 <key>$cuaddr%d:</key>
462 <value>mailto:$email%d:</value>
463 </substitution>
464 <substitution>
465 <key>$cuaddralt%d:</key>
466 <value>$principaluri%d:</value>
467 </substitution>
468 <substitution>
469 <key>$cuaddraltnoslash%d:</key>
470 <value>$principals_uids:$userguid%d:</value>
471 </substitution>
472 <substitution>
473 <key>$cuaddrurn%d:</key>
474 <value>urn:uuid:$userguid%d:</value>
475 </substitution>
476
477 <!-- relative path to user addressbook home-->
478 <substitution>
479 <key>$addressbookhome%d:</key>
480 <value>$addressbooks_uids:$userguid%d:</value>
481 </substitution>
482 <!-- relative path to user addressbook-->
483 <substitution>
484 <key>$addressbookpath%d:</key>
485 <value>$addressbookhome%d:/$addressbook:</value>
486 </substitution>
487 </repeat>
488
489 <!-- Ten public accounts -->
490 <repeat count="10">
491 <!-- user id -->
492 <substitution>
493 <key>$publicuserid%d:</key>
494 <value>public%02d</value>
495 </substitution>
496 <!-- user guid -->
497 <substitution>
498 <key>$publicuserguid%d:</key>
499 <value>public%02d</value>
500 </substitution>
501 <!-- user name -->
502 <substitution>
503 <key>$publicusername%d:</key>
504 <value>Public %02d</value>
505 </substitution>
506 <!-- password -->
507 <substitution>
508 <key>$publicpswd%d:</key>
509 <value>public%02d</value>
510 </substitution>
511 <!-- relative path to user principal resource-->
512 <substitution>
513 <key>$publicprincipal%d:</key>
514 <value>$principals_users:$publicuserid%d:/</value>
515 </substitution>
516 <substitution>
517 <key>$publicprincipaluri%d:</key>
518 <value>$principals_uids:$publicuserguid%d:/</value>
519 </substitution>
520 <!-- relative path to user calendar home-->
521 <substitution>
522 <key>$publiccalendarhome%d:</key>
523 <value>$calendars_uids:$publicuserguid%d:</value>
524 </substitution>
525 <!-- relative path to user calendar-->
526 <substitution>
527 <key>$publiccalendarpath%d:</key>
528 <value>$calendars_uids:$publicuserguid%d:/$calendar:</value>
529 </substitution>
530 <substitution>
531 <key>$publicemail%d:</key>
532 <value>$publicuserid%d:@example.com</value>
533 </substitution>
534 <!-- calendar user address of user-->
535 <substitution>
536 <key>$publiccuaddr%d:</key>
537 <value>mailto:$publicemail%d:</value>
538 </substitution>
539 <substitution>
540 <key>$publiccuaddralt%d:</key>
541 <value>$publicprincipaluri%d:</value>
542 </substitution>
543 <substitution>
544 <key>$publiccuaddrurn%d:</key>
545 <value>urn:uuid:$publicuserguid%d:</value>
546 </substitution>
547 </repeat>
548
549 <!-- Twenty resource accounts -->
550 <repeat count="20">
551 <substitution>
552 <key>$resourceid%d:</key>
553 <value>resource%02d</value>
554 </substitution>
555 <!-- resource guid-->
556 <substitution>
557 <key>$resourceguid%d:</key>
558 <value>resource%02d</value>
559 </substitution>
560 <!-- resource name-->
561 <substitution>
562 <key>$resourcename%d:</key>
563 <value>Resource %02d</value>
564 </substitution>
565 <!-- relative path to first resource calendar home-->
566 <substitution>
567 <key>$rcalendarhome%d:</key>
568 <value>$calendars_uids:$resourceguid%d:</value>
569 </substitution>
570 <!-- relative path to first resource calendar home-->
571 <substitution>
572 <key>$rcalendarpath%d:</key>
573 <value>$calendars_uids:$resourceguid%d:/$calendar:</value>
574 </substitution>
575 <!-- relative path to first resource inbox-->
576 <substitution>
577 <key>$rinboxpath%d:</key>
578 <value>$calendars_uids:$resourceguid%d:/$inbox:</value>
579 </substitution>
580 <!-- relative path to first resource outbox-->
581 <substitution>
582 <key>$routboxpath%d:</key>
583 <value>$calendars_uids:$resourceguid%d:/$outbox:</value>
584 </substitution>
585 <!-- relative path to first resource principal resource-->
586 <substitution>
587 <key>$rprincipal%d:</key>
588 <value>$principals_resources:$resourceid%d:/</value>
589 </substitution>
590 <substitution>
591 <key>$rprincipaluri%d:</key>
592 <value>$principals_uids:$resourceguid%d:/</value>
593 </substitution>
594 <substitution>
595 <key>$rcuaddralt%d:</key>
596 <value>$rprincipaluri%d:</value>
597 </substitution>
598 <substitution>
599 <key>$rcuaddrurn%d:</key>
600 <value>urn:uuid:$resourceguid%d:</value>
601 </substitution>
602 </repeat>
603
604 <!-- Ten Location accounts -->
605 <repeat count="10">
606 <substitution>
607 <key>$locationid%d:</key>
608 <value>location%02d</value>
609 </substitution>
610 <!-- location guid-->
611 <substitution>
612 <key>$locationguid%d:</key>
613 <value>location%02d</value>
614 </substitution>
615 <!-- location name-->
616 <substitution>
617 <key>$locationname%d:</key>
618 <value>Location %02d</value>
619 </substitution>
620 <!-- relative path to first location calendar home-->
621 <substitution>
622 <key>$lcalendarhome%d:</key>
623 <value>$calendars_uids:$locationguid%d:</value>
624 </substitution>
625 <!-- relative path to first location calendar home-->
626 <substitution>
627 <key>$lcalendarpath%d:</key>
628 <value>$calendars_uids:$locationguid%d:/$calendar:</value>
629 </substitution>
630 <!-- relative path to first location inbox-->
631 <substitution>
632 <key>$linboxpath%d:</key>
633 <value>$calendars_uids:$locationguid%d:/$inbox:</value>
634 </substitution>
635 <!-- relative path to first location outbox-->
636 <substitution>
637 <key>$loutboxpath%d:</key>
638 <value>$calendars_uids:$locationguid%d:/$outbox:</value>
639 </substitution>
640 <!-- relative path to first location principal resource-->
641 <substitution>
642 <key>$lprincipal%d:</key>
643 <value>$principals_resources:$locationid%d:/</value>
644 </substitution>
645 <substitution>
646 <key>$lprincipaluri%d:</key>
647 <value>$principals_uids:$locationguid%d:/</value>
648 </substitution>
649 <substitution>
650 <key>$lcuaddralt%d:</key>
651 <value>$lprincipaluri%d:</value>
652 </substitution>
653 <substitution>
654 <key>$lcuaddrurn%d:</key>
655 <value>urn:uuid:$locationguid%d:</value>
656 </substitution>
657 </repeat>
658
659
660 <!-- Ten Group accounts -->
661 <repeat count="10">
662 <substitution>
663 <key>$groupid%d:</key>
664 <value>group%02d</value>
665 </substitution>
666 <!-- group guid-->
667 <substitution>
668 <key>$groupguid%d:</key>
669 <value>group%02d</value>
670 </substitution>
671 <!-- group name-->
672 <substitution>
673 <key>$groupname%d:</key>
674 <value>Group %02d</value>
675 </substitution>
676 <!-- relative path to first group principal resource-->
677 <substitution>
678 <key>$gprincipal%d:</key>
679 <value>$principals_resources:$groupid%d:/</value>
680 </substitution>
681 <substitution>
682 <key>$gprincipaluri%d:</key>
683 <value>$principals_uids:$groupguid%d:/</value>
684 </substitution>
685 <substitution>
686 <key>$gcuaddralt%d:</key>
687 <value>$gprincipaluri%d:</value>
688 </substitution>
689 <substitution>
690 <key>$gcuaddrurn%d:</key>
691 <value>urn:uuid:$groupguid%d:</value>
692 </substitution>
693 </repeat>
694
695 <!-- User with non-ascii name -->
696 <substitution>
697 <key>$i18nid:</key>
698 <value>i18nuser</value>
699 </substitution>
700 <!-- group guid-->
701 <substitution>
702 <key>$i18nguid:</key>
703 <value>i18nuser</value>
704 </substitution>
705 <!-- group name-->
706 <substitution>
707 <key>$i18nname:</key>
708 <value>まだ</value>
709 </substitution>
710 <!-- password -->
711 <substitution>
712 <key>$i18npswd:</key>
713 <value>i18nuser</value>
714 </substitution>
715 <!-- relative path to user calendar-->
716 <substitution>
717 <key>$i18ncalendarpath:</key>
718 <value>$calendars_uids:$i18nguid:/$calendar:</value>
719 </substitution>
720 <substitution>
721 <key>$i18nemail:</key>
722 <value>$i18nid:@example.com</value>
723 </substitution>
724 <!-- CUAddrs -->
725 <substitution>
726 <key>$i18ncuaddr:</key>
727 <value>mailto:$i18nemail:</value>
728 </substitution>
729 <substitution>
730 <key>$i18ncuaddrurn:</key>
731 <value>urn:uuid:$i18nguid:</value>
732 </substitution>
733
734 <!-- relative path to disabled group principal resource-->
735 <substitution>
736 <key>$principaldisabled:</key>
737 <value>$principals_groups:disabledgroup/</value>
738 </substitution>
739 <substitution>
740 <key>$principaluridisabled:</key>
741 <value>$principals_uids:disabledgroup/</value>
742 </substitution>
743 <!-- calendar user address of disabled group-->
744 <substitution>
745 <key>$cuaddrdisabled:</key>
746 <value>$principals_uids:disabledgroup/</value>
747 </substitution>
748
749 <!-- Override some of the above definitions for special cases -->
750
751 <!-- calendar user address of second user-->
752 <substitution>
753 <key>$cuaddr2:</key>
754 <value>MAILTO:$email2:</value>
755 </substitution>
756
757 </substitutions>
758 </serverinfo>