Serve Your iCal Calendars Using WebDAV
Pages: 1, 2
3. Set Up Directories.
First, you need to set up the realm of WebDAV documents. Based on what we put in the configuration file, this will be in a subdirectory of the document root called
/dav. So go to your server's document root (it's usually
/Library/WebServer/Documents) and create a new directory called
dav. I chose that name because I'll remember later what it's for.
Set the permissions and ownership of this directory so that the Web server can write to it. Do this by changing the group owner to
www, which the Web server belongs to:
sudo chgrp www /Library/WebServer/Documents/dav sudo chmod 775 /Library/WebServer/Documents/dav
Next, you need to make a place for the WebDAV lock database file. For lack of a better place, I created
/usr/share/httpd/conf. Again, set the permissions so the server can write files here:
sudo chgrp www /usr/share/httpd/conf sudo chmod 775 /usr/share/httpd/conf
4. Security Measures
Apache needs to know if the iCal trying to update the calendar is legit. So we have to create a new user and password. Don't use an existing user's name and password. A malicious hacker sniffing your communications can grab that username and use it to sneak inside your system. The username we will create will be limited to WebDAV files only, which will be useless to a would-be intruder.
First, create a password file in /Library/WebServer with this command:
htpasswd -c /Library/WebServer/.basic_pw webdav
You'll be prompted for a password. Invent something secure and save it someplace safe. Make the password unique (don't use one that you use elsewhere) because of the basic authentication risk I mentioned earlier. This password, and the user
webdav will be the two parameters you give to iCal to connect to your server.
5. Restart the Server.
You could reboot the machine, but it's more elegant just to give the
server a kick in the rear with the
kill command. Don't worry, we
aren't going really kill it. The
-HUP option tells it to restart
itself and read its configuration file again. Find the process ID
number (PID) like this:
ps -ax | grep httpd
There will be several
httpd processes running, but you only have to
interrupt the first one, which is the master for all the rest. The
sudo kill -HUP 1234
1234 is the PID of the first
6. Publish Your Calendar.
You can close the terminal window now, and return to the cozy graphical interface of iCal. Select the calendar you want to publish and then hit the menu command Calendar -> publish... The window that pops up will give you two options: publish on .Mac or on a Web server. Being a maverick, you will click on the second, which expands the window with more options.
For the URL, put in the full path to the calendar file on the server. The name of the file may not be exactly what you typed in for the calendar. If there are spaces, for example, they will be replaced with the number 32, which is the space character's position in the ASCII character set. You can see ahead of time what the name will be by exporting the database to a file and reading the filename.
For username, put in "webdav". The password you created back in step 4 goes in the next field. And that's it!
Test it out. You can subscribe to your own calendars, though you may
think you're seeing double. If you have problems, check the Web
server's error log in
/var/log/httpd/error_log. When you're done,
you'll be able to tell your friends and associates how to subscribe to
your calendars and feel the respect wash over you.
Erik T. Ray is a software wrangler and XML guru for O'Reilly Media.
Return to the Mac DevCenter.