Pour parvenir à mes fins, j'ai besoin d'un certain nombre de packages: apache2, mod_dav, php5, et du logiciel iCal sunbird par exemple.

Création d'un serveur vituel pour accueillir les agendas

On commence par creer un utilisateur "agenda", un groupe "agenda" et les répertoires suivants:

$ useradd agenda
$ mkdir /home/agenda
$ mkdir /home/agenda/public_html
$ mkdir /home/agenda/logs
$ mkdir /home/agenda/users
$ chown agenda:agenda -R /home/agenda

On créer ensuite le serveur virtuel par edition du /etc/apache2/httpd.conf:

<VirtualHost *:80>

ServerName agenda.mondomaine.tld
ServerAlias www.agenda.mondomaine.tld
DocumentRoot /home/agenda/public_html
ErrorLog /home/agenda/logs/error_log
CustomLog /home/agenda/logs/access_log common

<Directory /home/agenda/public_html>
Options Indexes IncludesNOEXEC FollowSymLinks
allow from all
AllowOverride All
</Directory>

</VirtualHost>

Installation de phpicalendar

Sur le site de phpicalendar , je telecharge l'archive contenant les scripts et je la decompresse dans /home/agenda/public_html. Je copie le fichier de configuration de la distribution en modifiant son nom:

$ cp config.inc-dist.php config.inc.php

Dans la documentation de phpicalendar, j'ai lu que les agendas peuvent être stockés dans le répertoire /home/agenda/public_html/calendars. Il faut que le serveur web, apache2, puisse écrire dans ce répertoire donc:

$ chown apache:apache /home/agenda/public_html/calendars

Petit test dans mon navigateur web favoris: http://agenda.mondomaine.tld, et je paux voir l'agenda de démontrattion de phpIcalendar.

Paramétrage du serveur WebDav

La configuration du serveur webdav se fait dans le fichier /etc/apache2/modules.d/45_mod_dav.conf.

Comportement WebDav en général

Il faut définir le fichier de verrou:

$ cd /var/lib/dav
$ touch lockdb
$ chown apache:apache lockdb

ensuite, on édite le fichier 45_mod_dav.conf:

DavLockDB "/var/lib/dav/lockdb"
DavMinTimeout 600
DavDepthInfinity On

Création de la liste des utilisateurs autorisés à accéder aux agendas

Pour un utilisateur "user1" avec son mot de passe "mdp1":

$ htpasswd -c /home/agenda/users/htpasswd-webdav user1
New password:
Re-type new password:
Adding password for user user1

pour les utilisateurs suivants, la commande est la même, sans le -c, sinon on recrée à chaque fois un nouveau fichier, et donc on efface les anciens utilisateurs.

Paramétrage de l'accès au répertoire des agendas

On termine l'édition du fichier 45_mod-dav.conf, autorisant la lecture pour tous le monde (pas de limit GET) et autorisant tout ce qui est modification si le mot de passe est correct. On en profite pour interdire une modification par quelqu'un d'autre que le serveur web, en empêchant un htaccess de modifier les autorisations.

<Directory /home/agenda/public_html/calendars>
 DAV on
 AllowOverride none
 AuthName "Modification des agendas"
 AuthType Basic
 AuthUserFile /home/agenda/users/htpasswd-webdav
 <Limit PUT POST DELETE PROPFIND PROPPATCH MKCOL COPY MOVE LOCK UNLOCK>
   Require valid-user
 </Limit>
</Directory>

Redémarrage du serveur apache

Il faut d'abord vérifier que le serveur va bien mettre en place le partage webdav et ajoutant dans /etc/conf.d/apache2

APACHE2_OPTS="-D DAV -D DAV_FS"

puis on redémarre

$ /etc/init.d/apache2 restart

Sources et inspiration: [1] [2] [3]