[CalendarServer-changes] [1753] CalDAVTester/trunk
source_changes at macosforge.org
source_changes at macosforge.org
Thu Aug 2 09:59:48 PDT 2007
Revision: 1753
http://trac.macosforge.org/projects/calendarserver/changeset/1753
Author: cdaboo at apple.com
Date: 2007-08-02 09:59:48 -0700 (Thu, 02 Aug 2007)
Log Message:
-----------
Tool to auto-configure Open Directory with the correct accounts needed for CalDAVTester to run. It also copies
the required large calendars into the server doc root.
Added Paths:
-----------
CalDAVTester/trunk/data/
CalDAVTester/trunk/data/calendar.10.tgz
CalDAVTester/trunk/data/calendar.100.tgz
CalDAVTester/trunk/data/calendar.1000.tgz
CalDAVTester/trunk/odsetup.py
CalDAVTester/trunk/scripts/server/serverinfo-template-old.xml
CalDAVTester/trunk/scripts/server/serverinfo-template.xml
Added: CalDAVTester/trunk/data/calendar.10.tgz
===================================================================
(Binary files differ)
Property changes on: CalDAVTester/trunk/data/calendar.10.tgz
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: CalDAVTester/trunk/data/calendar.100.tgz
===================================================================
(Binary files differ)
Property changes on: CalDAVTester/trunk/data/calendar.100.tgz
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: CalDAVTester/trunk/data/calendar.1000.tgz
===================================================================
(Binary files differ)
Property changes on: CalDAVTester/trunk/data/calendar.1000.tgz
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: CalDAVTester/trunk/odsetup.py
===================================================================
--- CalDAVTester/trunk/odsetup.py (rev 0)
+++ CalDAVTester/trunk/odsetup.py 2007-08-02 16:59:48 UTC (rev 1753)
@@ -0,0 +1,357 @@
+#!/usr/bin/env python
+#
+##
+# Copyright (c) 2006-2007 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.
+#
+# DRI: Cyrus Daboo, cdaboo at apple.com
+##
+#
+# Creates some test accounts on an OpenDirectory server for use with CalDAVTester
+#
+
+from plistlib import readPlist
+from plistlib import readPlistFromString
+from plistlib import writePlist
+import commands
+import getopt
+import os
+import sys
+import uuid
+
+diradmin_user = "admin"
+diradmin_pswd = "admin"
+directory_node = "/LDAPv3/127.0.0.1"
+service_locator = "Bogus"
+
+serverinfo_default = "scripts/server/serverinfo.xml"
+serverinfo_template = "scripts/server/serverinfo-template.xml"
+
+base_dir = "../CalendarServer/"
+
+guids = {
+ "testadmin": "",
+ "user01": "",
+ "user02": "",
+ "user03": "",
+ "resource01":"",
+}
+
+# List of users as a tuple: (<<name>>, <<pswd>>, <<ServicesLocator value>, <<repeat count>>)
+adminattrs = {
+ "dsAttrTypeStandard:RealName": "Test Admin",
+ "dsAttrTypeStandard:EMailAddress": "testadmin at example.com",
+ "dsAttrTypeStandard:ServicesLocator": "Bogus"
+}
+
+userattrs = {
+ "dsAttrTypeStandard:RealName": "User %02d",
+ "dsAttrTypeStandard:EMailAddress": "user%02d at example.com",
+ "dsAttrTypeStandard:ServicesLocator": "Bogus"
+}
+
+publicattrs = {
+ "dsAttrTypeStandard:RealName": "Public %02d",
+ "dsAttrTypeStandard:EMailAddress": "public%02d at example.com",
+ "dsAttrTypeStandard:ServicesLocator": "Bogus"
+}
+
+locationattrs = {
+ "dsAttrTypeStandard:GeneratedUID": "Bogus",
+ "dsAttrTypeStandard:RealName": "Room %02d",
+ "dsAttrTypeStandard:ServicesLocator": "Bogus",
+ "dsAttrTypeStandard:ResourceType": "1",
+ "dsAttrTypeStandard:ResourceInfo": """<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>com.apple.WhitePagesFramework</key>
+ <dict>
+ <key>AutoAcceptsInvitation</key>
+ <true/>
+ <key>CalendaringDelegate</key>
+ <string>%(guid)s</string>
+ <key>Label</key>
+ <string>Room</string>
+ </dict>
+</dict>
+</plist>""".replace("\n", "").replace('"', '\\"')
+}
+
+resourceattrs = {
+ "dsAttrTypeStandard:GeneratedUID": "Bogus",
+ "dsAttrTypeStandard:RealName": "Resource %02d",
+ "dsAttrTypeStandard:ServicesLocator": "Bogus",
+ "dsAttrTypeStandard:ResourceType": "0",
+ "dsAttrTypeStandard:ResourceInfo": """<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>com.apple.WhitePagesFramework</key>
+ <dict>
+ <key>AutoAcceptsInvitation</key>
+ <true/>
+ <key>CalendaringDelegate</key>
+ <string>%(guid)s</string>
+ <key>Label</key>
+ <string>Printer</string>
+ </dict>
+</dict>
+</plist>""".replace("\n", "").replace('"', '\\"')
+}
+
+groupattrs = {
+ "dsAttrTypeStandard:RealName": "Group 01",
+ "dsAttrTypeStandard:EMailAddress": "group01 at example.com",
+ "dsAttrTypeStandard:ServicesLocator": "Bogus"
+}
+
+records = (
+ ("/Users", "testadmin", "testadmin", adminattrs, 1),
+ ("/Users", "user%02d", "user%02d", userattrs, 5),
+ ("/Users", "public%02d", "public%02d", publicattrs, 10),
+ ("/Places", "location%02d", "location%02d", locationattrs, 10),
+ ("/Resources", "resource%02d", "resource%02d", resourceattrs, 10),
+ ("/Groups", "group01", "group01", groupattrs, 1),
+)
+
+def usage():
+ print """Usage: odsteup [options] create|remove
+Options:
+ -h Print this help and exit
+ -n node OpenDirectory node to target
+ -u uid OpenDirectory Admin user id
+ -p pswd OpenDirectory Admin user password
+ -f file caldavd.plist config file used by the server
+"""
+
+def readConfig(config):
+ """
+ Read useful information from the server's caldavd.plist file.
+
+ @param config: file path to caldavd.plist
+ @type config: str
+ """
+ plist = readPlist(config)
+ hostname = plist["ServerHostName"]
+ docroot = plist["DocumentRoot"]
+ sudoers = plist["SudoersFile"]
+
+ if docroot[0] != "/":
+ docroot = base_dir + docroot
+ if sudoers[0] != "/":
+ sudoers = base_dir + sudoers
+
+ return hostname, docroot, sudoers
+
+def patchConfig(config, admin):
+ """
+ Patch the caldavd.plist file to make sure the proper admin principal is configured.
+
+ @param config: file path to caldavd.plist
+ @type config: str
+ @param admin: admin principal-URL value
+ @type admin: str
+ """
+ plist = readPlist(config)
+ admins = plist["AdminPrincipals"]
+ admins[:] = [admin]
+ writePlist(plist, config)
+
+def patchSudoers(sudoers):
+ """
+ Patch the sudoers.plist file to add the superuser we need to test proxy authentication.
+
+ @param sudoers: file path of sudoers file
+ @type sudoers: str
+ """
+ plist = readPlist(sudoers)
+ users = plist["users"]
+ for user in users:
+ if user["username"] == "superuser" and user["password"] == "superuser":
+ break
+ else:
+ users.append({"username":"superuser", "password": "superuser"})
+ writePlist(plist, sudoers)
+
+def buildServerinfo(hostname, docroot):
+
+ # Read in the serverinfo-template.xml file
+ fd = open(serverinfo_template, "r")
+ try:
+ data = fd.read()
+ finally:
+ fd.close()
+
+ data = data % {
+ "hostname" : hostname,
+ "docroot" : docroot,
+ "testadmin_guid" : guids["testadmin"],
+ "user01_guid" : guids["user01"],
+ "user02_guid" : guids["user02"],
+ "user03_guid" : guids["user03"],
+ "resource01_guid": guids["resource01"],
+ }
+
+ fd = open(serverinfo_default, "w")
+ try:
+ fd.write(data)
+ finally:
+ fd.close()
+
+def getServiceLocator(hostname):
+ cmd = "dscl -u %s -P %s %s -read /Computers/%s GeneratedUID" % (diradmin_user, diradmin_pswd, directory_node, hostname)
+ result = commands.getoutput(cmd)
+ guid = result.split()[1]
+
+ cmd = "dscl -u %s -P %s %s -read /Computers/%s dsAttrTypeNative:apple-serviceinfo" % (diradmin_user, diradmin_pswd, directory_node, hostname)
+ result = commands.getoutput(cmd)
+ plist = readPlistFromString(result[result.find("<?xml"):])
+ vhosts = plist.get("com.apple.macosxserver.virtualhosts", None)
+ for key, value in vhosts.iteritems():
+ serviceTypes = value.get("serviceType", None)
+ if serviceTypes:
+ for type in serviceTypes:
+ if type == "calendar":
+ vhostguid = key
+ break
+
+ return "%s:%s:calendar" % (guid, vhostguid,)
+
+def addLargeCalendars(docroot):
+ calendars = ("calendar.10", "calendar.100", "calendar.1000",)
+ path = os.path.join(docroot, "calendars/users/user01")
+
+ for calendar in calendars:
+ cmd = "tar -C %s -zx -f data/%s.tgz" % (path, calendar,)
+ commands.getoutput(cmd)
+
+def doToAccounts(f):
+ for record in records:
+ if record[4] > 1:
+ for ctr in range(1, record[4] + 1):
+ attrs = {}
+ for key, value in record[3].iteritems():
+ if value.find("%02d") != -1:
+ value = value % (ctr,)
+ attrs[key] = value
+ ruser = (record[1] % (ctr,), record[2] % (ctr,), attrs, 1)
+ f(record[0], ruser)
+ else:
+ f(record[0], record[1:])
+
+def createUser(path, user):
+ # Do dscl command line operations to create a calendar user
+
+ # Create the user
+ cmd = "dscl -u %s -P %s %s -create %s/%s" % (diradmin_user, diradmin_pswd, directory_node, path, user[0])
+ print cmd
+ os.system(cmd)
+
+ # Set the password (only for /Users)
+ if path == "/Users":
+ cmd = "dscl -u %s -P %s %s -passwd %s/%s %s" % (diradmin_user, diradmin_pswd, directory_node, path, user[0], user[1])
+ print cmd
+ os.system(cmd)
+
+ # Other attributes
+ for key, value in user[2].iteritems():
+ if key == "dsAttrTypeStandard:GeneratedUID":
+ value = uuid.uuid4()
+ elif key == "dsAttrTypeStandard:ServicesLocator":
+ value = service_locator
+ elif key == "dsAttrTypeStandard:ResourceInfo":
+ value = value % {"guid":guids["user01"]}
+ cmd = "dscl -u %s -P %s %s -create %s/%s \"%s\" \"%s\"" % (diradmin_user, diradmin_pswd, directory_node, path, user[0], key, value)
+ print cmd
+ os.system(cmd)
+
+ # Now read the guid for this record
+ if guids.has_key(user[0]):
+ cmd = "dscl -u %s -P %s %s -read %s/%s GeneratedUID" % (diradmin_user, diradmin_pswd, directory_node, path, user[0])
+ result = commands.getoutput(cmd)
+ guid = result.split()[1]
+ guids[user[0]] = guid
+
+def removeUser(path, user):
+ # Do dscl command line operations to create a calendar user
+
+ # Create the user
+ cmd = "dscl -u %s -P %s %s -delete %s/%s" % (diradmin_user, diradmin_pswd, directory_node, path, user[0])
+ print cmd
+ os.system(cmd)
+
+if __name__ == "__main__":
+
+ try:
+ options, args = getopt.getopt(sys.argv[1:], "n:p:u:f:")
+
+ for option, value in options:
+ if option == "-h":
+ usage()
+ sys.exit(0)
+ elif option == "-n":
+ directory_node = value
+ elif option == "-u":
+ diradmin_user = value
+ elif option == "-p":
+ diradmin_pswd = value
+ elif option == "-f":
+ config = value
+ else:
+ print "Unrecognized option: %s" % (option,)
+ usage()
+ raise ValueError
+
+ # Process arguments
+ if len(args) == 0:
+ print "No arguments given. One of 'create' or 'remove' must be present."
+ usage()
+ raise ValueError
+ elif len(args) > 1:
+ print "Too many arguments given. Only one of 'create' or 'remove' must be present."
+ usage()
+ raise ValueError
+ elif args[0] not in ("create", "remove"):
+ print "Wrong arguments given: %s" % (args[0],)
+ usage()
+ raise ValueError
+
+ if args[0] == "create":
+ # Read the caldavd.plist file and extract some information we will need.
+ hostname, docroot, sudoers = readConfig(config)
+
+ # Patch the sudoers file for the superuser principal.
+ patchSudoers(sudoers)
+
+ # Get the ServiceLocator details we need to enable calendar users.
+ service_locator = getServiceLocator(hostname)
+
+ # Now generate the OD accounts (caching guids as we go).
+ doToAccounts(createUser)
+
+ # Patch the caldavd.plist file with the testadmin user's guid-based principal-URL
+ patchConfig(config, "/principals/__uids__/%s/" % (guids["testadmin"],))
+
+ # Create an appropriate serverinfo.xml file from the template
+ buildServerinfo(hostname, docroot)
+
+ # Add large calendars to user account
+ addLargeCalendars(docroot)
+
+ elif args[0] == "remove":
+ doToAccounts(removeUser)
+
+ except Exception, e:
+ sys.exit(str(e))
Property changes on: CalDAVTester/trunk/odsetup.py
___________________________________________________________________
Name: svn:executable
+ *
Added: CalDAVTester/trunk/scripts/server/serverinfo-template-old.xml
===================================================================
--- CalDAVTester/trunk/scripts/server/serverinfo-template-old.xml (rev 0)
+++ CalDAVTester/trunk/scripts/server/serverinfo-template-old.xml 2007-08-02 16:59:48 UTC (rev 1753)
@@ -0,0 +1,262 @@
+<?xml version="1.0" standalone="no"?>
+
+<!DOCTYPE serverinfo SYSTEM "serverinfo.dtd">
+
+<!--
+ Copyright (c) 2006-2007 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.
+
+ DRI: Cyrus Daboo, cdaboo at apple.com
+ -->
+
+<serverinfo>
+ <host>%(hostname)s</host>
+ <port>8008</port>
+ <authtype>basic</authtype>
+ <substitutions>
+ <substitution>
+ <key>$host:</key>
+ <value>http://%(hostname)s:8008</value>
+ </substitution>
+
+ <!-- relative path to principal collection-->
+ <substitution>
+ <key>$principals:</key>
+ <value>/principals/users/</value>
+ </substitution>
+
+ <!-- relative path to group principal collection-->
+ <substitution>
+ <key>$groups:</key>
+ <value>/principals/groups/</value>
+ </substitution>
+
+ <!-- relative path to resource principal collection-->
+ <substitution>
+ <key>$resources:</key>
+ <value>/principals/resources/</value>
+ </substitution>
+
+ <!-- relative path to location principal collection-->
+ <substitution>
+ <key>$locations:</key>
+ <value>/principals/locations/</value>
+ </substitution>
+
+ <!-- relative path to __uids__ principal collection-->
+ <substitution>
+ <key>$uids:</key>
+ <value>/principals/locations/</value>
+ </substitution>
+
+ <!-- relative path to calendars collection-->
+ <substitution>
+ <key>$calendars:</key>
+ <value>/calendars/</value>
+ </substitution>
+
+ <!-- relative path to user calendars collection-->
+ <substitution>
+ <key>$usercalendars:</key>
+ <value>/calendars/users/</value>
+ </substitution>
+
+ <!-- inbox name-->
+ <substitution>
+ <key>$inbox:</key>
+ <value>inbox</value>
+ </substitution>
+
+ <!-- outbox name-->
+ <substitution>
+ <key>$outbox:</key>
+ <value>outbox</value>
+ </substitution>
+
+ <!-- user id for admin user -->
+ <substitution>
+ <key>$useradmin:</key>
+ <value>testadmin</value>
+ </substitution>
+ <!-- password for admin user -->
+ <substitution>
+ <key>$pswdadmin:</key>
+ <value>testadmin</value>
+ </substitution>
+
+ <!-- relative path to admin principal resource-->
+ <substitution>
+ <key>$principaladmin:</key>
+ <value>/principals/users/testadmin/</value>
+ </substitution>
+ <substitution>
+ <key>$principaluriadmin:</key>
+ <value>/principals/users/testadmin/</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>
+
+ <!-- relative path to first user principal resource-->
+ <substitution>
+ <key>$userid1:</key>
+ <value>user01</value>
+ </substitution>
+ <!-- password for first user -->
+ <substitution>
+ <key>$pswd1:</key>
+ <value>user01</value>
+ </substitution>
+ <!-- relative path to first user principal resource-->
+ <substitution>
+ <key>$principal1:</key>
+ <value>/principals/users/user01/</value>
+ </substitution>
+ <substitution>
+ <key>$principaluri1:</key>
+ <value>/principals/users/user01/</value>
+ </substitution>
+ <substitution>
+ <key>$principalnoslash:</key>
+ <value>/principals/users/user01</value>
+ </substitution>
+ <!-- relative path to first user calendar home-->
+ <substitution>
+ <key>$pathprefix:</key>
+ <value>/calendars/users/user01</value>
+ </substitution>
+ <!-- relative path to first user calendar home-->
+ <substitution>
+ <key>$calendarpath1:</key>
+ <value>/calendars/users/user01/calendar</value>
+ </substitution>
+ <!-- calendar user address of first user-->
+ <substitution>
+ <key>$cuaddr1:</key>
+ <value>mailto:user01 at example.com</value>
+ </substitution>
+ <substitution>
+ <key>$cuaddralt1:</key>
+ <value>/principals/users/user01/</value>
+ </substitution>
+ <substitution>
+ <key>$cuaddraltnoslash1:</key>
+ <value>/principals/users/user01</value>
+ </substitution>
+
+ <!-- user id for second user -->
+ <substitution>
+ <key>$userid2:</key>
+ <value>user02</value>
+ </substitution>
+ <!-- password for second user -->
+ <substitution>
+ <key>$pswd2:</key>
+ <value>user02</value>
+ </substitution>
+ <!-- relative path to second user principal resource-->
+ <substitution>
+ <key>$principal2:</key>
+ <value>/principals/users/user02/</value>
+ </substitution>
+ <substitution>
+ <key>$principaluri2:</key>
+ <value>/principals/users/user02/</value>
+ </substitution>
+ <substitution>
+ <key>$principal2noslash:</key>
+ <value>/principals/users/user02</value>
+ </substitution>
+ <!-- relative path to second user calendar home-->
+ <substitution>
+ <key>$pathprefix2:</key>
+ <value>/calendars/users/user02</value>
+ </substitution>
+ <!-- calendar user address of second user-->
+ <substitution>
+ <key>$cuaddr2:</key>
+ <value>mailto:user02 at example.com</value>
+ </substitution>
+ <substitution>
+ <key>$cuaddralt2:</key>
+ <value>/principals/users/user02/</value>
+ </substitution>
+ <substitution>
+ <key>$cuaddraltnoslash2:</key>
+ <value>/principals/users/user02</value>
+ </substitution>
+
+ <!-- user id for third user -->
+ <substitution>
+ <key>$userid3:</key>
+ <value>user03</value>
+ </substitution>
+ <!-- password for third user -->
+ <substitution>
+ <key>$pswd3:</key>
+ <value>user03</value>
+ </substitution>
+ <!-- relative path to third user principal resource-->
+ <substitution>
+ <key>$principal3:</key>
+ <value>/principals/users/user03/</value>
+ </substitution>
+ <substitution>
+ <key>$principaluri3:</key>
+ <value>/principals/users/user03/</value>
+ </substitution>
+ <!-- relative path to third user calendar home-->
+ <substitution>
+ <key>$pathprefix3:</key>
+ <value>/calendars/users/user03</value>
+ </substitution>
+ <!-- calendar user address of third user-->
+ <substitution>
+ <key>$cuaddr3:</key>
+ <value>mailto:user03 at example.com</value>
+ </substitution>
+ <substitution>
+ <key>$cuaddralt3:</key>
+ <value>/principals/users/user03/</value>
+ </substitution>
+
+ <!-- relative path to first resource calendar home-->
+ <substitution>
+ <key>$rpathprefix1:</key>
+ <value>/calendars/resources/resource01</value>
+ </substitution>
+ <!-- relative path to first resource principal resource-->
+ <substitution>
+ <key>$rprincipal1:</key>
+ <value>/principals/resources/resource01/</value>
+ </substitution>
+ <substitution>
+ <key>$rprincipaluri1:</key>
+ <value>/principals/resources/resource01/</value>
+ </substitution>
+ <substitution>
+ <key>$rcuaddralt1:</key>
+ <value>/principals/resources/resource01/</value>
+ </substitution>
+ </substitutions>
+ <serverfilepath>%(docroot)s</serverfilepath>
+</serverinfo>
Added: CalDAVTester/trunk/scripts/server/serverinfo-template.xml
===================================================================
--- CalDAVTester/trunk/scripts/server/serverinfo-template.xml (rev 0)
+++ CalDAVTester/trunk/scripts/server/serverinfo-template.xml 2007-08-02 16:59:48 UTC (rev 1753)
@@ -0,0 +1,262 @@
+<?xml version="1.0" standalone="no"?>
+
+<!DOCTYPE serverinfo SYSTEM "serverinfo.dtd">
+
+<!--
+ Copyright (c) 2006-2007 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.
+
+ DRI: Cyrus Daboo, cdaboo at apple.com
+ -->
+
+<serverinfo>
+ <host>%(hostname)s</host>
+ <port>8008</port>
+ <authtype>basic</authtype>
+ <substitutions>
+ <substitution>
+ <key>$host:</key>
+ <value>http://%(hostname)s:8008</value>
+ </substitution>
+
+ <!-- relative path to principal collection-->
+ <substitution>
+ <key>$principals:</key>
+ <value>/principals/users/</value>
+ </substitution>
+
+ <!-- relative path to group principal collection-->
+ <substitution>
+ <key>$groups:</key>
+ <value>/principals/groups/</value>
+ </substitution>
+
+ <!-- relative path to resource principal collection-->
+ <substitution>
+ <key>$resources:</key>
+ <value>/principals/resources/</value>
+ </substitution>
+
+ <!-- relative path to location principal collection-->
+ <substitution>
+ <key>$locations:</key>
+ <value>/principals/locations/</value>
+ </substitution>
+
+ <!-- relative path to __uids__ principal collection-->
+ <substitution>
+ <key>$uids:</key>
+ <value>/principals/locations/</value>
+ </substitution>
+
+ <!-- relative path to calendars collection-->
+ <substitution>
+ <key>$calendars:</key>
+ <value>/calendars/</value>
+ </substitution>
+
+ <!-- relative path to user calendars collection-->
+ <substitution>
+ <key>$usercalendars:</key>
+ <value>/calendars/users/</value>
+ </substitution>
+
+ <!-- inbox name-->
+ <substitution>
+ <key>$inbox:</key>
+ <value>inbox</value>
+ </substitution>
+
+ <!-- outbox name-->
+ <substitution>
+ <key>$outbox:</key>
+ <value>outbox</value>
+ </substitution>
+
+ <!-- user id for admin user -->
+ <substitution>
+ <key>$useradmin:</key>
+ <value>testadmin</value>
+ </substitution>
+ <!-- password for admin user -->
+ <substitution>
+ <key>$pswdadmin:</key>
+ <value>testadmin</value>
+ </substitution>
+
+ <!-- relative path to admin principal resource-->
+ <substitution>
+ <key>$principaladmin:</key>
+ <value>/principals/users/testadmin/</value>
+ </substitution>
+ <substitution>
+ <key>$principaluriadmin:</key>
+ <value>/principals/__uids__/%(testadmin_guid)s/</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>
+
+ <!-- relative path to first user principal resource-->
+ <substitution>
+ <key>$userid1:</key>
+ <value>user01</value>
+ </substitution>
+ <!-- password for first user -->
+ <substitution>
+ <key>$pswd1:</key>
+ <value>user01</value>
+ </substitution>
+ <!-- relative path to first user principal resource-->
+ <substitution>
+ <key>$principal1:</key>
+ <value>/principals/users/user01/</value>
+ </substitution>
+ <substitution>
+ <key>$principaluri1:</key>
+ <value>/principals/__uids__/%(user01_guid)s/</value>
+ </substitution>
+ <substitution>
+ <key>$principalnoslash:</key>
+ <value>/principals/users/user01</value>
+ </substitution>
+ <!-- relative path to first user calendar home-->
+ <substitution>
+ <key>$pathprefix:</key>
+ <value>/calendars/users/user01</value>
+ </substitution>
+ <!-- relative path to first user calendar home-->
+ <substitution>
+ <key>$calendarpath1:</key>
+ <value>/calendars/users/user01/calendar</value>
+ </substitution>
+ <!-- calendar user address of first user-->
+ <substitution>
+ <key>$cuaddr1:</key>
+ <value>mailto:user01 at example.com</value>
+ </substitution>
+ <substitution>
+ <key>$cuaddralt1:</key>
+ <value>/principals/__uids__/%(user01_guid)s/</value>
+ </substitution>
+ <substitution>
+ <key>$cuaddraltnoslash1:</key>
+ <value>/principals/__uids__/%(user01_guid)s</value>
+ </substitution>
+
+ <!-- user id for second user -->
+ <substitution>
+ <key>$userid2:</key>
+ <value>user02</value>
+ </substitution>
+ <!-- password for second user -->
+ <substitution>
+ <key>$pswd2:</key>
+ <value>user02</value>
+ </substitution>
+ <!-- relative path to second user principal resource-->
+ <substitution>
+ <key>$principal2:</key>
+ <value>/principals/users/user02/</value>
+ </substitution>
+ <substitution>
+ <key>$principaluri2:</key>
+ <value>/principals/__uids__/%(user02_guid)s/</value>
+ </substitution>
+ <substitution>
+ <key>$principal2noslash:</key>
+ <value>/principals/users/user02</value>
+ </substitution>
+ <!-- relative path to second user calendar home-->
+ <substitution>
+ <key>$pathprefix2:</key>
+ <value>/calendars/users/user02</value>
+ </substitution>
+ <!-- calendar user address of second user-->
+ <substitution>
+ <key>$cuaddr2:</key>
+ <value>mailto:user02 at example.com</value>
+ </substitution>
+ <substitution>
+ <key>$cuaddralt2:</key>
+ <value>/principals/__uids__/%(user02_guid)s/</value>
+ </substitution>
+ <substitution>
+ <key>$cuaddraltnoslash2:</key>
+ <value>/principals/__uids__/%(user02_guid)s</value>
+ </substitution>
+
+ <!-- user id for third user -->
+ <substitution>
+ <key>$userid3:</key>
+ <value>user03</value>
+ </substitution>
+ <!-- password for third user -->
+ <substitution>
+ <key>$pswd3:</key>
+ <value>user03</value>
+ </substitution>
+ <!-- relative path to third user principal resource-->
+ <substitution>
+ <key>$principal3:</key>
+ <value>/principals/users/user03/</value>
+ </substitution>
+ <substitution>
+ <key>$principaluri3:</key>
+ <value>/principals/__uids__/%(user03_guid)s/</value>
+ </substitution>
+ <!-- relative path to third user calendar home-->
+ <substitution>
+ <key>$pathprefix3:</key>
+ <value>/calendars/users/user03</value>
+ </substitution>
+ <!-- calendar user address of third user-->
+ <substitution>
+ <key>$cuaddr3:</key>
+ <value>mailto:user03 at example.com</value>
+ </substitution>
+ <substitution>
+ <key>$cuaddralt3:</key>
+ <value>/principals/__uids__/%(user03_guid)s/</value>
+ </substitution>
+
+ <!-- relative path to first resource calendar home-->
+ <substitution>
+ <key>$rpathprefix1:</key>
+ <value>/calendars/resources/resource01</value>
+ </substitution>
+ <!-- relative path to first resource principal resource-->
+ <substitution>
+ <key>$rprincipal1:</key>
+ <value>/principals/resources/resource01/</value>
+ </substitution>
+ <substitution>
+ <key>$rprincipaluri1:</key>
+ <value>/principals/__uids__/%(resource01_guid)s/</value>
+ </substitution>
+ <substitution>
+ <key>$rcuaddralt1:</key>
+ <value>/principals/__uids__/%(resource01_guid)s/</value>
+ </substitution>
+ </substitutions>
+ <serverfilepath>%(docroot)s</serverfilepath>
+</serverinfo>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20070802/7dcc81ef/attachment.html
More information about the calendarserver-changes
mailing list