[CalendarServer-changes] [1057]
CalendarServer/branches/users/cdaboo/od-schema-1044/support/
directorysetup.py
source_changes at macosforge.org
source_changes at macosforge.org
Thu Jan 18 08:52:48 PST 2007
Revision: 1057
http://trac.macosforge.org/projects/calendarserver/changeset/1057
Author: cdaboo at apple.com
Date: 2007-01-18 08:52:48 -0800 (Thu, 18 Jan 2007)
Log Message:
-----------
Small utility script to setup a directory server so that the new schema can be tested. First use the "init"
action to initialize the /Computers record, then use "addUser" to enable users to use the calendar server.
Added Paths:
-----------
CalendarServer/branches/users/cdaboo/od-schema-1044/support/directorysetup.py
Added: CalendarServer/branches/users/cdaboo/od-schema-1044/support/directorysetup.py
===================================================================
--- CalendarServer/branches/users/cdaboo/od-schema-1044/support/directorysetup.py (rev 0)
+++ CalendarServer/branches/users/cdaboo/od-schema-1044/support/directorysetup.py 2007-01-18 16:52:48 UTC (rev 1057)
@@ -0,0 +1,304 @@
+#!/usr/bin/env python
+#
+##
+# Copyright (c) 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
+##
+#
+# ...
+#
+
+
+import getopt
+import os
+import sys
+
+def usage():
+ print """Usage: directorysetup [options] init|addUser|disableUser|removeUser <<user>>
+Options:
+ -h Print this help and exit
+ -n node OpenDirectory node to target (/LDAPv3/127.0.0.1)
+ -u uid OpenDirectory Admin user id
+ -p pswd OpenDirectory Admin user password
+ -c cname OpenDirectory /Computers record name for the calendar server
+
+Description:
+This is a little command line utility to setup a directory server with records
+conforming to the new schema used by the calendar server. It has several "actions":
+
+"init" - this action will modify the computer record for the host calendar server to
+add the new "com.apple.macosxserver.virtualhosts" entry.
+
+"addUser" - modifies a user record to enable use of the calendar server.
+
+"disableUser" - modifies a user record to disable use of the calendar server.
+
+"removeUser" - modifies a user record to prevent use of the calendar server by
+ removing any reference to the service.
+
+"""
+
+def initComputerRecord(admin_user, admin_pswd, node, recordname):
+ plistdefault = """<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>ReplicaName</key>
+ <string>Master</string>
+ <key>com.apple.od.role</key>
+ <string>master</string>
+</dict>
+</plist>
+"""
+ plistdefault = plistdefault.replace('"', '\\"')
+ plistdefault = plistdefault.replace('\n', '')
+
+ plist_good = """<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+ <dict>
+ <key>ReplicaName</key>
+ <string>Master</string>
+
+ <key>com.apple.od.role</key>
+ <string>master</string>
+
+ <key>com.apple.macosxserver.virtualhosts</key>
+ <dict>
+ <key>4F088107-51FD-4DE5-904D-2C0AD9C6C893</key>
+ <dict>
+ <key>hostname</key>
+ <string>foo.apple.com</string>
+
+ <key>hostDetails</key>
+ <dict>
+ <key>http</key>
+ <dict>
+ <key>port</key>
+ <string>80</string>
+ </dict>
+ <key>https</key>
+ <dict>
+ <key>port</key>
+ <string>443</string>
+ </dict>
+ </dict>
+
+ <key>serviceType</key>
+ <array>
+ <string>wiki</string>
+ <string>webCalendar</string>
+ <string>webMailingList</string>
+ </array>
+
+ <key>serviceInfo</key>
+ <dict>
+ <key>webCalendar</key>
+ <dict>
+ <key>enabled</key>
+ <string>YES</string>
+ <key>urlMask</key>
+ <string>%(scheme)s://%(hostname)s:%(port)s/groups/%(groupname)s/webcalendar</string>
+ </dict>
+ <key>wiki</key>
+ <dict>
+ <key>enabled</key>
+ <string>YES</string>
+ <key>urlMask</key>
+ <string>%(scheme)s://%(hostname)s:%(port)s/groups/%(groupname)s/wiki</string>
+ </dict>
+ <key>webMailingList</key>
+ <dict>
+ <key>enabled</key>
+ <true/>
+ <key>urlMask</key>
+ <string>%(scheme)s://%(hostname)s:%(port)s/groups/%(groupname)s/mailinglist</string>
+ </dict>
+ </dict>
+ </dict>
+
+ <key>C18C34AC-3D9E-403C-8A33-BFC303F3840E</key>
+ <dict>
+ <key>hostname</key>
+ <string>calendar.apple.com</string>
+
+ <key>hostDetails</key>
+ <dict>
+ <key>http</key>
+ <dict>
+ <key>port</key>
+ <string>8008</string>
+ </dict>
+ <key>https</key>
+ <dict>
+ <key>port</key>
+ <string>8443</string>
+ </dict>
+ </dict>
+
+ <key>serviceType</key>
+ <array>
+ <string>calendar</string>
+ </array>
+
+ <key>serviceInfo</key>
+ <dict>
+ <key>calendar</key>
+ <dict>
+ <key>templates</key>
+ <dict>
+ <key>principalPath</key>
+ <string>/principals/%(type)s/%(name)s</string>
+ <key>calendarUserAddresses</key>
+ <array>
+ <string>%(scheme)s://%(hostname)s:%(port)s/principals/%(type)s/%(name)s</string>
+ <string>mailto:%(email)s</string>
+ <string>urn:uuid:%(guid)s</string>
+ </array>
+ </dict>
+ </dict>
+ </dict>
+ </dict>
+
+ </dict>
+ </dict>
+</plist>
+"""
+
+ plist_good = plist_good.replace('"', '\\"')
+ plist_good = plist_good.replace('\n', '')
+ cmd = "dscl -u %s -P %s %s -create /Computers/%s \"dsAttrTypeStandard:XMLPlist\" \"%s\"" % (admin_user, admin_pswd, node, recordname, plist_good,)
+ print cmd
+ os.system(cmd)
+
+def getComputerRecordGUID(admin_user, admin_pswd, node, computername):
+ # First get the generatedGUID for this computer
+ cmd = "dscl -u %s -P %s %s -read /Computers/%s \"dsAttrTypeStandard:GeneratedUID\"" % (admin_user, admin_pswd, node, computername,)
+ print cmd
+ result = os.popen(cmd, "r")
+ for line in result:
+ return line[len("GeneratedUID: "):-1]
+
+def addUser(admin_user, admin_pswd, node, computername, username):
+
+ uid = getComputerRecordGUID(admin_user, admin_pswd, node, computername)
+ servicetag = "%s:%s:calendar" % (uid, "C18C34AC-3D9E-403C-8A33-BFC303F3840E")
+
+ cmd = "dscl -u %s -P %s %s -create /Users/%s \"dsAttrTypeStandard:CalendarPrincipalURI\" \"%s\"" % (admin_user, admin_pswd, node, username, servicetag,)
+ print cmd
+ os.system(cmd)
+
+def disableUser(admin_user, admin_pswd, node, computername, username):
+
+ uid = getComputerRecordGUID(admin_user, admin_pswd, node, computername)
+ servicetag = "%s:%s:calendar:disabled" % (uid, "C18C34AC-3D9E-403C-8A33-BFC303F3840E")
+
+ cmd = "dscl -u %s -P %s %s -create /Users/%s \"dsAttrTypeStandard:CalendarPrincipalURI\" \"%s\"" % (admin_user, admin_pswd, node, username, servicetag,)
+ print cmd
+ os.system(cmd)
+
+def removeUser(admin_user, admin_pswd, node, computername, username):
+ cmd = "dscl -u %s -P %s %s -delete /Users/%s \"dsAttrTypeStandard:CalendarPrincipalURI\"" % (admin_user, admin_pswd, node, username,)
+ print cmd
+ os.system(cmd)
+
+if __name__ == "__main__":
+
+ try:
+ options, args = getopt.getopt(sys.argv[1:], "hc:n:p:u:")
+
+ node = "/LDAPv3/127.0.0.1"
+ admin_user = None
+ admin_pswd = None
+ computername = None
+
+ for option, value in options:
+ if option == "-h":
+ usage()
+ sys.exit(0)
+ elif option == "-n":
+ node = value
+ elif option == "-u":
+ admin_user = value
+ elif option == "-p":
+ admin_pswd = value
+ elif option == "-c":
+ computername = value
+ else:
+ print "Unrecognized option: %s" % (option,)
+ usage()
+ raise ValueError
+
+ # Some options are required
+ if not admin_user:
+ print "A user name must be specified with the -u option"
+ if not admin_pswd:
+ print "A password must be specified with the -p option"
+ if not computername:
+ print "A computer record name must be specified with the -c option"
+ if not admin_user or not admin_pswd or not computername:
+ usage()
+ raise ValueError
+
+ # Process arguments
+ if len(args) == 0:
+ print "No arguments given. One of 'init', 'addUser', 'disableUser', 'removeUser' must be present."
+ usage()
+ raise ValueError
+ elif args[0] not in ("init", "addUser", "disableUser", "removeUser"):
+ print "Wrong arguments given: %s" % (args[0],)
+ usage()
+ raise ValueError
+
+ if args[0] == "init":
+ if len(args) > 1:
+ print "Too many arguments given to 'init'"
+ usage()
+ raise ValueError
+ initComputerRecord(admin_user, admin_pswd, node, "caldav.apple.com$")
+ elif args[0] == "addUser":
+ if len(args) > 2:
+ print "Too many arguments given to 'addUser'"
+ usage()
+ raise ValueError
+ elif len(args) != 2:
+ print "'addUser' must have one argument - the user name"
+ usage()
+ raise ValueError
+ addUser(admin_user, admin_pswd, node, computername, args[1])
+ elif args[0] == "disableUser":
+ if len(args) > 2:
+ print "Too many arguments given to 'disableUser'"
+ usage()
+ raise ValueError
+ elif len(args) != 2:
+ print "'disableUser' must have one argument - the user name"
+ usage()
+ raise ValueError
+ disableUser(admin_user, admin_pswd, node, computername, args[1])
+ elif args[0] == "removeUser":
+ if len(args) > 2:
+ print "Too many arguments given to 'removeUser'"
+ usage()
+ raise ValueError
+ elif len(args) != 2:
+ print "'removeUser' must have one argument - the user name"
+ usage()
+ raise ValueError
+ removeUser(admin_user, admin_pswd, node, computername, args[1])
+
+ except Exception, e:
+ sys.exit(str(e))
Property changes on: CalendarServer/branches/users/cdaboo/od-schema-1044/support/directorysetup.py
___________________________________________________________________
Name: svn:executable
+ *
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20070118/e9e806a8/attachment.html
More information about the calendarserver-changes
mailing list