TP WEBCALENDAR
Présentation et installation
WebCalendar est une application de partage d'un agenda en réseau. Elle est écrite en PHP, avec accès à une base SQL.
L'objectif est de l'installer sur la machine SE3, d'utiliser l'authentification fournié par son annuaire LDAP.
Site, documentation et tutoriel : http://www.k5n.us/webcalendar.php
Comme il n'existe (pas encore) de paquets pour PHP5, nous allons procéder à une installation à partir des sources.
1ère installation standard
- Téléchargement
Sur le site sourceforge.net, version 1.0.5
Placer l'archive WebCalendar-1.0.5.tar.gz à la racine du serveur WEB /var/www
- Désarchivage
cd /var/www
décompresser
gzip -d WebCalendar-1.0.5.tar.gz
dans quel répertoire se fera le désarchivage ?
tar -tvf WebCalendar-1.0.5.tar
désarchivage : tout est placé dans le sous-rép WebCalendar-1.0.5
tar -xvf WebCalendar-1.0.5.tar
changer de nom de répertoire
mv WebCalendar-1.0.5 webcalendar
- Accès à la page d'installation
http://ubuntu/webcalendar/
Message décrivant la situation :
- base de données décelée sur la plate-forme : mysql
- actuellement, l'application ne peut pas s'y connecter
- il n'y a pas de mot de passe protégeant l'accès à la page
- il faut donner le droit d'écriture sur /var/www/webcalendar/includes (et uniquement celui-là)
- Accorder les droits
cd /var/www/webcalendar
changer les propriétaires
chown -R www-data.root *
enlever le droit d'écriture pour tous
chmod -R a-w *
l'accorder au rep. includes
chmod u+w includes
- Reprise de la page d'installation
Paramétrage de l'accès au serveur de bases de données Mysql

Cet essai échoue, bien sûr, car le script ne peut pas créer la base au nom d'un compte inconnu du serveur Mysql !
- Création d'un compte dédié à la gestion de l'application
Il est conseillé de ne pas utiliser le compte administrateur du serveur (ici root/fctice) pour gérer cette base de données.
Voici comment effectuer le paramétrage d'un compte dédié (ici : cal/ cal) avec phpmyadmin ou avec le client mysql (directement sur la console ou par session distante ssh) :
connexion au serveur avec le client mysql
mysql -u root -p --> mot de passe de root
mysql> create database webcalendar;
définir le compte cal/ cal et lui accorder tous les droits sur la base webcalendar
(si on est plus restrictif, accorder quand même le droit "create" pour pouvoir créer les tables)
mysql> GRANT ALL PRIVILEGES ON webcalendar.* TO cal@localhost
IDENTIFIED BY "cal";
mysql> quit
mysql -u cal -p
mysql> show databases;
--> visibilité uniquement de la base webcalendar !
- Initialisation de la base
cd /var/www/webcalendar
mysql -u cal -p webcalendar < tables-mysql.sql
- Première connexion
La page d'accueil http://ubuntu/webcalendar/ demande une authentification. Il s'agit de :
login : admin / mot de passe : admin

Prise en main de WebCalendar
Voir les manuels utilisateurs et administrateurs à http://ubuntu/webcalendar/docs/WebCalendar-SysAdmin.html
Créer d'autres utilisateurs, remplir les agendas, tester le croisement des agendas personnels ..
2ème installation : authentification LDAP
Il est possible de s'authentifier directement sur un annuaire LDAP (par exemple sur SambaEdu3), à partir de l'installation
Voir : http://ubuntu/webcalendar/docs/WebCalendar-SysAdmin.html#appendixD
- accès web à http://ubuntu/webcalendar-ldap
- droits
cd var/www/webcalendar-ldap/
chown -R www-data.root *
chmod -R go-rwx *
chmod -R u-w *
chmod u+w includes
- Access denied for user 'webcalendar'@'localhost' to database 'webcalendar_ldap'
- création manuelle du compte et de la base
mysql -u root -p
--> mot de passe de root
mysql> create database webcalendar_ldap;
utiliser le compte webcalendar/webcalendar pour accéder à la base webcalendar_ldap
mysql> GRANT ALL PRIVILEGES ON webcalendar_ldap.* TO webcalendar@localhost
IDENTIFIED BY "webcalendar";
mysql> quit
mysql -u webcalendar -p webcalendar_ldap < tables-mysql.sql
- Mot de passe admin : admin
- Le fichier de configuration includes/settings.php
Spécifier : user_inc: user-ldap.php
- Rejoindre l'annuaire LDAP
on précise User Authentication: LDAP
Puis plus rien ne fonctionne .. jusqu'à avoir édité le fichier includes/user-ldap.php, et l'avoir correctement renseigné
(Voir un exemple de configuration en annexe)

ANNEXE
Configuration de l'accès à l'annuaire LDAP
Cela s'effectue en renseignant correctement les clauses suivantes de includes/user-ldap.php
/------ LDAP General Server Settings ------//
//
// Name or address of the LDAP server
// For SSL/TLS use 'ldaps://localhost'
$ldap_server = '192.168.0.5';
// Port LDAP listens on (default 389)
$ldap_port = '389';
// Use TLS for the connection (not the same as ldaps://)
$ldap_start_tls = false;
// base DN to search for users
$ldap_base_dn = 'ou=People,dc=fctice,dc=local';
// The ldap attribute used to find a user (login).
// E.g., if you use cn, your login might be "Jane Smith"
// if you use uid, your login might be "jsmith"
$ldap_login_attr = 'uid';
// Account used to bind to the server and search for information.
// This user must have the correct rights to perform search.
// If left empty the search will be made in anonymous.
// *** We do NOT recommend storing the root LDAP account info here ***
$ldap_admin_dn = ''; // user DN
$ldap_admin_pwd = ''; // user password
//------ Admin Group Settings ------//
// A group name (complete DN) to find users with admin rights
$ldap_admin_group_name = 'cn=Profs,dc=fctice,dc=local';
// What type of group do we want (posixgroup, groupofnames, groupofuniquenames)
$ldap_admin_group_type = 'posixgroup';
// The LDAP attribute used to store member of a group
$ldap_admin_group_attr = 'memberuid';
//------ LDAP Search Settings ------//
// LDAP filter to find a user list.
$ldap_user_filter = '(objectclass=person)';
// Attributes to fetch from LDAP and corresponding user variables in the
// application. Do change according to your LDAP Schema
$ldap_user_attr = array(
// LDAP attribute //WebCalendar variable
'uid', //login
'sn', //lastname
'givenname', //firstname
'cn', //fullname
'mail' //email
);
Problème : réserver l'usage à certains groupes, par exemple le groupe Profs
ligne 80 login.php --> fct user_valid_login($login, $password)
modifier cette fonction comme cela a été fait pour glpi