WOW !! MUCH LOVE ! SO WORLD PEACE !
Fond bitcoin pour l'amélioration du site: 1memzGeKS7CB3ECNkzSn2qHwxU6NZoJ8o
  Dogecoin (tips/pourboires): DCLoo9Dd4qECqpMLurdgGnaoqbftj16Nvp


Home | Publier un mémoire | Une page au hasard

 > 

Les services d'annuaires LDAP: application au référencement dans les transports terrestres camerounais

( Télécharger le fichier original )
par Dany Stéphane ZIE FOMEKONG
Ecole supérieure de commerce et de gestion - Siantou - Marster en informatique approfondie 2006
  

Disponible en mode multipage

Bitcoin is a swarm of cyber hornets serving the goddess of wisdom, feeding on the fire of truth, exponentially growing ever smarter, faster, and stronger behind a wall of encrypted energy

ESIG- SIANTOU

Master 1 Master en Informatique Approfondie

http://www.dep.u-picardie.fr/ines/codes/ressources/modules.php?numform=80

Thème :

Les services d'annuaires LDAP : Application au référencement dans les transports terrestres Camerounais

Présenté par

ZIE FOMEKONG Dany Stéphane

Encadré par

M. Guy MBATCOU

Année académique 2005/2006

DEDICACES

A la femme qui m'a porté pendant plus de 9 mois en son sein et qui continue encore aujourd'hui de soutenir mes ambitions exprimées.

A l'homme qui de part sa rigueur dans le travail a su m'inculquer la vertu et la ténacité dans ma vie au quotidien.

A tous ces êtres qui me sont si chers et qui ont partagé le sein de ma mère.

REMERCIEMENTS

A l'être suprême qui a rendu possible la réalisation de ce travail

A la famille FOMEKONG à Bertoua pour le soutien inconditionnel.

A la famille TOTOUOM à Yaoundé pour tout.

A M. Guy Mbatchou pour sa disponibilité.

A mes enseignants de Master pour l'encadrement pédagogique et le suivi perpétuel pendant ces deux années d'étude.

A tous mes camarades de Master promotion 2006 : enfin le bout du tunnel

A tous mes amis et connaissances en particuliers ceux qui m'ont toujours soutenu et qui ont cultivé mon potentiel humain et professionnel.

SOMMAIRE

DEDICACES 1

REMERCIEMENTS 3

SOMMAIRE 4

LISTE DES FIGURES 7

LISTE DES TABLEAUX 8

LISTE DES SIGLES ET ABREVIATIONS 9

RESUME 10

INTRODUCTION 12

1. CONTEXTE 12

2. POSITION DU PROBLÈME 13

3. EBAUCHE DE SOLUTION AU PROBLÈME 13

4. PLAN 14

PREMIERE PARTIE : LES SERVICES D'ANNUAIRES LDAP 15

I. PRÉSENTATION DES ANNUAIRES 16

A. DÉFINITION 16

1. Gestion dynamique de l'annuaire 16

2. Flexibilité 16

3. La recherche 16

4. Gestion de la sécurité 17

B. COMPARAISON AVEC D'AUTRES SYSTÈMES 17

1. Les caractéristiques propres d'un annuaire électronique 17

2. Comparaison avec les bases de données 18

3. Comparaison avec d'autres systèmes de stockage 19

C. DOMAINES D'UTILISATION 19

1. Recherche 19

2. Gestion 19

3. Autres domaines d'utilisation 20

D. HISTORIQUE ET NORME X500 20

1. Historique, avant la norme 20

2. La norme 21

II. PRÉSENTATION DE LA NORME LDAP 22

A. HISTORIQUE 22

1. Simplification du protocole d'accès 22

2. Simplification du serveur 23

3. Première évolution: vers la version 3 23

B. DESCRIPTION DE LA NORME 24

1. Description générale 24

2. Modèle de données 25

3. Modèle de nommage 25

4. Modèle fonctionnel 26

5. Modèle de sécurité 28

6. Étendre LDAP 28

7. Meta recherche 30

III. PRÉSENTATION DE QUELQUES STANDARDS LDAP 32

A. LES FICHIERS LDIF 32

1. Introduction aux fichiers LDIF 32

2. Syntaxe 32

3. Liste des opérations 33

B. FILTRE DE RECHERCHE 34

1. Présentation générale 34

2. Les opérations élémentaires 35

3. Exemples de filtres simples 36

4. Les filtres étendus 36

C. URLS LDAP 37

1. Présentation 37

2. Syntaxe 37

3. Exemples 38

IV. CONCEPTION DES SCHÉMAS LDAP 39

A. MODÈLE DES DONNÉES 39

B. LES ATTRIBUTS 39

1. Description des attributs 39

2. Exemples 40

3. Exemples et descriptions de règles de comparaison définies dans les [rfc2252] 40

4. Exemples d'attributs définis dans la [rfc2256] 41

C. LES CLASSES 41

1. Description 41

2. Exemples 42

D. PRÉSENTATION DES OID 42

1. Présentation des OID 42

2. Exemples 43

E. SYNTAXE 43

1. Syntaxe de la définition d'un attribut 43

2. Syntaxe de la définition d'un objet 44

F. L'INTÉRÊT DE CRÉER SES PROPRES SCHÉMAS 45

V. DÉPLOIEMENT D'UNE ARCHITECTURE LDAP 46

A. PHASE DE CADRAGE 46

B. PHASE DE CONCEPTION 46

1. Choix des données et Identification des acteurs 47

2. Élaboration du schéma 48

C. SÉCURISATION 49

D. DÉVELOPPEMENT DE L'ARBRE INFORMATIONNEL 49

1. La structure de l'arbre informationnel 49

2. Le nommage des données 51

E. TOPOLOGIE DU SERVICE 51

1. Conception 51

2. Utilisation de referral 53

3. La réplication 54

F. VUE D'ENSEMBLE 55

DEUXIEME PARTIE : CONCEPTION ET REALISATION DU SYSTEME 56

CHAPITRE I : PROBLEMATIQUE 57

I ETAT DE L'ART 57

A. LE CONTEXTE DES TRANSPORTS TERRESTRES AU CAMEROUN 57

A.1 Au premier rang des facteurs de croissance économique 57

A.2 Les transports urbains 57

A.3 Les transports interurbains de personnes 57

A.4 Le transport routier de marchandises au Cameroun 58

I ETUDE CRITIQUE DE L'EXISTANT 59

CHAPITRE II : LA METHOLOGIE 60

I PRÉSENTATION DES OUTILS DE MODÉLISATION CHOISIS 60

A. UML (UNIFIED MODELING LANGUAGE) 60

1. Historique d'UML 60

2. Pourquoi une méthodologie Objet 61

3. Concepts d'UML 63

II MODÉLISATION DU SYSTÈME 66

A. PHASE DE CADRAGE 66

B. PHASE DE CONCEPTION 67

1. Cas d'utilisation 67

2. Les séquences 68

3. Les collaborations 79

C. Sécurisation 86

D. Développement de l'arbre informationnel 87

E. Topologie du service 89

CHAPITRE III : REALISATION DU SYSTEME 90

A. PRÉSENTATION DES OUTILS 90

A.1 LA PLATE FORME LINUX MANDRAKE 9.2 90

A.2 PRÉSENTATION DE LA SUITE OPENLDAP 90

1. Historique 90

2. Contenu de la suite 91

3. RFC supportées 91

4. Les RFCs non supportées 92

5. La licence 93

6. Points forts/Points faibles 93

D. LE LANGAGE PHP 94

1. Qu'est ce que PHP ? 94

2. Que peut faire PHP? 95

A.3 LE SERVEUR APACHE 97

A.4 LE DNS 97

B. IMPLÉMENTATION 98

B.1 INSTALLATION ET CONFIGURATION DES SERVEURS 98

1. Apache et BIND 98

2. Package OpenLDAP 99

B.2 RÉALISATION DE L'APPLICATION CLIENTE POUR LA GESTION ET L'ADMINISTRATION DE L'ANNUAIRE 109

1. L'IHM 109

a) La charte graphique 109

b) L'ergononie 109

2. LA PROGRAMMATION 109

III RÉSULTATS ATTENDUS ET PROBLÈMES RENCONTRÉS 111

A. TEST DES DIFFÉRENTS SERVEURS 111

B. QUELQUES ÉCRANS DE L'APPLICATION 112

B. PROBLÈMES RENCONTRÉS 114

CHAPITRE IV : CONCLUSION ET PERSPECTIVES 115

BIBLIOGRAPHIE 116

A. LES LIVRES UTILISES 116

B. WEBOGRAPHIE 116

LISTE DES FIGURES

FIGURE 1 : ARBRE PLAT 50

FIGURE 2 : ARBRE À BRANCHAGE FORT 50

FIGURE 3 : UTILISATION DU REFERRAL 53

FIGURE 4 : LA RÉPLICATION 54

FIGURE 5: CAS D'UTILISATION DU SYSTÈME 67

FIGURE 6: CAS D'UTILISATION ADMINISTRATION DE L'ANNUAIRE 68

FIGURE 7: IDENTIFICATION 69

FIGURE 8: CRÉATION D'UNE VILLE 69

FIGURE 9: CRÉATION D'UNE AGENCE 70

FIGURE 10: SUPPRESSION D'UNE VILLE 71

FIGURE 11: SUPPRIMER UNE AGENCE 72

FIGURE 12: CAS D'UTILISATION GESTION D'UNE AGENCE 72

FIGURE 13: IDENTIFICATION ADMINISTRATEUR D'AGENCE 73

FIGURE 14: CRÉATION D'UN VÉHICULE 73

FIGURE 15: MODIFIER L'ENREGISTREMENT D'UNE AGENCE 74

FIGURE 16: MODIFIER L'ENREGISTREMENT D'UN VÉHICULE 75

FIGURE 17: SUPPRIMER L'ENREGISTREMENT D'UN VÉHICULE 76

FIGURE 18: CONSULTATION DE L'ANNUAIRE 77

FIGURE 19: CONNEXION ANONYME 77

FIGURE 20: RECHERCHE D'UNE LIGNE PAR PROVINCE 78

FIGURE 21: RECHERCHE DIRECTE D'UNE LIGNE 78

FIGURE 22: COLLABORATION IDENTIFICATION 79

FIGURE 23: ÉBAUCHE DU DIAGRAMME DE CLASSE 79

FIGURE 24: ÉTAT TRANSITION IDENTIFICATION 80

FIGURE 25: COLLABORATION CRÉATION VILLE 80

FIGURE 26: ÉBAUCHE DIAGRAMME DE CLASSE 81

FIGURE 27: COLLABORATION CRÉATION AGENCE 81

FIGURE 28: ÉBAUCHE DIAGRAMME DE CLASSE 82

FIGURE 29: COLLABORATION CRÉATION VÉHICULE 82

FIGURE 30: COLLABORATION MODIFIER AGENCE 83

FIGURE 31: COLLABORATION MODIFIER VÉHICULE 83

FIGURE 32 : DIAGRAMME DE CLASSE 84

FIGURE 33: DIRECTORY INFORMATION TREE 88

FIGURE 34: ARCHITECTURE DE NOTRE SYSTÈME 89

FIGURE 35: INTERFACE DE GESTION DES VILLES 112

FIGURE 36: INTERFACE DE GESTION D'AJOUT D'UNE AGENCE 113

FIGURE 37: INTERFACE DE RECHERCHE D'UNE LIGNE DE TRANSPORT 114

LISTE DES TABLEAUX

TABLEAU 1: TABLEAU COMPARATIF LDAP/BASE DE DONNÉES 18

TABLEAU 2: STANDARDS DE LA NORME X500 21

TABLEAU 3: TERMES TECHNIQUES NORME X500 22

TABLEAU 4: RFCS DÉFINISSANT LA NORME LDAP VERSION 3 24

TABLEAU 5: DÉFINITION DE LA NORME LDAP 24

TABLEAU 6: MODÈLE FONCTIONNEL LDAP 26

TABLEAU 7: PARAMÈTRE DE LA FONCTION DE RECHERCHE LDAP 28

TABLEAU 8: LES CONTRÔLES 29

TABLEAU 9: ATTRIBUTS DU ROOT DSE 30

TABLEAU 10: LES ENTREÉS SUBSCHEMA 31

TABLEAU 11: LES OPÉRATIONS ÉLÉMENTAIRES 35

TABLEAU 12: LES OPÉRATIONS 35

TABLEAU 13: LES OPÉRATEURS BOOLÉENS 35

TABLEAU 14: PARAMÈTRES URL LDAP 37

TABLEAU 15: QUELQUES SYNTAXES DE TYPE 40

TABLEAU 16: DESCRIPTION DES RÈGLES DE COMPARAISON 41

TABLEAU 17: EXEMPLE D'ATTRIBUTS 41

TABLEAU 18: LES OBJETS STANDARD 42

TABLEAU 19: EXEMPLES D'OID 43

TABLEAU 20: EXEMPLES DE HIÉRARCHIE 43

TABLEAU 21: VUE D'ENSEMBLE DU DÉPLOIEMENT D'UNE ARCHITECTURE LDAP 55

TABLEAU 26: LES PRINCIPAUX SCÉNARIOS 68

TABLEAU 27: LE LISTING DES CLASSES 85

TABLEAU 28: LE LISTING DES ATTRIBUTS 85

TABLEAU 29: NOMMAGE DES ENTRÉES 87

TABLEAU 22: COMPOSANTES SUITE OPENLDAP 91

TABLEAU 23: LES RFCS NON OBLIGATOIRES 92

TABLEAU 24: LES RFCS NON SUPPORTÉES 93

TABLEAU 25: LES BASES DE DONNÉES SUPPORTÉES PAR PHP 96

LISTE DES SIGLES ET ABREVIATIONS

LDAP : LightWeight Directory Acces Protocol

DNS : Domain Name Service

HTTP : HyperText Transfert Protocol

OID : Object Identifier

PHP : Hypertext Preprocessor

SQL : Structured Query Language

MTS : Michigan Terminal System

ISO : International Organization for Standardization

SASL : Simple Authentification and Security Layer

SSL : Simple Security Layer

TLS : Transport Layer Security

LDIF : Lightweight Data Information File

API : Application Programming Interface

GNU :

UML : Unified Modeling Language

WWW : World Wide Web

RESUME

S'arrimer à la locomotive technologique dirigée par les puissances impérialistes est un des principaux défis de la nouvelle génération africaine.

L'essor fulgurant des nouvelles techniques de l'information et de la communication via l'Internet en particulier a rendu possible l'abstraction des limites géographiques pour l'accès à l'information.

La télématique offre aujourd'hui divers types de support de communication et d'information facilitant la mise en place de nouvelles techniques comme l'--business et le télétravail. On assiste donc à la mondialisation de l'information via des banques de données, les annuaires électroniques, le commerce électronique et les réseaux privés virtuels entre autres avec en parallèle la numérisation des domaines nécessitant jadis de multiples interventions physiques comme le commerce, les transactions financières, les opérations pharmaceutiques, les transports ...

C'est justement dans ce dernier que nous concentreront nos efforts pour essayer de construire un système informationnel et accessible de manière simple et efficace basée sur une technologie peu connue et rarement utilisée au Cameroun mais pourtant en plein essor dans l'environnement informatique occidental.

Ainsi, offrir aux transports terrestres camerounais un annuaire de référencement pour les agences et ainsi donner la possibilité à ceux qui se déplacent constamment d'obtenir l'information nette et précise sur une agence de transport ou sur une ligne de transport déterminée en fonction du lieu de départ et de la destination marquera certainement un tournant dans la gestion de nos transports privés et en commun et permettrai ainsi au Cameroun d'ajouter un échelon à la construction de son empire informatique industriel et communicationnel via les nouvelles techniques qu'offre Internet et ses services associé aux différentes techniques réseaux comme la technologie de annuaire LDAP.

ABSTRACT

To stow itself/themselves at the technological loco directed by the imperialistic powers is one of the main challenges of the new African generation.

The lightning flight of the new techniques of information and the communication via the Internet made in particular possible the geographical limit abstraction for the access to information.

The telematics offers today various types of support of communication and information facilitating the new technique setting up as the e - business and the administration from afar. One attends the internationalization of information therefore among others via banks of data, the electronic directories, the electronic trade and the virtual private networks with in parallel the digitalization of the domains requiring multiple physical interventions previously as the trade, the financial transactions, the pharmaceutical operations, the transportation...

It is exactly in this last that will concentrate us our efforts to try to construct an informational and accessible system in a based simple and efficient manner little on a technology known and used rarely in Cameroon but yet in full flight in the western computer environment.

Thus, to offer to the Cameroonian terrestrial transportation a directory of reference for the agencies and so to give the possibility to those that constantly move to get the clean and precise information on an agency of transportation or on a determined transportation line according to the place of departure and the destination will mark a turn certainly in the management of our private transportation and in common and will permit thus to Cameroon to add an echelon to the construction of his empire computer industrial and informational via the new techniques that Internet offer and its services partner to the different techniques networks as the technology of LDAP directory.

INTRODUCTION

1. Contexte

L'informatique a depuis quelques années révolutionné presque tous les domaines de la vie des télécommunications à la médecine en passant par la gestion des différentes ressources d'une entreprise ou le système éducatif, tout y passe.

Dans tout ce bouillon technologique, plusieurs techniques sont employées pour résoudre les divers problèmes rencontrés au quotidien.

De plus en plus de services numériques sont disponibles. Ils recouvrent une large panoplie de fonctionnalités : messagerie, forums, outils de travail collaboratif, accès aux ressources en lignes, e-business etc. Ils concourent tous à faciliter, moderniser et rendre plus efficient le niveau de vie ainsi qu'à accroître les prestations vers tous types de populations.

Ils doivent être accessibles en intranet ou depuis l'Internet sans que les frontières géographiques n'entravent la facilité d'utilisation, notamment pour les personnes nomades, pour le télétravail et l'administration à distance.

Mais ce devoir de facilitation des accès doit être accompagné d'un contrôle sérieux desdits accès aux services et ressources afin de respecter une politique de sécurité digne de ce nom.

Aujourd'hui les pays africains et le Cameroun en particulier doivent relever un nouveau défi : le partage des ressources et services numériques pour annuler les barrières géographiques et optimiser le disponibilité et l'accès à l'information.

A l'heure où les continents voisins ne fonctionnent plus qu'en termes de banques de données, d'annuaires de type « pages blanches » ou « pages jaunes » en ligne, a l'heure où on ne parle que de centralisation de l'information à travers des Campus numériques, des services d'authentifications centralisées pour l'entreprise, des supports d'inventaire ou des bases de configuration d'équipements réseau, la nécessité de cohérence et de vision globale du système d'information africain se fait amplement ressentir.

Une des premières étapes passe par la création d'annuaires internes qui assureront des référentiels centralisés auxquels les différents services pourront accéder, assurant ainsi une base opérationnelle solide au système d'information.

Les diverses collaborations entre entreprises et institutions, tant au niveau national qu'international, nous dictent de mener un travail de mise en cohérence de ces annuaires afin de faciliter les échanges.

La mise en place d'un annuaire pour le référencement des agences dans les transports terrestres camerounais représente notre objectif pour rendre disponible, facilement et rapidement accessible l'accès à l'information dans ledit domaine et permettre ainsi de réduire les délais et coûts d'information dans le secteur des transports terrestres camerounais.

2. Position du problème

Au Cameroun le système des transports terrestres ne possèdent pas de contrôle poussé et une rigueur organisationnelle comme dans le domaine des transports aériens. Il n'existe pas de système normalisé pour aider les clients des transports terrestres à trouver rapidement l'information recherchée et puis, le renseignement ou l'accès à l'information sur les transports et services rattachés est relativement propre à chaque agence ou compagnie. Il devient donc difficile, avec des contraintes de temps par exemple, d'interroger un maximum d'agences pour connaître la disponibilité des places ou les horaires de départ. La difficulté est encore accrue lorsque les contraintes géographiques s'en mêlent. Il faut également noter que les moyens d'informations sont assez restreints et limités voire très coûteux (déplacement sur les lieux, téléphone, recherches approximatives sur Internet...).

Il serait donc intéressant de proposer un système complet du point de vue de sa conception et très évolutif pour gérer les informations sur les acteurs dans les transports terrestres de manière dynamique et avec une administration décentralisée par agence.

3. Ebauche de solution au problème

La solution choisie est la mise en place d'un annuaire électronique pour référencer et centraliser les informations sur les agences de transport terrestres camerounais.

Un annuaire électronique LDAP est un conteneur d'informations dynamiques et organisées accessibles via un protocole normalisé, de façon contrôlée, suivant divers critères :

a - Conteneur d'informations

Un annuaire LDAP peut stocker tout type d'informations : numéros de téléphones et adresses bien sûr, mais aussi adresses de messagerie, identifiants d'accès à des applications, mots de passe, descriptions de matériels, de bâtiments, de salles, d'organisations, certificats de clés publiques, composition de groupes, photos, documents, informations administratives, etc.

En fait un annuaire LDAP est comparable à une base de données aux différences près qu'il est optimisé pour les accès en lecture, les accès en écriture étant peu performants. Il ne doit toutefois pas se substituer aux bases de données spécifiques des applications et ne doit contenir que des données communes, pour des besoins parfaitement identifiés. Il s'agit ici de la grande difficulté lors de la définition d'un annuaire LDAP : séparer les données communes des données spécifiques aux applicatifs.

b - Informations dynamiques

Les informations contenues dans un annuaire LDAP sont mises à jour aisément et fréquemment contrairement à leur équivalent traditionnel.

c - Informations organisées

Les informations gérées par un annuaire LDAP sont typées, nommées et organisées suivant un schéma arborescent.

d - Informations accessibles

Un annuaire ne serait d'aucune utilité s'il n'était pas facilement accessible. Une qualité primordiale d'un annuaire électronique est sa méthode (ou protocole) d'accès : est-elle normalisée ? Combien d'applications sont capables d'y accéder ? Il s'agit ici d'une des grandes forces des annuaires LDAP qui sont normalisés et reconnus par la plupart des applications professionnelles.

e - Accès contrôlé

De par la nature très diverse des informations qu'il peut contenir, un annuaire électronique ne peut pas être accessible de façon indifférenciée à n'importe qui (ou quoi). Il doit permettre de contrôler précisément qui accède à quoi et comment il y accède.

4. Plan

L'introduction restitue le contexte du travail, dégage le problème à résoudre en spécifiant les objectifs à atteindre et la méthode utilisée pour les atteindre.

La première partie présente et décrit le fonctionnement des services d'annuaires LDAP

La deuxième partie concerne la conception et la réalisation du système.

Le chapitre I développe la problématique et l'état de l'art. D'une part nous présenterons les contours du problème, et le contexte des transports terrestres camerounais.

Au chapitre II, nous ferons un état de la méthodologie en étudiant les outils de modélisation et de réalisation et en présentant les différentes étapes de la modélisation du système proprement dit.

Le chapitre III concerne la réalisation de notre système. C'est ici que nous détaillerons les spécifications de configuration et d'implémentations ainsi que les résultats de la précédente modélisation.

Enfin, la section conclusion et perspectives d'évolution de notre système fera l'objet du chapitre IV. Ceci nous permettra de réaliser une première évaluation du système réalisé et ainsi de relever les insuffisances et les améliorations probables.

PREMIERE PARTIE : LES SERVICES D'ANNUAIRES LDAP 

I. Présentation des annuaires

Cette section donnera une définition des annuaires électronique et leurs domaines d'utilisation avec un historique. La norme X500 sera également présentée.

A. Définition

Selon la définition du Petit Robert, un annuaire est un [Recueil publié annuellement et qui contient des renseignements variables d'une année à l'autre]. Nous pouvons définir un annuaire électronique comme une base de données optimisée pour les opérations de lecture, et supportant des opérations de recherche et de navigation avancées.

Néanmoins l'essentiel de la documentation technique sur les annuaires électroniques s'appuie implicitement d'avantage sur la définition d'un annuaire donnée par la norme X500, ou par la norme LDAP, que sur la définition que nous venons de donner.

L'utilisation des annuaires présente un certains nombres d'avantages que nous allons citer dans les sections suivantes. Ces avantages proviendront pour la plupart de la définition X500 des annuaires.

1. Gestion dynamique de l'annuaire

Mise à jour en temps réel. L'annuaire électronique est sans cesse mis à jour en fonction des entrées et des sorties des personnels d'une entreprise. Il est par exemple possible de lier l'annuaire électronique au logiciel de gestion des ressources humaines.
Coûts de mise à jour. Les coûts de mise à jour sont très faibles car cela se fait soit de façon automatique soit par l'utilisateur lui-même ! Ceci est à comparer avec la réimpression d'un annuaire papier.

2. Flexibilité

Un annuaire électronique peut contenir des informations sur différentes familles d'objets, pas seulement sur des personnes. Par exemple on peut trouver dans un annuaire : des entités constituant l'entreprise (département, filiale, etc.) ; n'importe quelle ressource de l'entreprise (bâtiment, matériel informatique, etc.) ; tout type d'information qui doit être partagée, et peu modifiée.
Un annuaire électronique n'est jamais figé. La structure de l'information contenue dans l'annuaire peut ainsi être modifiée facilement, à la volée, sans nécessiter de reconstruire l'annuaire : il est possible d'ajouter des nouveaux champs (de nouveaux attributs en terminologie annuaire) en fonction des besoins ; il est également possible d'ajouter des nouvelles familles d'objets.

3. La recherche

Plusieurs types de recherches sont possibles. Il y a la recherche exacte sur le nom d'une personne par exemple. Il est également possible de faire une recherche phonétique sur une syllabe, ou bien encore, une recherche sur une chaîne de caractère : par exemple la recherche sur la chaîne du renverra Dupont, Durand, mais aussi Perdu...

4. Gestion de la sécurité

La diffusion de l'information contenue dans un annuaire est facilement contrôlable. Tout d'abord les utilisateurs doivent s'authentifier avant d'accéder à l'information. Ceci est un avantage certain qui différencie les annuaires électroniques sur leurs équivalents papier.

Mais un annuaire électronique permet un contrôle bien plus fin que la seule authentification. Ils permettent une centralisation et un contrôle total de l'accès à l'information.

L'annuaire électronique pourra, par exemple, contrôler finement l'information délivrée en fonction du profil de l'utilisateur authentifié. Il sera ainsi possible de n'afficher que certains attributs, ou biens de rendre accessible uniquement certaines branches/certains objets de l'annuaire. Cela permet une granularité forte dans la gestion de l'accès à l'information, à comparer avec le principe traditionnel de liste rouge, qui ne peut gérer que deux groupes, les autorisés et les interdits.

En plus du profil utilisateur, et de l'information cible, il sera aussi possible de considérer les types de connexion (crypté ou pas) et d'authentification utilisés, ou bien d'où a lieu la consultation (réseau interne ou externe).

B. Comparaison avec d'autres systèmes

1. Les caractéristiques propres d'un annuaire électronique

Nous avons défini un annuaire comme étant « «une base de données optimisée pour les opérations de lecture, et supportant des opérations de recherche et de navigation avancées» ». Un annuaire électronique possède cependant d'autres caractéristiques essentielles que nous allons citer.

Un annuaire électronique peut ainsi être caractérisé par le fait que l'information y est stockée de manière structurée et hiérarchisée. Il existe une hiérarchie aussi bien dans l'information stockée, que dans la modélisation des données. On trouve dans cette modélisation beaucoup des concepts de la programmation orientée objet, comme des notions de classes, d'objets, d'attributs, et d'héritage.
L'autre caractéristique des annuaires électroniques est l'existence d'un protocole de communication réseau. Les annuaires électroniques sont conçus pour pouvoir communiquer entre eux, et communiquer avec des clients.

Les annuaires électroniques sont aussi prévus pour être distribués et répliqués à grande échelle. Ceci explique la nécessité de ces protocoles de communication.
En revanche la spécification d'une manière de stockage n'intervient pas dans la définition d'un annuaire. Seul compte la modélisation des données et leur transport sur le réseau.

2. Comparaison avec les bases de données

Il est important de souligner les différences entre base de données relationnelles et annuaires. Un annuaire électronique n'a pas pour vocation de stocker uniquement des informations sur des personnes. Il peut être utilisé comme base dans de nombreux types d'applications. C'est donc en connaissant ces différences, qu'il sera possible de choisir le bon type de stockage pour chaque type d'application.

La première différence est qu'un annuaire électronique est conçu pour être consulté, bien plus que mis à jour. Le rapport lecture sur écriture est donc plus élevé dans les annuaires électroniques que dans les bases de données relationnelles.
L'autre différence est la grande facilité d'extension des annuaires. L'ajout d'attributs, l'équivalent des champs dans les bases de données relationnelles, est très aisé à réaliser. Il ne nécessite pas, par exemple, de reconstruction de la base. Un autre élément de flexibilité des annuaires par rapport aux bases de données, est l'héritage multiple. Une entrée d'un annuaire peut être deux objets différents, alors qu'un objet dans une base de données n'appartient qu'à une seule table.

La contrepartie de cette facilité est l'absence de transactions et de procédures stockées. Il faudra donc faire attention lors de l'exécution d'opérations complexes, et gérer du côté applicatif les erreurs. Comme autre type de restriction, il n'existe pas dans les annuaires de notions de cohérence. Ainsi la notion de clé étrangère n'existe pas. S'il est possible de modéliser un attribut en lui imposant d'être un lien vers une entrée de l'annuaire, il est impossible de contrôler si le noeud pointé appartient à une branche précise ou s'il appartient à une certaine classe d'objet (1).

Une différence plus mineure concerne le type de recherches que l'on peut effectuer sur des bases de données et des annuaires. Si les annuaires permettent dans un certain sens d'effectuer des recherches assez évoluées (recherches approximatives ou phonétiques), ils ne possèdent pas l'équivalent de l'instruction SQL joint pour fusionner des informations de plusieurs sources.

Mais les bases de données n'offrent pas les facilités de déploiement et de réplication que l'on a avec les annuaires. Il n'existe pas non plus de protocole universel permettant à un client quelconque de contacter un serveur quelconque, comme c'est le cas pour la norme LDAP ou la norme X500 avant elle. Chaque base de données relationnelle a son propre protocole réseau, qu'elle ne partage pas avec les autres bases.

On peut résumer cette comparaison par le tableau suivant :

Tableau 1: tableau comparatif ldap/base de données

3. Comparaison avec d'autres systèmes de stockage

a. Système de fichiers

Un système de fichiers est aussi un système d'informations hiérarchisées, les répertoires formant une hiérarchie, espace de nommage homogène. Néanmoins les systèmes de fichiers ne permettent pas une gestion fine des droits. De plus ils peuvent contenir des informations très volumineuses, alors qu'un annuaire ne contient majoritairement que des informations peu importantes en taille, de l'ordre du mot, cette information n'est pas du tout structurée. Ainsi l'analogie entre un système de fichiers et un annuaire bute sur l'absence de modélisation de l'information en classe et en attribut.

b. Serveur Web

Les serveurs web sont optimisés eux aussi pour un rapport lecture sur écriture élevé, à l'instar des annuaires électroniques. De plus un serveur web est accédé depuis le réseau, via un protocole universel, partagé entre client et serveur. Néanmoins l'information d'un serveur web n'est elle non plus pas assez structurée pour pouvoir comparer ces serveurs à des serveurs annuaires.

c. Serveur DNS

Les serveurs DNS sont très similaires aux annuaires électroniques. Il s'agit en effet d'un système d'information hiérarchisé et répliquée, possédant des fonctionnalités de recherche avancée. La différence fondamentale avec les annuaires concerne l'information stockée qui est très figée, puisque normalisée dans des RFCs. Contrairement aux annuaires il n'est pas possible de faire évoluer l'information contenue dans un serveur DNS.

C. Domaines d'utilisation

1. Recherche

Les annuaires peuvent être utilisés dans toute application informatique nécessitant une information hiérarchisée et répliquée, et des fonctionnalités de recherche. Néanmoins le type d'information stockée doit être limité. Pour l'essentiel il doit s'agir de chaînes de caractères. Et si l'on doit stocker des attributs binaires, il est préférable que leur taille soit du même ordre de grandeur, pour éviter des problèmes de performance.

2. Gestion

Un annuaire peut contenir tout type d'objets qu'une organisation est amener à gérer: les personnes internes (ses salariés ou ses membres, etc.), les personnes externes (les contacts, les fournisseurs, etc.), son parc informatique (les postes clients, les serveurs, les imprimantes, etc.), ses entités géographiques ou administratives, etc. Un annuaire électronique permet de centraliser toutes ces informations dans une même base, et d'unifier leur gestion. Il permet aussi de créer des liens entre ces informations (tel membre appartient à telle structure administrative et travaille dans tel bâtiment).

3. Autres domaines d'utilisation

a. Applications légères de base de données

En fait, un annuaire peut aussi servir comme une base de données allégée pour de petites applications. En effet les annuaires électroniques offrent beaucoup plus de souplesse que les traditionnelles bases de données relationnelles. Certaines applications ne nécessitent pas toutes la rigidité de ces bases de données.

b. Application de clé publique

Les applications PKI nécessitent de distribuer des clés, de les garder à jour, de les révoquer. Avec un annuaire, à la structure hiérarchisée, ces tâches sont grandement facilitées.

D. Historique et Norme X500

1. Historique, avant la norme

Les premiers annuaires électroniques sont apparus avec les premiers ordinateurs. Ils avaient des tâches ciblées : authentification, contrôle des accès, information de type contacts.

Néanmoins il n'existait aucune unification, ni standard. Chaque système possédait sa propre méthode pour gérer ses utilisateurs. Unix possédait déjà son fameux /etc/passwd. Les mainframes avaient Michigan Terminal System (MTS) (2).

À partir du milieu des années 70, l'utilisation des réseaux commence à se généraliser. Les systèmes deviennent distribués et les besoins sont ceux d'une authentification sur une base distante et commune. De plus, la multiplication des LAN fait apparaître de nouveaux types de services, que l'on apparente à des annuaires: Les serveurs DNS et le protocole Whois.

On assiste à partir de la fin des années 80 et dans les années 90 à une multiplication des annuaires spécifiques. Il y a tout d'abord les annuaires inclus dans des logiciels ou des suites logiciels (mail et groupware): Lotus Notes, Novell Groupwise Directory, Microsoft Exchange Directory, Sendmail UNIX et son /etc/aliases. Il y a aussi les Annuaires Internet comme Yahoo, ou Bigfoot.
C'est aussi à la fin des années 90 qu'apparaissent des Network operating system. Il s'agit d'applications fournissant des services à des clients et des serveurs à travers un réseau. Ces services permettent le partage de ressources comme des fichiers ou des imprimantes. Ils incluent évidemment des annuaires électroniques (Novell NDS, MS Active Directory).

2. La norme

a. Apparition de la norme

Suite à l'apparition dans les années 80 d'annuaires généraux et multi-usage, non limités à une application, ni à un système spécifique, la nécessité de standardiser les annuaires électroniques s'est faite sentir. Deux organismes se sont mis à travailler en parallèle sur ce projet de standardisation : Le CCITT (International Telegraph and Telephone Consultative Committee) devenu ITU (International Telecommunications Unions) depuis; et l'ISO (International Organization for Standardization). Les deux projets ont finalement fusionné pour donner naissance à la norme annuaire X500. La première version de la norme en 1988. La deuxième version de 1993.

b. Description

L'objectif de la norme était de pouvoir être utilisée par tout type d'applications. Elle devait être un standard ouvert indépendant de tout système et de tout fabriquant.
Techniquement, elle devait fournir de nombreuses possibilités de recherches. Les annuaires devaient pouvoir être distribués à très grande échelle. L'un des buts du CCITT consistait en la création d'un service de pages blanches à l'échelle mondiale. La norme X500 devait donc être capable de faire dialoguer et cohabiter tous les annuaires pour constituer des services pages blanches et pages jaunes mondiaux.

La norme X500 est constituée de plusieurs standards:

X500

Vue d'ensemble des concepts, des modèles et des services

X501

Modèles associés aux annuaires X500

X509

Procédures d'identification et d'authentification

X511

Définition des services (recherche, création, suppression)

X518

Description du fonctionnement distribué

X519

Protocoles de communication entre serveurs, et entre serveurs et clients clients/serveurs

X520

Attributs des annuaires X500 prédéfinis

X521

Classes d'objets des annuaires X500 prédéfinies

X525

Description de la réplication sur les serveurs

Tableau 2: standards de la norme X500

Les standards X520 et X519 définissent un langage commun minimum pour l'échange d'informations. Ils seront repris pour partie dans la norme LDAP.

La norme X500 a introduit un certain nombre de termes techniques:

Directory User Agent (DUA)

Poste ou logiciel client accédant à un annuaire

Directory Access Protocol (DAP)

Protocole de communication entre un client et un serveur annuaire

Directory System Agent (DSA)

Un serveur annuaire. Ce terme est encore utilisé dans la norme LDAP

Directory System Protocol (DSP)

Protocole de communication entre deux serveurs. Proche du DAP.

Directory Information Shadowing Protocol

Protocole pour la réplication entre DSA maître et DSA miroir

Tableau 3: termes techniques norme X500

c. La réalité de la norme X500

La mise en place de la norme X500 apparaît comme un modèle de réussite dans la création d'un standard réalisé par des acteurs divers. En effet le critère d'indépendance vis à vis des éditeurs et le critère d'interopérabilité ont été respectés.
Mais rapidement, cette norme a été jugée trop riche et trop complexe à mettre en oeuvre. Des problèmes de performance sont constatés à cause de la modélisation OSI des protocoles réseau. Il apparaît que la norme a été décidée et imposée sans tenir compte de la réalité et des besoins du terrain : le déploiement des annuaires X500 a été réalisé selon une démarche inverse au déploiement réussi d'Internet. Aussi, seuls les grands organismes publics ont déployé de tels annuaires.

La norme LDAP s'est nourrie de tous ces constats afin de ne pas connaître le sort de la norme X500.

II. Présentation de la norme LDAP

Cette section présentera la norme LDAP, en abordant tout d'abord son historique, puis en décrivant la norme elle même et les usage qui en sont faits.

A. Historique

1. Simplification du protocole d'accès

La difficulté rencontrée lors de l'implémentation du protocole DAP provient de sa modélisation basée sur la pile OSI. Pour éviter d'avoir à écrire toutes les couches OSI, d'autres protocoles ont été définis pour accéder aux annuaires X500 en s'appuyant sur TCP/IP. Il y a eu ainsi deux nouveaux protocoles de définis au début des années 90 : Directory Assistance Service (DAS) et Directory Interface to X.500 Implemented Efficiently (DIXIE). Ces deux protocoles ont malheureusement été conçus pour s'interfacer à une implémentation donnée d'un serveur X500.

C'est pour cela qu'un groupe de lIETF, le groupe Open Systems Interconnection-Directory Services (OSI-DS) s'est réuni pour concevoir une simplification du protocole DAP. Après deux premières RFC de 1993, le résultat final de ces travaux a été les RFC [rfc1777], [rfc1778] et [rfc1779] publiées en mars 1995 et définissant la version 2 du protocole DAP Allégé (Lightweight), LDAP.
À cette étape, le protocole LDAP est une simplification avancée de DAP, fournissant quasiment les mêmes fonctionnalités, mais représentant d'avantages d'informations sous la forme de chaînes de caractères et utilisant un sous ensemble de l'encodage de DAP. Et bien sûr LDAP utilise TCP comme couche réseau.

2. Simplification du serveur

Le protocole LDAP n'étant qu'une simplification du protocole DAP, c'est à dire de la couche réseau, les requêtes LDAP devaient être converties en DAP par des serveurs intermédiaires avant d'être transmises à des serveur X500. Début 1995, 99% des serveurs X500 sont accédés par LDAP. Mais les implémentations des serveurs continuent à être complexes.

Après avoir écrit la première implémentation du protocole LDAP l'Université du Michigan écrit un serveur natif LDAP, pour pouvoir se débarrasser des serveurs intermédiaires passerelles entre les requêtes DAP LDAP. Dès le départ ce serveur est fourni avec ses sources et un kit de développement, ce qui a favorisé la propagation de la norme.

Début 1996 Netscape prend la tête d'une coalition pour promouvoir l'usage de LDAP.

3. Première évolution: vers la version 3

Après la version 2 de la norme, il était nécessaire d'y apporter quelques modifications pour répondre à quelques difficultés rencontrées. L'évolution de la norme vers la version 3 a intégré :

L'utilisation de l'encodage UTF-8 pour pouvoir manipuler des chaînes de n'importe quelle langue.

Les referrals ont été normalisés. Ils n'étaient pas présents dans la version 2 de LDAP.

L'opération de connexion à un annuaire a été modifiée pour accepter le protocole Simple Authentication and Security Layer (SASL), et Transport Layer Security (TLS).

La norme inclut maintenant des mécanismes d'extension. Il est possible de réaliser des opérations supplémentaires à celles décrites dans la norme, tout en s'appuyant sur le protocole existant. Il est aussi possible, par le biais de contrôle, de modifier le comportement des opérations de base.

Un annuaire peut être interrogé pour accéder à son schéma, et pour connaître les extensions et les contrôles qu'il implémente.

Intégration dans la norme LDAP du schéma X500. Certaines classes d'objets et attributs définis dans la norme X500 doivent être reconnus par les serveurs LDAP.

La norme LDAP version 3 est définie dans la [rfc3377] qui est en réalité une méta RFC. En effet cette RFC définit la norme LDAP version 3 comme une liste de RFC.

Cette liste de RFCs est la suivante :

[rfc2251]

Définition du protocole réseau LDAP, du modèle LDAP et des différentes opérations.

[rfc2252]

Définition de la syntaxe des attributs.

[rfc2253]

Syntaxe des DN et leur représentation en UTF-8.

[rfc2254]

Définition des filtres de recherche.

[rfc2255]

Définition des urls.

[rfc2256]

Éléments des schémas de base LDAP.

[rfc2829]

Méthodes d'authentification.

[rfc2830]

Description d'une opération Start TLS, qui permet à un client et à un serveur d'établir une connexion sécurisée.

Tableau 4: RFCs définissant la norme LDAP version 3

La version 3 de la norme est entièrement compatible avec la version 2. Les clients se basant encore sur la version 2 peuvent se connecter sur des serveurs implémentant la version 3. Dans le cas du serveur d'Openldap à partir de la version 2.1 cela nécessite un paramétrage particulier.

B. Description de la norme

1. Description générale

a. Contenu de la norme

Comme on vient de le voir, la norme LDAP est définie par un ensemble de RFCs. Nous allons maintenant aborder ce que définissent ces RFCs :

Le protocole réseau LDAP

Il s'agit du protocole réseau, s'appuyant sur TCP/IP permettant d'accéder à l'information contenue dans l'annuaire. C'est de lui qu'est né la norme LDAP.

Le modèle d'information

Il définit la forme et le type d'informations stockées dans l'annuaire.

Le modèle de nommage

Il définit l'organisation, le référencement et l'accessibilité de l'information dans l'annuaire.

Le modèle fonctionnel

Il définit l'ensemble des opérations permettant d'accéder à l'information dans l'annuaire, que ce soit en lecture ou en écriture.

Le modèle de sécurité

Il définit les mécanismes d'authentification auprès de l'annuaire.

Un modèle de répartition

Il définit comment un annuaire peut être réparti entre plusieurs serveurs.

Des méthodes d'extensions

La norme définit des méthodes pour pouvoir d'une part ajouter de nouvelles opérations à celles définies dans le modèle fonctionnel, et d'autre part pour modifier le comportement des fonctions du modèle.

Tableau 5: définition de la norme LDAP

Bien que cela ne soit pas inclus stricto sensu dans la norme définie par la [rfc3377], il est d'usage de considérer que le format de fichier LDIF défini dans la [rfc2849] fait partie de la norme, ainsi que des API de programmation en C.

b. Le protocole LDAP

Le protocole LDAP est défini dans la [rfc3377], qui est une mise à jour de la [rfc1777]. Ce protocole réseau basé sur TCP/IP décrit de façon classique les interactions entre un client et un serveur. Le protocole permet d'effectuer indifféremment des opérations synchrones ou asynchrones. Les serveurs peuvent répondent à un client par un referral, c'est à dire par un pointeur vers un autre serveur que le client devra contacter de lui même.

Le protocole définit un ensemble de commandes de base standards, correspondant en fait aux opérations définies par le modèle fonctionnel. Il existe néanmoins la possibilité d'effectuer des opérations étendues, pourvu que client et serveur savent tous deux les gérer.

Bien que la plupart des données transmises soient encodées sous la forme de chaînes, la syntaxe BER est utilisée, si bien que les données envoyées ne sont jamais de l'ASCII. L'avantage de cette syntaxe est bien sûr son indépendance vis à vis du système d'exploitation et de la machine. L'inconvénient est qu'il n'est pas possible de tester un serveur ou un client LDAP avec l'illustre commande telnet.

2. Modèle de données

Les informations de l'annuaire sont appelées des entrées. Chaque entrée est constituée d'un ensemble d'attributs, chaque attribut d'une entrée ayant une ou plusieurs valeurs. Les attributs ont une syntaxe. Les attributs peuvent aussi avoir des options. Par exemple une entrée de l'annuaire pourrait modéliser une personne et posséder un attribut s'appelant telephone, ayant une syntaxe de numéro de téléphone. Cette entrée de l'annuaire pourrait avoir deux valeurs, chacune de ces valeurs devant respecter la syntaxe numéro de téléphone.
Plus précisément chaque entrée de l'annuaire appartient à une ou plusieurs classes d'objets. Ce sont les classes d'objets qui définissent quels attributs une entrée peut avoir. Les classes d'objet qui définissent aussi les attributs qui sont obligatoires et ceux qui ne le sont pas.

Un annuaire connaît un certains nombres d'attributs et de classes d'objet. La norme LDAP et en particulier les [rfc2256] et [rfc2252] en définissent plusieurs issus des annuaires X500. L'ensemble des classes d'objets et des attributs que connaît un annuaire, ainsi que les syntaxes et les règles de correspondance que nous verrons plus tard, constituent le schéma d'un annuaire. Un chapitre dédié présente en détail les schémas d'annuaire, et par là même le modèle des données LDAP.

3. Modèle de nommage

Les entrées d'un annuaire sont stockées dans une structure arborescente. L'arbre des entrées s'appelle l'arbre informationnel de l'annuaire (Directory Information Tree en anglais). Le sommet de l'arbre de l'arbre s'appelle le suffixe, ou bien la racine.
Chaque entrée dans l'annuaire possède un identifiant. Cet identifiant est constitué du chemin qui mène de la racine à l'entrée. Ce chemin s'appelle le Distinguish Name, que l'on peut traduire par le nom distinctif. On préférera utiliser l'abréviation DN par la suite.

Alors que le DN est l'identifiant absolu d'une entrée dans un annuaire, le RDN, pour Relative Distinguish Name, ou encore nom distinctif relatif, est son identifiant relatif. Un RDN est constitué d'un attribut de l'entrée et d'une de ses valeurs. L'attribut choisi devra donc identifier l'entrée par rapport aux autres entrées du même parent.

Bien que cela soit peu utilisé il est possible d'avoir plusieurs attributs qui servent de RDNs.

4. Modèle fonctionnel

a. Ensemble des opérations

La norme LDAP définit neuf opérations de bases, que l'on peut regrouper en trois catégories :

Authentification et contrôle

Bind

Connexion à l'annuaire

 

Unbind

Déconnexion

 

Abandon

Pour interrompre une opération en cours

Opérations d'interrogation

Search

l'opération de recherche, détaillée ci-dessous;

 

Compare

L'opération de comparaison

Opération d'écriture

add

Pour ajouter une entrée dans l'annuaire

 

delete

Pour effacer une entrée

 

modify

Pour modifier le contenu d'une entrée, c'est à dire modifier les valeurs de ses attributs. Éventuellement rajouter des valeurs, en effacer ou supprimer, quelques valeurs ou toutes

 

modifyDN

L'opération précédente ne permet pas de modifier l'identifiant d'une entrée. Il n'est pas possible à l'opération modify de modifier la valeur d'un attribut qui sert de RDN (3). L'opération modifyDN est dédiée à cette action

Tableau 6: modèle fonctionnel LDAP

Nous n'entrerons pas dans le détail de chacune de ces opérations. Nous nous contenterons d'en étudier une seule, l'opération de recherche.

b. La fonction recherche

L'opération de recherche est à la fois l'une des plus utilisées, et l'une des plus significatives. Connaître son fonctionnement permet de comprendre comment marche LDAP. Sa description dans la [rfc2251] est la plus longue parmi celles des neuf opérations. Elle décrite dans la section 4.5, de la page 25 à la page 31.

La liste des paramètres de cette fonction est donc la suivante :

baseObject

Entrée à partir de laquelle la recherche est effectuée.

 

scope

Profondeur de la recherche. Il y a trois types de profondeur possible :

 

 

base

La recherche ne s'effectuera que sur le baseObject. La recherche devient alors l'équivalent d'une lecture, à condition toutefois que le baseObject réponde positivement au filtre.

 

one

Tous les enfants directs du baseObject et seulement les enfants directs sont concernés par la recherche.

 

sub

Tous les descendants de baseObject, ainsi que baseObject lui même sont concernés par la recherche

derefAliases

Ce paramètre indique comment doivent être considérés les objets de type alias. Une entrée de classe alias est une copie d'une autre entrée de l'annuaire, qui apparaît aussi à plusieurs endroits de l'annuaire. Il y a trois valeurs possibles :

 

 

neverDerefAliases

La recherche ne va jamais traiter les alias qu'elle rencontrera au sens où elle n'ira pas effectuer la recherche sur les entrées originales pointées par les éventuels alias

 

derefInSearching

L'alias est résolu seulement dans les entrées sous le baseObject, mais pas dans le baseObject lui-même

 

derefFindingBaseObj

L'alias est résolu, l'entrée originale sera lue, seulement dans le baseObject

 

derefAlways

Les alias seront toujours résolus

sizeLimit

Nombre maximum d'entrées retournées par la recherche. 0 signifie aucune limite imposée par le client

 

timeLimit

Temps en secondes maximum permis pour l'exécution de la requête. 0 signifie aucune limite imposée par le client

 

typesOnly

Booléen indiquant si la recherche doit retourner les valeurs des attributs, avec leur type ou pas

 

filter

Filtre de recherche. La syntaxe des filtres est explicitée dans un autre chapitre

 

attributes

Liste des attributs à retourner pour les entrées récupérées par la recherche. Si ce paramètre contient une chaîne vide ou bien *, tous les attributs seront retournés. Certains attributs demandés peuvent ne pas être retournés si l'utilisateur n'a pas le droit d'accès dessus. Mais aucun message d'erreur ne sera renvoyé, puisqu'il aura accès aux autres attributs. Si l'attribut dont l'OID est 1.1 transmis, cela signifie que le client n'attend aucun attribut

 

Tableau 7: paramètre de la fonction de recherche LDAP

5. Modèle de sécurité

Un annuaire LDAP peut nécessiter une authentification. L'originalité des serveurs LDAP consiste en ce que l'utilisateur devra s'authentifier en se présentant comme une entrée de l'annuaire. Au lieu du traditionnel login utilisé par d'autres types d'applications, un DN devra être fourni.

L'opération bind est l'opération de connexion et d'authentification auprès d'un serveur annuaire en endossant l'identité d'une entrée. Cette opération peut être simple, auquel cas l'utilisateur doit donner un mot de passe, ou bien elle peut prendre en paramètre un jeton SASL.

6. Étendre LDAP

Dès la conception du protocole LDAP dans sa version 3, il a été prévu d'y intégrer la possibilité d'étendre la norme, soit en modifiant le comportement des opérations existantes, soit en ajoutant des nouvelles opérations. Nous allons dans cette section décrire ces deux possibilités.

a. Les contrôles

Les contrôles sont un mécanisme qui permet de modifier le comportement des opérations standard. Ils sont envoyés par le client au serveur, en même temps qu'une requête classique. Ils sont décrits dans le paragraphe 4.1.12 de la [rfc2251].

Dans une requête, un contrôle est caractérisé par :

Type

Il s'agit d'un identifiant du contrôle, sous la forme d'un OID

Criticité

Un booléen qui indique si le contrôle est critique ou pas. Si le contrôle est signalé comme étant critique par le client, le serveur doit absolument exécuter la requête avec le contrôle associé. S'il ne le peut pas, par exemple parce qu'il n'implémente pas le contrôle ou parce que le contrôle est inapproprié avec la requête demandée, il doit retourner l'erreur unsupportedCriticalExtension et ne pas exécuter la requête

Valeur

Ce champs est utilisé pour transmettre des valeurs supplémentaires ; son contenu dépend donc du contrôle

Tableau 8: les contrôles

Les contrôles peuvent être aussi retournés par un serveur dans une réponse à un client. Ainsi des interactions sont possibles entre le client et le serveur. Un exemple d'une telle interaction est le contrôle de recherche paginée, défini dans la [rfc2696] et supporté par Openldap à partir de version 2.2.
Ce contrôle permet à un client d'effectuer une recherche, et de récupérer le résultat de sa recherche par blocs, au lieu de recevoir toutes les entrées en une seule fois. Lorsqu'il reçoit une telle requête, le serveur inclus dans sa réponse le même contrôle, en y incluant un identifiant dans le champs valeur. Cet identifiant sera ensuite renvoyé par le client à son tour, afin de demander le bloc suivant.

D'autres contrôles ne nécessitent pas une telle interaction. C'est le cas du contrôle matchedValuesOnly, dont l'OID est 1.2.826.0.1.3344810.2.2, et qui est encore à l'état de draft auprès de l'IETF. Ce contrôle, qui doit être associé à une recherche, demande à un serveur de ne retourner, parmi toutes les valeurs des attributs d'une entrée, que celles qui ont répondu positivement au filtre de la recherche. Ce contrôle est supporté par Openldap.

b. Les opérations étendues

La section 4.12 de la [rfc2251] décrit les opérations étendues. Les opérations étendues sont des opérations dont la syntaxe et la sémantique pourra être définies dans des documents futurs. Il est ainsi possible aux clients et aux serveurs LDAP d'effectuer des opérations supplémentaires aux neuf opérations vues précédemment. Il faut évidemment que le serveur implémente l'opération étendue demandée par le client.

Une opération étendue, et la réponse d'un serveur à une telle opération, sont décrites très succinctement par la RFC. Elles sont composées très simplement d'un identifiant, un OID donc, de la requête ou de la réponse, et d'un champs supplémentaire contenant des données, dont la signification dépend du contexte.
Que ce soit pour les contrôles ou pour les opérations étendues, il est préférable pour le client de connaître à l'avance quelles extensions supporte le serveur. La section suivante décrit comment le client peut obtenir ces informations du serveur, en se basant toujours sur le protocole LDAP.

7. Meta recherche

La [rfc2251] dans sa section 3.4 a prévu un mécanisme permettant de découvrir les extensions, les contrôles et le schéma d'un serveur annuaire. Cela permet au client d'interagir au mieux avec un serveur, en évitant, par exemple, de créer ou de modifier des objets de façon illégale vis à vis du schéma, ou bien de ne demander que les contrôles et les opérations étendues implémentées par le serveur.

a. Le Root DSE

Pour obtenir des informations sur les capacités d'un annuaire il faut interroger une entrée spéciale qui s'appelle le Root DSE. Cette entrée n'a aucun DN, et doit être récupérée avec le filtre (objectclass=*). Elle ne doit pas être retournée autrement que par une requête avec ce filtre et dont le base_dn est vide. Elle peut être soumise à des restrictions de contrôle d'accès. La [rfc2251] précise que le serveur pourrait autoriser la modification des attributs de cette entrée, mais Openldap lui ne le permet pas.

Voici la liste des attributs d'un Root DSE définis par [rfc2251] :

namingContexts

Liste des suffixes gérés par le serveur

subschemaSubentry

DN de l'entrée subschema. Cette entrée contient une description du schéma gérée par le serveur. Cet attribut peut être absent si le serveur ne gère pas lui même des entrées schéma. Il est multiple, dans le cas où le serveur gère plusieurs annuaires, chacun ayant son propre schéma

altServer

Serveur à contacter si le serveur ne répond plus

supportedExtension

Liste des opérations étendues supportées

supportedControl

Liste des contrôles supportés

supportedSASLMechanisms

Liste des fonctionnalités SASL supportées

supportedLDAPVersion

Version du protocole LDAP supportée par le serveur

Tableau 9: attributs du Root DSE

b. Les entrées subschema

Nous venons de voir comment récupérer un certain nombre d'information sur un annuaire, et en particulier comment récupérer le DN des entrées subschema. Comme le Root DSE, les entrées subschema sont des entrées particulières d'un serveur, qui ne sont pas placées sous la racine de l'annuaire. Ces entrées décrivent le schéma supporté par le serveur, c'est à dire la liste des objets, des attributs, des règles de comparaison, etc. qu'il connaît. Il est possible, d'après la [rfc2251] de modifier ses entrées, mais ce n'est pas obligatoire pour respecter la version 3 de la norme LDAP.

La section 3.2.2 de cette RFC définit la liste des attributs d'une entrée subschema. Certains attributs sont obligatoires, d'autres pas. Cette liste est la suivante:

cn

Cet attribut doit être le RDN de l'entrée subschema. Cet attribut est obligatoire dans une entrée subschema

objectClass

Il s'agit des classes de l'entrée subschema. Il doit au moins contenir les valeurs top et subschema. Cet attribut est obligatoire dans une entrée subschema

objectClasses

Cet attribut multivalué contient les classes gérées par le serveur. Il a autant de valeurs que de classes gérées. Cet attribut est obligatoire dans une entrée subschema

attributeTypes

Cet attribut multivalué contient les attributs gérés par le serveur. Il a autant de valeurs que d'attributs gérés. Cet attribut est obligatoire dans une entrée

matchingRules

Liste des règles de comparaison gérées par le serveur. Cet attribut a autant de valeur que de règles, et n'est pas obligatoire

matchingRuleUse

Usage des règles de comparaison. Il y a autant de valeurs de cet attribut que de règles de comparaison. Et pour chaque règle, une valeur contient la liste des attributs sur lesquels elle s'applique. Cet attribut n'est pas obligatoire

ldapSyntaxes

Liste des syntaxes supportées par le serveur. Cet attribut n'est pas obligatoire

Tableau 10: les entreés subschema

Les attributs dITStructureRules, dITContentRules, nameForms existent aussi, et sont optionnels. Ils ne sont pas supportés par Openldap. Ils décrivent des règles sur l'arbre informationnel.

III. Présentation de quelques standards LDAP

Dans la section précédente, nous avons vu que la norme LDAP est une agglomération de différentes RFCs, de différents standards. Dans ce chapitre quelques uns de ces standards vont être présentés.

A. Les fichiers LDIF

1. Introduction aux fichiers LDIF

LDIF est un format de fichier, spécifié dans la [rfc2849]. Les fichiers de type LDIF sont utilisés d'une part pour décrire des objets d'un annuaire LDAP, et d'autre part pour décrire un ensemble d'opérations à effectuer sur le contenu d'un annuaire. L'utilisation descriptive permet, par exemple, de créer les premières entrées d'un annuaire, ou bien d'avoir une sauvegarde d'un annuaire sous la forme d'un fichier.

Le format LDIF a été développé par l'Université du Michigan, dans ses implémentations d'annuaire LDAP. La première utilisation a été celle de fichiers descriptifs, puis le format a évolué pour pouvoir décrire des modifications apportées à un annuaire.

2. Syntaxe

La syntaxe d'une entrée dans un fichier LDIF est la suivante :

dn: <distinguished name>

<attrdesc>: <attrvalue>

<attrdesc>: <attrvalue>

<attrdesc>:: <base64-encoded-value>

<attrdesc>:< <URL>

Soit en premier le DN de l'entrée décrite, ou bien de l'entrée sur laquelle nous allons effectuer des opérations, suivi d'une liste d'attributs et de leurs valeurs, les attributs pouvant décrire une opération en fonction du type de fichier LDIF.

Les attributs dont la valeur contient des accents doivent être encodés en UTF-8. Les attributs contenant des caractères spéciaux doivent être encodés en base 64. Les attributs peuvent être sur plusieurs lignes, à condition que les lignes supplémentaires commencent par un blanc. Les attributs dont la valeur est localisée dans un fichier sont introduit par la :< ou lieu de :. Les espaces entre les noms d'attributs et leur valeur sont optionnels, mais utiles à la lisibilité du fichier.

Le DN doit être encodé en base 64, lorsqu'il commence par une espace, un <, un : , un retour ligne ou un retour chariot. De même pour les attributs qui se terminent avec une espace.

Un fichier LDIF peut commencer par un numéro de version, qui doit être 1: version: 1. Les commentaires commencent par #. Les différentes entrées sont séparées par une ligne blanche, qui peut être un CR LF ou LF. Il ne peut y avoir plus deux lignes blanches consécutives.

Il est possible de rajouter des options à un attribut. L'intitulé de l'option se rajoute au nom de l'attribut, avec un ;. Il est possible de mettre plusieurs options à la suite. Si un attribut a une valeur vide, il peut être représenté, la valeur dans le fichier LDIF restant vide.

Plusieurs opérations sur les attributs (ci-après changetype: add, delete ou modidy) peuvent s'enchaîner, en les séparant par une ligne contenant un -.

3. Liste des opérations

a. Ajout d'une entrée

dn: <distinguished name>

changetype: add

objectclass: top

objectclass: <objectclassvalue>

<attrdesc>: <attrvalue>

<attrdesc>: <attrvalue>

Il existe certaines commandes d'administration qui permettent d'insérer dans un annuaire des objets décrits dans un fichier LDIF, sans qu'il soit nécessaire que ce fichier LDIF contienne la commande d'insertion ci-dessus.

b. Suppression d'une entrée

dn: <distinguished name>

changetype: delete

Ce n'est pas la peine de mettre des attributs supplémentaires. L'objet ne peut être effacé que s'il n'a pas de descendants.

c. Ajout de valeurs à un attribut

dn: <distinguished name>

changetype: modify

add: <attribut>

<attribut>: <attrvalue1>

<attribut>: <attrvalue2>

On peut ainsi donner à l'attribut autant de valeurs que l'on souhaite. Les attributs précédents de l'objet ne sont pas effacés.

d. Suppression de valeurs à un attribut

Si l'on souhaite effacer uniquement certaines valeurs, il faut passer en paramètres ces valeurs. L'opération a la syntaxe suivante :

dn: <distinguished name>

changetype: modify

delete: attribut

<attribut>: <première valeur à effacer>

<attribut>: <seconde valeur à effacer>

Si l'on souhaite effacer toutes la valeurs d'un attribut d'un objet, il ne faut passer en paramètres aucune valeur de l'attribut. La syntaxe a ainsi la forme suivante :

dn: <distinguished name>

changetype: modify

delete: attribut

e. Remplacer les valeurs d'un attribut

Similaire au deux cas précédents, les paramètres contiennent cette fois les valeurs qui remplacent les valeurs précédentes :

dn: <distinguished name>

changetype: modify

replace: attribut

<attribut>: <nouvelle valeur 1>

<attribut>: <nouvelle valeur 2>

f. Modification du DN et/ou du RDN

La syntaxe pour modifier le DN d'une entrée, soit modifier sa position dans l'arbre, ou pour modifier son RDN, soit modifier son identifiant, sont similaires. La modification d'un DN s'écrit :

dn: <distinguished name>

changetype: moddn

newrdn: <nouveau relative distinguished name>

deleteoldrdn: <1 ou 0>

newsuperior: <nouveau parent>

deleteoldrdn indique si l'on souhaite ou non conserver l'ancienne entrée. Ce type d'opération ne marche que sur les serveurs LDAP respectant la version 3 de la norme.

La modification d'un RDN s'écrit :

dn: <distinguished name>

changetype: modrdn

newrdn: <nouveau relative distinguished name>

deleteoldrdn: <1 ou 0>

B. Filtre de recherche

1. Présentation générale

Un filtre LDAP est comparable à une requête SQL. C'est une chaîne de caractères destinée à être exécutée pour récupérer des entrées d'un annuaire LDAP. Plus précisément elle ne définit que la partie WHERE d'une requête SQL: un filtre définit sur quels objets et sur quels attributs doit se faire la recherche.

Un filtre LDAP est donc constitué d'un ensemble d'opérations, portant sur des attributs, combinées avec les opérateurs booléens classiques: ET, OU et NON.

Une opération élémentaire de recherche s'écrit sous la forme : attribut OPERATEUR valeur La forme générale d'un filtre est une combinaison : (operator(search operation)(search operation)...)).

La syntaxe complète des filtres LDAP est décrite dans le document [rfc2254], qui fait partie de l'ensemble des RFC définissant la norme LDAP.

2. Les opérations élémentaires

Une opération élémentaire est composée d'un attribut, d'un opérateur de comparaison et d'une valeur. Pour effectuer des filtres sur le type des objets, sur leur classe, il suffit d'utiliser leur objectclass comme un attribut. Au besoin, il est possible d'utiliser l'OID de l'attribut plutôt que son nom.

Les opérateurs de recherche sont les suivants :

Égalité

: =

Approximation

~=

Supérieur ou égal

>=

Inférieur ou égal

<=

Tableau 11: les opérations élémentaires

S'il n'existe pas d'opérateur : "différent de", "strictement inférieur", ou "strictement supérieur", il est possible de les obtenir à l'aide des opérateurs autorisés, en utilisant un opérateur booléen "NON".

La valeur accepte le caractère '*' afin de permet des recherches sur des parties de chaînes. Ce même caractère, seul, permet de tester la présence d'un attribut. Ce caractère n'est valide qu'avec l'opération d'égalité.

Une opération doit obligatoirement se trouver entre deux parenthèses. Les valeurs qui sont dans la partie droite d'une opération élémentaire ne sont pas entre quote, mais certains caractères doivent être échappés :

Le caractère

Sa valeur ASCII

Le caractère dans un filtre

*

0x2a

\2a

(

0x28

\28

)

0x29

\29

\

0x5c

\5c

NULL (caractère vide)

0x00

\00

Tableau 12: les opérations

Les opérateurs booléens sont les suivants :

L'opérateur NON

!

L'opérateur ET

&

L'opérateur OU

|

Tableau 13: les opérateurs booléens

Un opérateur booléen s'applique à toutes les opérations qui suivent jusqu'à l'opérateur suivant.

3. Exemples de filtres simples

Toutes les personnes ayant leur numéro de téléphone renseigné dans la base :

(&(objectclass=person)(telephoneNumber=*))

Toutes les personnes dont le nom commence par 'A' et n'habitant pas Paris :

(&(objectclass=person)(cn=A*)(!(l=Paris)))

Toutes les personnes dont le nom ressemble à Febvre (Faivre, Fèvre, Lefebvre, ...) :

(&(objectclass=person)(cn~=febvre))

(&(objectclass=person)(cn=*f*vre))

4. Les filtres étendus

En plus des attributs constituant une entrée d'un annuaire, il est possible, grâce aux filtres étendus, de considérer les éléments du DN comme faisant partie aussi de l'entrée elle même, lors de la recherche. La syntaxe est la suivante :

attribut:dn:=value

Par exemple le filtre (ou:dn:=users) récupérera non seulement toutes les entrées qui ont un attribut ou qui a pour valeur users, mais aussi toutes les entrées dont le DN contient un attribut ou avec la valeur users.

L'autre possibilité offerte par les filtres étendus est de modifier la règle de comparaison sur un attribut. La syntaxe est la suivante :

attribut:oid-matching-rule:=value

Par exemple, si un attribut a une règle de comparaison par défaut qui est insensible à la case, mais que l'on veut faire une recherche avec une valeur précise, qui tienne compte de la case, il faut modifier la règle de comparaison par défaut.

a. Changement de règle de comparaison dans un filtre

Dans cet exemple, on rend l'opération d'égalité sensible à la case

(cn:2.5.13.5:=Mickey)

Les filtres étendus permettent aussi de spécifier une règle de comparaison, sans spécifier d'attribut. La recherche s'effectue alors sur tous les attributs qui acceptent cette règle. On peut aussi étendre cette recherche au DN. Les syntaxes sont les suivantes:

:oid-matching-rule:=value

:dn:oid-matching-rule:=value

Tous les filtres ne marchent qu'avec l'opérateur d'égalité, et celui-ci s'écrit :=, lieu de = dans le cas de filtres simples.

Il n'est pas permis non plus d'utiliser le caractère * pour faire des recherches sur des sous chaînes avec les filtres étendus.

C. Urls LDAP

1. Présentation

Les URL LDAP sont une notation pour identifier, localiser, des entrées d'un annuaire, résultat d'une recherche. Elles représentent un moyen simple pour pointer sur un annuaire, ou bien seulement une partie de l'annuaire, telle une branche ou des objets disséminés. Elles sont utilisées par des clients web, dans des fichiers de configuration, ou encore dans des entrées de l'annuaire. Elles ont l'avantage de ne nécessiter aucune notion de programmation.

La syntaxe URL de LDAP est décrite dans la [rfc2255] qui est une mise à jour de la [rfc1959], datée de 1996. La nouvelle RFC intègre la notion d'extension.

2. Syntaxe

La syntaxe d'une url est la suivante :

ldap[s]://<hostname>:<port>/<base_dn>?<attributes>?<scope>?<filter>?<extensions>

avec les paramètres suivants :

hostname

Adresse du serveur. L'adresse peut être absente, le client est supposé connaître un serveur LDAP à contacter, en fonction du contexte.

port

Port TCP de la connexion. Par défaut il s'agit du port 389. Il ne peut y avoir de port s'il n'y a pas d'adresse.

base_dn

DN de l'entrée qui est le point de départ de la recherche.

attributes

Les attributs que l'on veut récupérer, séparés par des virgules. Si la valeur n'est pas remplie, ou si elle est rempli avec une *, tous les attributs d'usage userApplication doivent être retournés.

scope

La profondeur de la recherche dans l'arbre : base, one ou sub.

filter

Le filtre de recherche, tel que nous venons de le définir. Le filtre par défaut est (objectClass=*).

extensions

Les extensions sont un moyen pour pouvoir ajouter des fonctionnalités aux URLs LDAP tout en gardant la même syntaxe. On peut mettre inclure plusieurs extensions dans une URL, en les séparant par des virgules. Les extensions ont le format suivant : type=value. La partie =value est optionnelle. Elles peuvent être préfixées par un ! pour signaler une extension critique. Une extension critique signifie que le client et le serveur doivent supporter tous les deux l'extension, sinon une erreur sera levée.

Tableau 14: paramètres url LDAP

La [rfc2255] définit une extension bindname, dont la valeur est le DN utilisé par le client pour se connecter au serveur. Le client a la charge de demander à l'utilisateur de rentrer le mot de passe associé si nécessaire.

Tous les caractères non autorisés ou spéciaux dans les urls (voir section 2.2 de [rfc1738]) ainsi que le caractère '?' lorsqu'il est présent dans un DN, un filtre ou une extension, doivent être échappé avec la méthode décrite dans la [rfc1738]. Cette méthode consiste à écrire le caractère avec '%' suivi des deux chiffres hexadécimaux, formant sa valeur hexadécimale.

3. Exemples

Lecture de toutes les personnes du service vente :

ldap://ldap.netscape.com/ou=Sales,o=Netscape,c=US?cn,tel,mail?scope=sub?(objetclass=person)

Lecture des objets personnes d'un annuaire :

ldap://localhost:389/??sub?objectclass=person

Recherche de Valery Febvre :

ldap://ldap.easter-eggs.fr/cn=Valery%20Febvre,ou=Moyens%20Informatiques,dc=easter-eggs,dc=fr

Recherche approximative d'une personne :

ldap://ldap.easter-eggs.fr/o=easter-eggs,dc=fr?mail,uid,sub?(sn=Febvre)

IV. Conception des schémas LDAP

Dans cette section nous allons étudier comment écrire un schéma LDAP, c'est à dire comment créer de nouveaux objets et de nouveaux attributs lorsque cela est nécessaire. Nous commencerons par présenter le modèle des données de la norme LDAP.

A. Modèle des données

Chaque entrée de l'annuaire est constituée d'un ensemble d'attributs, chaque attribut ayant une ou plusieurs valeurs.

Le schéma d'un annuaire définit l'ensemble des classes et attributs que celui-ci peut contenir. Chaque entrée de l'annuaire appartient à une ou plusieurs classes d'objet, et ne peut contenir que des attributs de cette classe.

Chaque classe d'objets est définie par une liste d'attributs - de propriétés - obligatoires et une liste d'attributs facultatifs. À chaque attribut sont associés notamment un nom et une syntaxe, mais aussi une description, et d'autres informations que nous allons étudier en détail.

B. Les attributs

1. Description des attributs

Un attribut est caractérisé par les informations suivantes :

Un nom : Un identifiant sous forme de chaîne de caractères. Les noms d'attributs sont toujours insensibles à la case. Un attribut peut avoir plusieurs noms. C'est le cas de l'attribut givenName qui s'appelle aussi gn.

Un Object Identifier (OID) : Un identifiant numérique. Voir la section dédiée.

Une description : La description d'un attribut fait partie du schéma à part entière.

Une syntaxe et des règles de comparaison : La syntaxe indiquera quel type d'information l'attribut peut contenir. Les règles de comparaison indiqueront comme effectuer des recherches sur les valeurs de l'attribut. La [rfc2252] fournit un ensemble de syntaxes et de règles de comparaison, que les serveurs LDAP doivent savoir gérer.

Sa valuation : S'il est mono ou multivalué

Un indicateur d'usage : Il existe quatre indicateurs d'usages possible (userApplication, directoryOperation, distributedOperation, dsaOperation). Les trois derniers types d'attributs sont dit Operational. Cela signifie qu'ils ne sont pas modifiables par l'utilisateur, ni accessibles, sauf certains qui peuvent être lus, comme par exemple modifytimestamp.

Un format ou une limite de taille

Il existe des relations d'héritage entre attributs. Lorsqu'on définit un attribut, il faut donc aussi définir l'attribut dont il descend, même si cela n'est pas obligatoire.

Ainsi les attributs sn (nom de famille), gn (prénom) dérivent de l'attribut name. L'aspect pratique de l'héritage entre attributs est qu'il est possible d'effectuer des recherches sur plusieurs attributs en même temps: En effectuant une recherche sur l'attribut name, on fera aussi une recherche sur ses sous-types.

2. Exemples

a. Exemples de syntaxes définies dans la [rfc2252]

OID

Nom

Description

1.3.6.1.4.1.1466.115.121.1.7

Boolean

Booléen

1.3.6.1.4.1.1466.115.121.1.12

DN

Un DN

1.3.6.1.4.1.1466.115.121.1.15

Directory String

Une chaîne de caractères, encodée en UTF-8

1.3.6.1.4.1.1466.115.121.1.26

IA5String

Une chaîne de caractères ASCII

1.3.6.1.4.1.1466.115.121.1.27

INTEGER

Un entier

Tableau 15: quelques syntaxes de type

3. Exemples et descriptions de règles de comparaison définies dans les [rfc2252]

OID

Nom

Description

Syntaxe

2.5.13.0

objectIdentifierMatch

Comparaison d'égalité entre deux OIDs.

1.3.6.1.4.1.1466.115.121.1.38

2.5.13.1

distinguishedNameMatch

Comparaison d'égalité entre deux DN.

1.3.6.1.4.1.1466.115.121.1.12

2.5.13.2

caseIgnoreMatch

Retourne vrai si les chaînes ont la même taille et sont identiques, à la case près.

1.3.6.1.4.1.1466.115.121.1.15

2.5.13.3

caseIgnoreOrderingMatch

Règle d'inégalité, retourne vrai si la valeur de l'attribut comparé apparaît est avant la valeur passé en paramètre, une fois les deux chaînes convertis en majuscules.

1.3.6.1.4.1.1466.115.121.1.15

2.5.13.4

caseIgnoreSubstringsMatch

Règle d'inclusion, insensible à la case, comme les deux règles précédentes.

1.3.6.1.4.1.1466.115.121.1.58

2.5.13.8

numericStringMatch

Règle identique à la règle caseIgnoreMatch sauf que les espaces sont ignorés pendant la comparaison.

1.3.6.1.4.1.1466.115.121.1.36

2.5.13.10

numericStringSubstringsMatch

Règle identique à la règle caseIgnoreSubstringsMatch sauf que les espaces sont ignorés pendant la comparaison.

1.3.6.1.4.1.1466.115.121.1.58

2.5.13.23

uniqueMemberMatch

Retourne vrai si la valeur soumise et la valeur de l'attribut comparés sont des DN identiques; ou bien si le DN de l'attribut contient un composant uid, celui-ci peut être absent du DN de la valeur soumise, ou bien s'il est présent il doit être égal.

1.3.6.1.4.1.1466.115.121.1.34

Tableau 16: description des règles de comparaison

4. Exemples d'attributs définis dans la [rfc2256]

Nom

Description

sn

Nom de famille, dérive de l'attribut name

telephoneNumber

Numéro de téléphone

member

Membre d'un groupe. Cet atribut contient un DN, donc une référence vers un noeud de l'annuaire.

Tableau 17: exemple d'attributs

C. Les classes

1. Description

Chaque entrée de l'annuaire appartient à une ou plusieurs classes. Les classes modélisent ainsi les objets réels ou abstraits décrits dans un annuaire. Des exemples de classes sont : personne, bâtiment, application.

Une classe est constituée de :

Un nom : Un identifiant sous forme de chaîne de caractères. Exactement comme les noms de classes sont insensibles à la case. Une classe peut elle aussi avoir plusieurs noms.

Un Object Identifier (OID) : Un identifiant numérique. Voir la section dédiée.

Une description : La description de la classe fait partie du schéma.

Un type

Il existe trois type de classes :

Les classses structurelles : C'est une classe classique qui peut être instanciée.

Les classes auxiliaires : Ce sont des classes permettant de rajouter des informations complémentaire à des objets structurels. Des exemples de classes auxiliaires sont: mailRecipient, labelURIObject. Ces classes contiennent un ensemble d'attributs, généralement facultatifs. Les classes auxiliaires sont similaires aux interfaces en java.

Les classes abstraites : Les classes abstraites ne peuvent pas être instanciées, mais seulement dérivées.

Il n'est pas possible de faire de l'héritage multiple entre classes: une classe dérive toujours d'une seule classe. Néanmoins une entrée de l'annuaire peut être constituée de plusieurs classes, à condition qu'elle ne soit constituée que d'une seule classe structurelle, et de zéro, une ou plusieurs classes auxiliaires.

L'ensemble des classes d'objet forme une hiérarchie, dont la classe Top est au sommet.

2. Exemples

Exemples d'objet standards issus de la [rfc2256] :

OID

Nom

Supérieur

Type

Attributs obligatoires

Attributs facultatif

Description

2.5.6.0

top

Aucun

ABSTRACT

Aucun

Aucun

Classe parente de toutes les classes

2.5.6.6

person

top

STRUCTURAL

sn, cn

userPassword

telephoneNumber seeAlso description

Classe de base modélisant une personne

2.5.6.9

groupOfNames

top

STRUCTURAL

member, cn

businessCategory seeAlso

Owner

ou

o

description

Groupes d'utilisateurs

 

organizationalUnit

top

STRUCTURAL

Ou, objectClass

businessCategory 

description  facsimileTelephoneNumber 

location (l) 

postalAddress 

seeAlso 

telephoneNumber 

Classe modélisant une unité organisationnelle

Tableau 18: les objets standard

D. Présentation des OID

1. Présentation des OID

Les OID sont des identifiants universels, représentés sous la forme d'une suite d'entiers. Ils sont organisés sous forme hiérarchique. Ainsi seul l'organisme 1.2.3 peut dire quelle est la signification de l'OID 1.2.3.4. Ils ont été définis dans une recommandation de l'International Telecommunication Union. L'IETF a proposé de représenter la suite d'entiers constituant les OID séparés par des points.
L'objectif des OID est d'assure l'interopérabilité entre différents logiciels. Les OID sont utilisés dans le monde LDAP mais aussi dans d'autres domaines, comme par exemple les logiciels SNMP pour identifier des ressources. Il est possible d'obtenir un OID, et par conséquence toute une branche, auprès de l'IANA.
Dans le monde LDAP les objets, les attributs, les syntaxes et les règles de comparaison sont référencés par un objet OID. La [rfc2256] normalise un certain nombre de ces objets.

2. Exemples

a. Exemples d'OID

OID

Description

0

branche de l'International Telecommunication Union

1

branche ISO

2

branche commune entre l'International Telecommunication Union et ISO

2.5

fait référence au service X500

2.5.4

définition des types d'attributs

2.5.6

définition des classes d'objets

1.3.6.1

the Internet OID

1.3.6.1.4.1

IANA-assigned company OIDs, used for private MIBs

1.3.6.1.4.1.4203

OpenLDAP

1.3.6.1.4.1.10650

Easter-eggs

Tableau 19: exemples d'OID

Supposons qu'un organisme ait le OID 1.1. L'exemple suivant montre une façon d'ordonner les OID qu'il créera pour ses propres besoins

b. Exemple de hiérarchie

OID

Description

1.1

OID de l'organisme

1.1.1

Branches des identifiants SNMP

1.1.2

Branches des identifiants LDAP

1.1.2.1

Branches des attributs LDAP

1.1.2.1.1

Identifiant du premier attribut LDAP

1.1.2.2

Branche des classes d'objets LDAP

1.1.2.2.1

Identifiant du premier objet LDAP

Tableau 20: exemples de hiérarchie

E. Syntaxe

1. Syntaxe de la définition d'un attribut

AttributeTypeDescription = "(" whsp

numericoid whsp ; AttributeType identifier

[ "NAME" qdescrs ] ; name used in AttributeType

[ "DESC" qdstring ] ; description

[ "OBSOLETE" whsp ]

[ "SUP" woid ] ; derived from this other

; AttributeType

[ "EQUALITY" woid ; Matching Rule name

[ "ORDERING" woid ; Matching Rule name

[ "SUBSTR" woid ] ; Matching Rule name

[ "SYNTAX" whsp noidlen whsp ] ;

[ "SINGLE-VALUE" whsp ] ; default multi-valued

[ "COLLECTIVE" whsp ] ; default not collective

[ "NO-USER-MODIFICATION" whsp ]; default user modifiable

[ "USAGE" whsp AttributeUsage ]; default userApplications

whsp ")"

Cette syntaxe est extraite de la [rfc2252]. whsp est un blanc. Le nom de l'attribut doit être entre parenthèses et entre simples quotes. Des espaces sont obligatoires entre les parenthèses et le nom entre quote, et entre les différents noms, s'il y en a plusieurs. La syntaxe de la description est identique, excepté qu'il ne peut y avoir qu'une seule description.

woid signifie OID. noidlen signifie que la syntaxe d'un attribut est aussi un OID qui peut être complété par une taille maximale, contenue entre {}.

AttributeUsage est l'une des quatre valeurs présentée ci-dessus: userApplications directoryOperation distributedOperation dSAOperation.

La [rfc2252] permet à un attribut d'être collectif, c'est à dire partagé entre plusieurs entrées. C'est un héritage de la norme X500. Néanmoins la norme LDAP n'a pas fourni d'indication sur l'implémentation de ces attributs. Ils ne sont donc pas utilisés actuellement. Une RFC récente, de décembre 2003, fournit plus d'informations. Il s'agit de la [rfc3671].

Exemples de déclarations d'attributs :

attributetype ( 2.5.4.4 NAME ( 'sn' 'surname' )

DESC 'RF256: last (family) name(s) for which the entity is known by'

SUP name )

attributetype ( 2.5.4.20 NAME 'telephoneNumber'

DESC 'RF256: Telephone Number'

EQUALITY telephoneNumberMatch

SUBSTR telephoneNumberSubstringsMatch

SYNTAX 1.3.6.1.4.1.1466.115.121.1.50{32} )

( 2.5.4.31 NAME 'member' SUP distinguishedName )

2. Syntaxe de la définition d'un objet

ObjectClassDescription = "(" whsp

numericoid whsp ; ObjectClass identifier

[ "NAME" qdescrs ]

[ "DESC" qdstring ]

[ "OBSOLETE" whsp ]

[ "SUP" oids ] ; Superior ObjectClasses

[ ( "ABSTRACT" / "STRUCTURAL" / "AUXILIARY" ) whsp ]

; default structural

[ "MUST" oids ] ; AttributeTypes

[ "MAY" oids ] ; AttributeTypes

whsp ")"

Cette déclaration de la syntaxe d'un objet est en tout point similaire à celle d'un attribut.

Exemples de déclarations d'attributs :

( 2.5.6.0 NAME 'top' ABSTRACT MUST objectClass )

( 2.5.6.3 NAME 'locality' SUP top STRUCTURAL

MAY ( street $ seeAlso $ searchGuide $ st $ l $ description ) )

( 2.5.6.6 NAME 'person' SUP top STRUCTURAL MUST ( sn $ cn )

MAY ( userPassword $ telephoneNumber $ seeAlso $ description ) )

( 2.5.6.9 NAME 'groupOfNames' SUP top STRUCTURAL MUST ( member $ cn )

MAY ( businessCategory $ seeAlso $ owner $ ou $ o $ description ) )

F. L'intérêt de créer ses propres schémas

Bien qu'il existe de nombreux objets et attributs normalisés, ceux-ci ne sont pas toujours adaptés au besoin d'une organisation. Généralement chaque organisation possède des informations à stocker dans l'annuaire qui lui sont spécifiques.
Sachant que les objets standards sont impossible à modifier, il reste la possibilité de créer ses propres attributs et ses propres objets. Cela nécessite la démarche administrative consistant à récupérer un identifiant auprès de l'IANA.

V. Déploiement d'une architecture LDAP

Après avoir vu comment écrire un schéma, nous allons étudier le processus de mise en oeuvre d'un annuaire LDAP.

A. Phase de cadrage

La première phase du processus de mise en oeuvre d'un annuaire est la phase de cadrage. C'est pendant cette phase que doivent être désignés tous les objectifs qui sont assignés à l'annuaire.

Quelque soit le type d'organisation dans laquelle un annuaire est déployé, celui-ci a toujours un impact important. Le service informatique est bien sûr le premier à être concerné, mais il est loin d'être le seul. Il est donc important que l'organisation désigne un responsable annuaire, qui sera l'interlocuteur unique entre le prestataire qui met en oeuvre l'annuaire, mais aussi entre les utilisateurs finaux et le service informatique.

L'annuaire est amené à devenir le point central de l'architecture informatique de l'organisation. Toute application nécessitant une authentification des utilisateurs devrait s'appuyer sur un annuaire. C'est là sa première vocation et sa première utilisation. Mais il est aussi possible de l'utiliser pour stocker des informations supplémentaires sur les personnes, et peut ainsi être la base de données d'une application de type "pages blanches". On voit bien alors qu'il peut servir pour gérer presque n'importe quel type de données, et dans beaucoup d'applications.

Il est donc primordial, pendant la phase de cadrage, de se donner des priorités parmi toutes ces possibilités d'utilisation d'un annuaire. Il faut, d'une part, choisir quelles seront les premières applications qui appuieront leur authentification sur l'annuaire. Il faut aussi, d'autre part, déterminer quelles sont les premières applications qui utiliseront les données de l'annuaire en tant que telles.

L'important à cette étape est de rester modeste et pragmatique. Avoir une ou deux applications s'appuyant sur l'annuaire est un bon début, qui permet de démarrer simplement, sans faire la révolution dans tout le système informatique. Avoir une application de type pages blanches et un serveur mail dont l'authentification et les paramètres de messagerie sont basés sur l'annuaire est un bon début. Ce n'est pas la peine d'y ajouter tout de suite une liaison avec le logiciel de paie et la gestion des permissions du serveur de fichiers.

L'autre paramètre à intégrer dans cette phase concerne les utilisateurs. Dans le cas de la mise en oeuvre d'une application pages blanches, ou bien d'une autre application nouvelle entièrement basée sur l'annuaire, ils doivent être intégrés au plus tôt dans la définition des besoins. En effet, au delà des données techniques, l'utilisateur final sera le plus compétent pour dire quelles sont les données qui devront être intégrées à l'annuaire.

B. Phase de conception

1. Choix des données et Identification des acteurs

a. Déterminer les données de l'annuaire

Après la phase de cadrage, la première étape de la phase de conception consiste à énumérer les données présentes dans l'annuaire. Il s'agit d'énumérer de manière exhaustive d'une part toutes les classes d'objets amenées à peupler l'annuaire, et d'autres parts, pour chaque classe, quelles sont ses propriétés gérées par l'annuaire.

Pour chaque type de données, en procédant par classes d'objets puis par propriétés si nécessaire, il faut alors déterminer les informations suivantes :

Quelles sont les personnes ou les applications manipulant cette donnée? On se contentera dans un premier temps d'une réponse sommaire, sachant qu'une réponse plus complète - par type d'action - sera donnée par la suite.

Quelle est la ou les sources actuelles de cette donnée? Est-elle déjà sous forme numérique ou pas encore? Est-ce une donnée statique ou dynamique? Est-elle calculée?

Quelle est le type de cette donnée (chaîne de caractères, entier, data, etc)? Quelle est son format: la chaînes est-elle encodée en utf8 ou unicode? Quel format de date est utilisé? Sa taille?

Quelle est la pérennité de la donnée? Sa fréquence de mise à jour? Cette mise à jour est-elle automatique ou manuelle?

b. Cas d'utilisation

Une fois les données de l'annuaire bien définies, il faut détailler leur utilisation. Pour y parvenir de façon convenable il est utile d'employer la même méthode que lorsqu'on décrit des cas d'utilisation, en eXtrem Programming et en modélisation UML.

Bien que les cas d'utilisation soient centrés sur les utilisateurs, il faudra, dans notre travail, énumérer aussi les actions des applications externes à l'annuaire mais qui l'utilisent.

Pour chaque donnée contenue dans l'annuaire il faut donc noter qui effectue les actions suivantes :

· Recherche. Une recherche s'effectue sur certains attributs. Pour chaque objet, dans chaque cas d'utilisation, il faudra donc noter les attributs sur lesquels la recherche s'effectue.

· Lecture. Là encore il faut tenir compte des attributs. Les cas d'utilisation devront contenir l'information «de quel attribut a besoin de lire telle personne sur tel objet.»

· Création. Lors du processus de création des objets dans l'annuaire, il faudra valider que la personne, ou l'application, qui créée un objet, a bien connaissance de toute l'information nécessaire. Il peut arriver que cela ne soit pas le cas. Par exemple, une personne du département ressources humaine ne pourra pas d'elle même assigner un login à un utilisateur dans l'annuaire. Il faut prévoir un mécanisme, en dehors de l'annuaire, qui lui fournisse cette information qui se peut se révéler nécessaire dans certains cas.

· Modification. Dans l'écriture des cas d'utilisation comprenant des modifications, il est nécessaire de noter quels attributs sont modifiés, et de quel type de modifications il s'agit: ajout d'une valeur, retrait d'une valeur, modification de toutes les valeurs, etc.

· Suppression.

NB : LDAP ne contient pas l'équivalent de clé étrangère pour contrôler la cohérence des données de l'annuaire.

Les cas d'utilisation peuvent dans un premier temps être effectués sur les classes, sur les catégories d'objets présents dans l'annuaire. Il sera parfois nécessaire de descendre à un niveau de précision inférieure et d'écrire les cas d'utilisation par attribut, ou par groupes d'attributs.

Il sera aussi utile noter la fréquence de chaque cas d'utilisation.

2. Élaboration du schéma

Cette étape s'appuie essentiellement sur l'étape précédente du choix des données contenues dans l'annuaire. Elle consiste à écrire un schéma qui modélise ces données.

Écrire un schéma c'est essentiellement définir :

· les attributs

· les classes

· la hiérarchie entre ces classes

des objets qui constitueront l'annuaire.

De la liste des données, il faut extraire les informations élémentaires, sous la forme d'une liste d'attributs, et d'une liste de classes, celles-ci étant définies en regroupant les attributs. Notre méthode consistera à définir et modéliser les attributs, indépendamment des classes, les attributs étant partagés entre classes; puis à constituer les classes d'objet en agrégeant les attributs adéquats.
Entre la définition des classes et celle des attributs, il peut y avoir une démarche itérative. Ainsi certaines informations élémentaires changeront de statut au cours de la modélisation. Par exemple la catégorie d'une personne pourra être une classe, plutôt qu'un attribut, parce que l'appartenance d'une personne à une catégorie implique la présence obligatoire d'autres attributs.
Lors de la définition des attributs comme celles des classes, il faut penser à utiliser la relation d'héritage, lorsque des caractéristiques sont partagées et qu'il existe des liens de spécialisations, entre attributs ou entre classes.

En reprenant ce qui a été écrit précédemment, définir un attribut consiste à définir :

· son nom;

· s'il est standard, issu d'une RFC, public, déjà créé et publié, ou encore spécifique, spécialement créé;

· son attribut père, s'il dérive d'un autre attribut

· sa syntaxe: est-ce une chaîne de caractères? un pointeur vers une autre entrée de l'annuaire? etc.

· s'il est mono ou multivalué;

· par quelle(s) classe(s) il est utilisé;

· sa fréquence d'utilisation

NB : Il peut arriver que l'on ait distingué des attributs contenant exactement le même type d'information parce qu'ils étaient attributs de classes différentes. Cette différenciation n'a pas lieu d'être. Au contraire, il est plus logique d'avoir un même attribut utilisé par plusieurs classes.

De façon similaire, la définition des classes d'objets consiste à préciser :

· son nom;

· si elle est standard, issue d'une RFC, publique, ou spécifique;

· sa classe mère, si elle dérive d'une autre classe;

· la liste des attributs obligatoires;

· la liste des attributs facultatifs;

C. Sécurisation

Bien qu'étant primordial, ce chapitre sera assez court. En effet, la sécurisation de l'annuaire s'appuie sur les éléments cités précédemment, et sur des éléments à venir.

Tout d'abord, les cas d'utilisation, par classe puis par attribut, permettent de définir les droits d'accès à la granularité nécessaire.

Il s'agit donc ensuite d'écrire les règles d'accès, en s'appuyant sur la syntaxe qui sera présentée dans la section Fonctionnement des permissions dans OpenLDAP plus bas.

La topologie du service influence aussi la sécurité.

D. Développement de l'arbre informationnel

Comme on l'a vu aux deux premiers chapitres, les données d'un annuaire sont organisées sous forme hiérarchique, en arbre. Concevoir l'arbre informationnel d'un annuaire c'est spécifier la forme de cet arbre, son organisation, comment les données vont y être nommées. L'objectif à cette étape est donc d'organiser les données pour leur

· Consultation

· Mise à jour

· Duplication

· Répartition

1. La structure de l'arbre informationnel

Un arbre est caractérisé par son branchage plus ou moins fort. Un arbre a un branchage faible lorsque les entrées feuilles (sans descendant) sont très regroupées, au lieu d'être dispersées sous d'autres entrées. On dit aussi qu'il est plat.

Figure 1 : Arbre plat

Figure 2 : Arbre à branchage fort

Les arbres plats ont pour principal avantage que les recherches s'effectuent rapidement, parce que le serveur n'a pas à parcourir toutes les branches, et à faire une recherche par branche. Par ailleurs les arbres plats présentent beaucoup d'inconvénients :

· Les collusions de RDN peuvent se produire fréquemment;

· La mise en place de referral n'est pas possible (Le mécanisme de referral peut alors être remplacé par la mise en place d'un meta annuaire. Néanmoins un meta annuaire est beaucoup plus lourd à mettre en place.)

Sur ces points les arbres à fort branchage sont bien plus efficaces. Ils facilitent aussi la délégation. L'inconvénient des arbres à fort branchage apparaît essentiellement lorsque la structure de l'arbre reflète la structure de l'organisation, et que cette structure est amenée à être modifiée. Dans ce cas, les entrées de l'arbre vont elles aussi être amenées à changer de place et de DN, ce qui peut provoquer des problèmes de cohérences.

Il y a donc un certain équilibre à atteindre entre les deux types d'arbres. Les éléments à prendre en compte sont les suivants (4) :

· Le nombre d'entrées prévu et son évolution ?

· La nature (type d'objet) des entrées actuelles et futures ?

· Vaut-il mieux centraliser les données ou les distribuer ?

· Seront-elles administrées de manière centrale ou faudra-t-il déléguer une partie de la gestion ?

· La duplication est-elle prévue ?

· Quelles applications utiliseront l'annuaire et imposent-elles des contraintes particulières ?

· Quelles permissions seront mises en place?

2. Le nommage des données

a. Choix du suffixe

Contrairement aux annuaires X500 les annuaires LDAP n'ont à vocation à s'insérer dans un annuaire universel. Dès lors, contrairement à leurs ancêtres, chaque annuaire peut avoir la racine qu'il veut. Il n'existe pas d'obligation à respecter. La norme X500 imposait aux annuaires d'entreprises parisienne par exemple d'avoir un suffixe de la forme l=paris,o=fr.

Dans la norme LDAP chaque annuaire fait ce qu'il lui plaît, et peut prendre comme racine, comme suffixe, ce qu'il veut. Le suffixe est devenu l'identifiant d'un annuaire.

Il existe néanmoins une RFC, la [rfc2377] qui apporte un peu de cohérence dans le choix des suffixes. Elle permet de construire un suffixe à partir d'un nom de domaine, et en utilisant l'attribut dc. Cette RFC propose tout simplement de transformer tous les éléments d'un nom de domaine en valeur de l'attribut dc. Ainsi l'annuaire l'entreprise dont le nom de domaine est siantou.com sera dc=siantou, dc=com.

b. Nommage des entrées

Le nommage des entrées consiste à choisir un attribut, qui sera utilisé pour nommer les entrées. Il s'agit donc de choisir le RDN de chaque branche. Cet attribut doit permettre de désigner sans ambiguïté une entrée. C'est à dire que sa valeur doit être unique dans chaque branche. Le deuxième élément à prendre en compte est sa stabilité. Il est préférable en effet qu'une entrée ne change guère d'identité. Cela est d'autant plus vrai dans le cas des entrées possédant des descendants.

E. Topologie du service

Définir la topologie du service consiste à définir la répartition géographique de l'annuaire. Un annuaire LDAP peut en effet être déployé sur des machines physiques différentes. Cette étape a but de concevoir cette répartition.

1. Conception

a. Objectifs

Disposer des serveurs annuaires sur des plusieurs machines permet de répondre à un besoin en qualité de service. S'ils sont bien répartis et bien configurés, plusieurs serveurs seront plus performants et plus fiables qu'un seul serveur. La répartition de l'annuaire sur plusieurs machines peut aussi faciliter sa gestion.

La norme LDAP définit deux mécanismes permettant une répartition géographique des serveurs. Le premier est le mécanisme de referral qui permet de déléguer une branche d'un annuaire à un autre annuaire, localisé sur une machine distante. Le deuxième est le mécanisme de réplication.

La mise en place des deux mécanismes dépend très fortement de la structure de l'arbre informationnel. Le processus de conception de la topologie du service peut donc être itératif avec la conception de l'arbre informationnelle.

b. Recueil des informations

La première étape consiste à faire l'inventaire des sites géographiques qui devront se connecter à l'annuaire. Pour chaque site il est nécessaire ensuite de dessiner son schéma réseau pour identifier les différents réseaux, les différents routeurs et surtout par quelle machine passe les flux sortants. Les liaisons entre sites devront aussi être répertoriées et leurs caractéristiques (débit, réseau privé ou public) devront être notées. Cette étape est donc l'identification des contraintes réseau.

Pour chaque site, il faut ensuite évaluer le nombre d'utilisateurs et en déduire le nombre de requêtes qu'ils génèrent et le type de requêtes (interrogations, mise à jours, création, etc.). Cette étape réutilise donc les cas d'utilisation déjà produits précédemment.

La troisième information à noter sur les requêtes, outre leur nombre et leur type, est l'information concernée par la requête. Par exemple, est-ce qu'il s'agit de l'identité des utilisateurs, des attributs de messagerie, ou bien de leur numéro de téléphone.

c. Les décisions techniques

Nous avons alors à notre disposition :

· la topologie du réseau;

· les flux générés par certaines parties du réseau vers l'annuaire, ces flux étant eux même composés de flux de recherche, de lecture, d'écriture, etc.;

· l'arbre informationnel, qui contient l'information recherchée, lue ou modifiée par ces flux.

À partir de toutes ces informations nous devons définir la topologie du service LDAP, soit répondre aux deux questions suivantes :

· L'information doit-elle être répartie sur un ou plusieurs serveurs ? Et comment?

· Quelle redondance ?

La répartition du contenu de l'annuaire entre plusieurs serveurs n'est possible que si l'arbre informationnel le permet. Il y a donc une démarche itérative entre la définition de la topologie et le choix de l'espace de nommage.

Les deux sections suivantes donnent d'avantage d'information sur le service referral, et sur la réplication.

2. Utilisation de referral

Figure 3 : Utilisation du referral

Le mécanisme de referral est un mécanisme de redirection qui permet à un serveur annuaire de déléguer une partie de ses branches à un autre serveur. Dans le protocole LDAP décrit dans [rfc2251] le serveur peut toujours répondre à une opération quelconque par un referral.

La [rfc2251] décrit en particulier uniquement comment un serveur doit répondre à une recherche dont les entrées retournées sont réparties sur plusieurs autres annuaires. La réponse du serveur doit alors contenir les entrées gérées par lui même, et une ou plusieurs references, des urls que le client doit exécuter pour terminer sa recherche.

Les RFC de la version 3 de la norme ne définissent pas d'avantage comment un serveur a connaissance des branches qu'il doit déléguer. La [rfc3296] est une proposition pour remplir cette lacune. Openldap s'appuie dessus.

Cette RFC introduit une classe d'objets, la classe referral, possédant pour seul attribut ref. Cette classe représente une référence inférieure dans l'annuaire, c'est à dire une branche déléguée à un autre serveur. L'attribut ref contient une url LDAP. Néanmoins elle ne doit pas contenir de profondeur, de filtre ou d'attribut. Son usage est distributedOperation.

À chaque fois qu'un client tente d'accéder à une entrée située une entrée de type referral, ou bien sous une de ces entrées, l'annuaire renvoie donc en referral les valeurs de l'attribut ref de l'entrée referral. Il est néanmoins possible d'ajouter le contrôle ManageDsaIT aux opérations, pour pouvoir modifier les entrées elle même.

Openldap utilise aussi un default referral. Ce referral est renvoyé par défaut à toute les requêtes effectuées sur le serveur et dont le base_dn n'est sous aucun suffixe du serveur.

Le chaînage, mécanisme par lequel le serveur contacte lui même un autre serveur et envoie sa réponse au client, n'est pas mis en place dans Openldap et n'est guère déployé ailleurs pour des raisons de sécurité. Néanmoins les mécanismes de meta annuaire permettent ce type de configuration.

3. La réplication

Figure 4 : la réplication

Alors que le mécanisme de referral permet de répartir l'information d'un annuaire entre plusieurs serveurs, la réplication permet quant à elle de dupliquer cette information sur plusieurs serveurs.

Les mécanisme, referral et réplication, ont des points communs et des différences. Leur point commun est qu'ils impliquent tous deux une répartition géographique des serveurs. En cela ils permettent d'intervenir sur la qualité de service de l'annuaire. Mais les moyens mis en oeuvre diffèrent.

La réplication introduit de la redondance. Cette redondance permet :

· Tolérance aux pannes. Si un serveur ne répond plus, il sera possible pour le client de contacter un autre serveur contenant l'information.

· Équilibrage de charge. Les clients LDAP seront configurés pour contacter le serveur annuaire le plus proche d'eux.

· Gestion locale des données. Le mécanisme de réplication permet à chaque entité géographique de gérer elles mêmes les données qui dépendent d'elle, et de les partager en lecture aux entités.

F. Vue d'ensemble

Phase

Aspects fonctionnels

Aspects techniques

Phase I

Cadrage se limiter à une ou deux applications trouver un maître d'ouvrage (un sponsor du projet, un groupe d'utilisateurs) établir des priorités dans les usages possibles de l'annuaire

Il n'y a pas d'aspect fonctionnel à cette étape

Phase II

Choix des données et Identification des acteurs Écriture des cas d'utilisation à la UML Rester dans le cadre défini en phase I

Écriture du schéma Utilisation de la phase II fonctionnelle Peut être itératif avec la phase III technique

Phase III

Définition des droits d'accès
Utilisation des cas d'utilisation

Écriture des clauses d'accès
Nécessite une vision de l'arbre informationnel

Phase IV

Conception de l'arborescence
Prise en compte d'un aspect géographique supplémentaire par rapport aux cas d'utilisation

Topologie du service Le service referral Duplication des données

Tableau 21: vue d'ensemble du déploiement d'une architecture LDAP

DEUXIEME PARTIE : CONCEPTION ET REALISATION DU SYSTEME

CHAPITRE I : PROBLEMATIQUE

I Etat de l'art

A. Le contexte des transports terrestres au Cameroun

A.1 Au premier rang des facteurs de croissance économique

Dans le système camerounais de transports terrestres, on retrouve les modes courants, route et rail, même si la contribution de chaque moyen au système global est très inégale, selon qu'il s'agit de transport de biens ou de personnes, de transports nationaux ou internationaux.

A l'intérieur du pays, le transport de biens et de personnes se fait globalement par route et par rail. L'essentiel des échanges extérieurs des pays voisins enclavés (Tchad et RCA) transite par le Cameroun par la voie terrestre, rail et route. Ainsi, si les infrastructures restent à développer, les différents modes de transport assurent de manière très complémentaire le transport de biens et de personnes, en contribuant de façon significative à la croissance économique et à l'intégration régionale.

Le secteur des transports génère globalement une activité estimée à 15% du PIB. Depuis près de cinq ans, il contribue à plus de 50% à la croissance du PIB, faisant du secteur tertiaire (42% du PIB) le véritable moteur de l'économie nationale.

A.2 Les transports urbains

Il n'existe pas encore de réseau de métropolitain ni de tramway au Cameroun.

Les moyens de transports urbains fonctionnels sont, par ordre d'importance, les taxis, les « motos-taxis », les bus et les minibus. Les moyens de transports urbains les mieux réglementés sont les taxis et le bus.

Si les taxis sont exploités exclusivement par le secteur privé, le transport par bus sort progressivement du secteur public.

La société publique, Sotuc, Société des transports urbains du Cameroun, créée en 1973 et qui jouissait du monopole d'exploitation des transports urbains par autobus dans les villes de Douala (2 M hab.) et de Yaoundé (1,5M hab.) a été liquidée en février 1995. Le gouvernement a pris l'option en 2000 de libéraliser l'exploitation des services de transports urbains : pas d'exigence de la part de l'Etat ou des collectivités en dehors des dispositions d'ordre public, pas d'exonération fiscale ou douanière, pas de monopole, pas de tarifs imposés mais fixation d'un plafond négocié avec l'opérateur.

A.3 Les transports interurbains de personnes

Le transport interurbain de personnes est exploité essentiellement par des opérateurs privés. On compte quelques dizaines de compagnies de transport régulier organisées (Garanti Express, Binam, Centrale, Kami Express, Confort, Castor, Tabo Express, Tala, Stella, Félicité, Buca, Alliance, Vatican, etc.). Elles opèrent sur les lignes qui relient les capitales provinciales, en particulier Douala, Yaoundé et Bafoussam. Les conditions de voyage sont globalement assez inconfortables à cause des surcharges quasi systématiques et des arrêts intempestifs, mais quelques-unes de ces compagnies proposent, sur la ligne Yaoundé-Douala, à prix double, un service prestige sur des bus climatisés avec presse et collation à bord.

Il existe également sur ces lignes et sur les lignes interdépartementales une multitude de petits transporteurs-chauffeurs souvent propriétaires de leur unique véhicule de 10 à 15 places (en général Toyota-Hiace ou Liteace). Dans l'arrière-pays, les transports sont assurés en petites voitures de cinq places reconditionnées localement pour des routes en terre et toujours surchargées.

Le parc de matériel de transport, est en moyenne d'une centaine de véhicules par grand transporteur, mais on retrouve chez les plus importants 200 à 250 unités. Le parc est en général constitué de minibus de 27 à 30 places type Toyota-Coaster ou, plus récemment, Nissan-Civilian et Renault-Afribus, ainsi que de moyens et gros porteurs de 52 à 72 places Mercedes acquis auprès de concessionnaires locaux (Cami, SHO Tractafric, Mitcam, etc.) ou ivoirien (Carici). Les compagnies de transport les plus importantes cèdent après 2 à 3 ans d'exploitation les véhicules amortis à des transporteurs de moindre importance. La plupart des compagnies de transport de voyageurs proposent par ailleurs des services de messagerie et de transport de marchandises.

A.4 Le transport routier de marchandises au Cameroun

Les activités de transport de marchandises sont assurées par de petits transporteurs, qui disposent en moyenne de moins de cinq véhicules. On compte toutefois une dizaine de structures importantes (UTC, Sodetrans-Cam, Transimex, etc.) qui disposent d'un parc de plus de 50 camions et poids lourds. Celles-ci interviennent principalement dans le transport du bois et de produits spécifiques, liées par contrat aux forestiers, grands transitaires, pétroliers, entreprises industrielles ou agricoles qui ont sous-traité la gestion de cette activité. On estime que l'offre régulière de transport de marchandises est excédentaire au Cameroun. Des réflexions sont en cours au Ministère des transports en vue d'organiser des centres logistiques à Douala, Yaoundé, Ngaoundéré et Bafoussam.

I Etude critique de l'existant

Au Cameroun le secteur des transports terrestres fonctionne encore de manière assez anarchique. Le fait que toutes les agences ne soient pas effectivement cataloguées entrave le bon fonctionnement et le contrôle du secteur des transports terrestres camerounais. Pour un secteur aussi rentable, il serait intéressant de mettre en place un système permettant de situer et de connaître les informations sur les compagnies et agences de transport accessibles au grand public, tâche qui s'avère difficile car aucune institution ne saurait donner avec exactitude les informations à la demande sur les agences de transports de biens, de marchandises ou de personnes au Cameroun. Comment permettre aux citoyens camerounais d'accéder facilement à l'information sur une agence comme sa situation géographique exacte par exemple, son par automobile ou ses différents contacts, comment connaître les horaires de départ pour une agence déterminée en fonction de la destination souhaitée, la capacité en terme de nombre de places disponibles dans les véhicules disponibles.

C'est dans l'optique d'apporter une contribution à l'harmonisation de la gestion des transports terrestres camerounais que nous avons réalisé l'ensemble du travail qui va suivre.

CHAPITRE II : LA METHOLOGIE 

I Présentation des outils de modélisation choisis

En ce qui concerne la modélisation de notre système, nous nous appuierons sur les différentes étapes de mise en oeuvre d'un service d'annuaire décrites plus haut (dans la première partie) avec la collaboration d' UML pour l'élaboration du diagramme de classe de notre système.

A. UML (Unified Modeling Language)

1. Historique d'UML

UML est une notation pour la modélisation des applications construites avec des langages objets. A l'origine de cette nouvelle notation se trouve l'OMG (Object Management Group)  qui partait du constat suivant :

les méthodes fonctionnelles ne permettaient pas d'exploiter le développement objet. Le mélange de plusieurs paradigmes n'est ni commode, ni naturel.

Le grand nombre de méthodes n'aidait pas le choix des utilisateurs.

Les méthodes suivantes sont à la base d'UML :

OMT (Object Modeling Technique) conçue par James Rumbaugh.

OOD (Object Oriented Design) conçue par Grady Booch.

OOSE (Object Oriented Software Engineering) conçue par Ivar Jacobson.

Il faut insister sur le fait qu'UML n'est pas une méthode mais une notation. Il est donc possible d'utiliser la notation UML avec une démarche de conception inspirée d'OMT par exemple.

La première version d'UML est sortie le 17 janvier 1997. Entre temps des partenaires importants sont venus collaborer à la mise en oeuvre de cette notation : IBM, DEC, Microsoft, Rational Rose Software, Oracle, Unisys).

2. Pourquoi une méthodologie Objet

La technologie objet, tout en n'étant pas la panacée, offre une solution aux problèmes des systèmes informatiques d'aujourd'hui, quant à :

La complexité du logiciel

Le logiciel est de plus en plus intégré à l'entreprise. Il offre de plus grandes fonctionnalités. En outre, les logiciels doivent pouvoir s'interfacer et communiquer entre eux.

Les évolutions technologiques

Il faut s'assurer de la pérennité de la solution mise en place. C'est à dire, développer une solution suffisamment ouverte pour incorporer les technologies de demain.

La taille des équipes

Il faut savoir gérer plusieurs types de compétences techniques, s'assurer que la communication soit réelle entre les différentes équipes et gérer le travail en parallèle sur une même tâche.

Les délais de plus en plus courts

Les entreprises ne peuvent attendre longtemps un système qui leur permettra de gagner en productivité.

Les spécifications peu précises

L'évolution rapide des applications

2.1 Apports d'UML et de l'objet

UML préconise de séparer les aspects fonctionnels, technologiques et architecturaux.

Pour la compréhension entre les différents acteurs d'un projet UML propose des diagrammes qui vont permettre d'éclaircir les spécifications.

Enfin, pour répondre à l'évolution rapide des applications, il faut pouvoir facilement effectuer un retour sur chaque phase du cycle de développement. Le cycle de vie objet qui, itératif et incrémental, permet d'effectuer ce retour.

2.2 - Le Cycle de vie

Le cycle de vie d'un projet à objets possède trois caractéristiques fondamentales :

Une traçabilité entre les étapes.

Un caractère itératif.

Un caractère incrémental.

2.2.1 - La traçabilité

Le fait d'utiliser les concepts objets n'engendre plus de rupture entre les différentes phases lors de la réalisation d'un système. Les concepts peuvent être utilisés à tous les stades du cycle de vie (excepté lors de la définition des cas d'utilisation).

2.2.2 - Le cycle de vie itératif

Lorsqu'un système est trop complexe pour être réalisé du premier coup, il est plus facile de le développer par évolutions.

L'approche objet n'est pas nécessaire pour mettre en oeuvre un développement itératif. Elle le facilite grâce à l'encapsulation et la modularité.

Le cycle de vie itératif permet de se rendre vite compte si le système fonctionne correctement. Il permet de tenir compte des risques suivants :

Méconnaissance des besoins par le client.

Incompréhension des besoins par le client.

Instabilité des besoins.

Le fait de voir une réalisation rapide peut motiver l'équipe de développement.

Une itération correspond aux phases suivantes :

Expression des besoins

Spécifications fonctionnelles

Analyse

Expression des besoins

Implémentation

Tests de vérification

Validation des besoins

Un cycle de vie itératif n'est réussi que si les acteurs prennent entièrement part au développement du système. Les cas d'utilisation sont là pour faire rentrer leurs besoins dans un cadre structurant et stable.

Le nombre d'itération dépend de la complexité des systèmes à construire.

L'itération permet :

Les modifications des spécifications.

L'adéquation entre l'analyse, la conception et l'implémentation.

L'acceptation du client.

2.2.3 - Un cycle de vie incrémental

Le but est de développer les fonctionnalités du système en lui ajoutant des améliorations successives à chaque étape du cycle de développement.

Le développement d'une série de prototypes exécutables permettra d'aboutir à la réalisation du système final. L'évolution des prototypes permet de détecter les défauts et les dérives de la construction logicielle, permettant ainsi d'évaluer les risques du projet (garder le cap sur les coûts et les délais).

La réalisation de prototypes peut être menée en parallèle par plusieurs équipes de développement. Le prototype peut être précédé d'une maquette qui va permettre de valider l'enchaînement des écrans et leur ergonomie.

Enfin, le prototype est parlant pour l'utilisateur. Ce dernier se trouve plus intégré au projet.

3. Concepts d'UML

UML se veut être une notation simple, précise, et homogène, permettant un bon rendu visuel. Elle décrit le réalisé plutôt que le processus de réalisation.

3.1 - Les Modèles

Un modèle est une description abstraite d'un système ou d'un processus, une représentation simplifiée qui permet de comprendre et de simuler.

Pour la définition des systèmes, UML définit plusieurs modèles :

modèle de classe qui capture la structure statique

modèle des états qui exprime le comportement dynamique des objets

modèle des cas d'utilisation qui décrit les besoins de l'utilisateur

modèle d'interaction qui décrit les scénarios et les flots de messages

modèle de réalisation qui montre les unités de travail

modèle de déploiement qui précise la répartition du processus.

Les modèles sont regardés par les utilisateurs au moyen de vues graphiques.

A une vue d'un ou plusieurs modèles correspondent un ou plusieurs diagrammes.

3.2 - Les Diagrammes

UML définit 9 diagrammes :

Diagramme des activités : comportement d'une opération en terme d'actions.

Diagramme des cas d'utilisation : fonctions du système du point de vue l'utilisateur.

Diagramme de classes : structure statique en termes de classes et de relations.

Diagramme de collaboration : représentation spatiale des objets, des liens et des interactions.

Diagramme de composants : composants physiques d'une application.

Diagramme de déploiement : les composants sur les dispositifs matériels.

Diagramme d'états transitions : comportement d'une classe en terme d'état.

Diagramme d'objets : instanciation des diagrammes de classes.

Diagramme de séquence : représentation temporelle des objets et de leurs interactions.

Remarque :

Les diagrammes de collaboration et de séquence sont également appelés diagramme d'interaction.

Les éléments communs aux diagrammes :

Stéréotypes 

Syntaxe : « nom stéréotype ».

Les stéréotypes ont pour but de classifier les éléments en vue de les regrouper par famille. Ils peuvent également modifier la sémantique des éléments associés pour créer de nouveaux concepts propres à une application. Les stéréotypes peuvent être associés à tout élément du modèle (classe, les associations, les attributs ...) .

Contraintes (sémantique)

syntaxe : {nom de la contrainte}

Permet de préciser le contexte du diagramme en positionnant des restrictions.

3.3 - Primitifs utilisés par UML

Booléen : type énuméré (vrai et faux)

Chaîne : suite de caractères désignée par un nom

Expression : chaîne de caractères

Liste : conteneur de parties ordonnancées

Multiplicité : ensemble non vide d'entiers positifs

Nom : chaîne de caractères qui permet de désigner un élément.

Temps : est une chaîne qui représente un temps absolu ou relatif et dont la syntaxe et hors de portée de UML

3.4 - Notion de paquetage

Un paquetage (représenté au niveau graphique par un dossier) est un sous-ensemble du modèle. Il contient des classes, des objets, des relations, des composants et les diagrammes associés.

Il peut y avoir une arborescence de paquetage et des paquetages globaux (dans ce cas on ne montre pas toutes les relations avec les autres paquetages).

Un paquetage peut avoir des éléments publics et des éléments privés (non visibles de l'extérieur de la classe).

3.5 - Les Métamodèles

Chaque concept d'UML a été modélisé avec UML.

Le métamodèle permet de décrire la notation d'UML à l'aide de modèles basés sur UML.

Il décrit aussi sans ambiguïté la syntaxe d'un modèle ainsi que la sémantique des concepts utilisés.

II Modélisation du système

A. Phase de cadrage

Il s'agit d'offrir aux transports terrestres camerounais un annuaire de référencement pour ses agences et ainsi donner la possibilité à ceux qui se déplacent constamment d'obtenir l'information nette et précise d'une ligne de transport déterminée en fonction du lieu de départ et de la destination.

Il s'agit de concevoir un annuaire de type « page jaunes » qui référence les agences de transport terrestre (route ou voie ferrée) et facilite ainsi les opérations de logistique et transport.

Le système à mettre en place doit restituer à la demande les informations sur une ligne de transport précise (point de départ - point d'arrivée), une agence et ses véhicules en fonction des critères de recherche à savoir la province et la ville de départ ainsi que celle de destination.

Les villes sont regroupées par provinces (10 au total) et c'est le superviseur de l'annuaire qui gère les informations sur les provinces et les villes.

Le 10 provinces du Cameroun sont préalablement enregistrées et figés dans l'annuaire.

Une agence est propre à une ville et caractérisée par sa raison sociale, son nom commercial, sa situation géographique, une image de l'agence, les horaires de départs, le type de transport effectué (voie ferrée ou terrestre), la catégorie de transport (personne, marchandises, déménagement...), la boite postale, le téléphone, email et l'url du site s'il y'en a un.

A une agence crée est automatiquement associé un administrateur crée pour cette agence.

La suppression d'une agence entraîne automatiquement la suppression de l'administrateur de cette agence.

Les agences de transport terrestre (route ou voie ferrée) sont donc référencées par ville. A elles sont associées les informations sur des véhicules.

Une agence est également caractérisée par une description générale et sa situation géographique et son contact (téléphone, fax, e-mail, site web...).

Un véhicule est caractérisé par son immatriculation, son type (autobus, coaster, wagon, camion...), sa capacité en terme de kilogrammes ou de nombre de place, son image et sa ligne de transport.

Le superviseur de l'annuaire s'authentifie pour effectuer des opérations de gestion et d'administration dans l'annuaire.

Les villes sont ajoutées au fur et à mesure ainsi que les agences de transport par le superviseur du système.

L'administrateur d'agence s'authentifie également pour effectuer la mise à jour des informations sur une agence particulière. Il est chargé d'enregistrer des nouveaux équipements logistiques (véhicules) pour une agence ainsi que de la mise à jour des informations relatives à l'agence et ses différents véhicules.

B. Phase de conception

Cette section présente les différents cas d'utilisations qui interviennent dans notre système d'annuaire. Nous allons énumérer les différents cas d'utilisations et lister les différents scénarios associés.

1. Cas d'utilisation

Les acteurs du système :

- Le superviseur de l'annuaire

- L'administrateur d'agence

- L'utilisateur

Principaux Cas d'utilisation :

1 - Administration de l'annuaire

2 - Gestion d'une agence

3 - Consultation de l'annuaire

Administration de l'annuaire

<< Uses >>

authentification

Superviseur

<< Uses >>

Gestion d'une agence

Administrateur d'agence

Consultation de l'annuaire

Utilisateur

Figure 5: cas d'utilisation du système

2. Les séquences

Les séquences nous permettrons de présenter les interactions entre les acteurs et le système.

LES PRINCIPAUX SCENARIOS

Administration de l'annuaire

Identification

Administration de l'annuaire

Création d'une ville

Administration de l'annuaire

Création d'une agence

Administration de l'annuaire

Supprimer une ville

Administration de l'annuaire

Supprimer une agence

Gestion d'une agence

Identification

Gestion d'une agence

Création d'un véhicule

Gestion d'une agence

Modifier l'enregistrement d'une agence

Gestion d'une agence

Modifier l'enregistrement d'un véhicule

Gestion d'une agence

Supprimer l'enregistrement d'un véhicule

Utilisateur

Connexion au système

Utilisateur

Recherche d'une ligne à partir des provinces

Utilisateur

Recherche d'une ligne à partir d'un critère

Tableau 26: les principaux scénarios

ADMINISTRATION DE L'ANNUAIRE

L'administration de l'annuaire est réalisée par le superviseur

Administration de l'annuaire

Superviseur

Figure 6: cas d'utilisation administration de l'annuaire

- Identification

L'administrateur d'agence se connecte au système et s'identifie

Le système vérifie l'identité su superviseur et autorise l'accès

: Système

: Superviseur

Login (mot de passe)

Vérification des paramètres

Autorisation

Figure 7: identification

- Création d'une ville

Le superviseur demande la liste des provinces

Le système affiche la liste des provinces

Le superviseur choisit une province

Le système affiche le formulaire d'ajout

Le superviseur insère la ville

Le système enregistre après vérification

Le système renvoie un message de confirmation

: Système

: Superviseur

Ajout d'une ville

Liste des provinces

Choix d'une province

Formulaire de saisie

Insertion des informations

Informations sur la ville

sauvegarde

Message de confirmation

Figure 8: création d'une ville

- Création d'une agence

Le superviseur demande la liste des provinces

Le système affiche la liste des provinces

Le superviseur choisit une province

Le système affiche la liste des villes correspondantes à cette province

Le superviseur choisit une ville

Le système affiche le formulaire d'ajout d'agence

Le superviseur insère l'agence

Le système enregistre après vérification

Le système renvoie un message de confirmation

: Système

: Superviseur

Ajout d'une agence

Liste de provinces

Choix d'une province

Liste de villes correspondantes

Choix d'une ville

Formulaire de saisie

Insertion des informations

Informations sur l'agence et son administrateur

Sauvegarde

Message de confirmation

Figure 9: création d'une agence

- Supprimer une ville

Le superviseur demande la liste des provinces

Le système affiche la liste des provinces

Le superviseur choisit une province

Le système affiche la liste des villes correspondantes à cette province

Le superviseur choisit une ville

Le système supprime la ville après confirmation

Le système renvoie un message de confirmation

: Superviseur

Liste de provinces

Suppression d'une ville

: Système

Choix d'une province

Liste de villes correspondantes

Choix d'une ville

Suppression

Message de confirmation

Figure 10: suppression d'une ville

- Supprimer une agence

Le superviseur demande la liste des provinces

Le système affiche la liste des provinces

Le superviseur choisit une province

Le système affiche la liste des villes correspondantes à cette province

Le superviseur choisit une ville

Le système affiche la liste des agences correspondantes à cette ville

Le superviseur choisit l'agence

Le système supprime après confirmation

Le système renvoie un message de confirmation

: Système

Suppression d'une agence

: Superviseur

Liste de provinces

Choix d'une province

Liste de villes correspondantes

Choix d'une ville

Liste des agences correspondantes

Choix d'une agence

Suppression

Message de confirmation

Figure 11: supprimer une agence

GESTION D'UNE AGENCE

La gestion d'une agence est réalisée par l'administrateur d'agence.

Gestion d'une agence

Administrateur

d'agence

Figure 12: cas d'utilisation gestion d'une agence

: Système

: Administrateur d'agence

Login (mot de passe)

Vérification des paramètres

Autorisation

Figure 13: identification administrateur d'agence

- Création d'un véhicule

L'administrateur d'agence demande l'interface d'ajout d'un bus

Le système affiche le formulaire d'ajout d'un bus

L'administrateur d'agence insère les informations sur le bus

Le système enregistre après vérification

Le système renvoie un message de confirmation

: Système

: Administrateur d'agence

Ajout d'un véhicule

Formulaire de saisie

Insertion des informations

Informations sur le bus

Sauvegarde

Message de confirmation

Figure 14: création d'un véhicule

- Modifier l'enregistrement d'une agence

L'administrateur d'agence demande la liste des provinces

Le système affiche la liste des provinces

L'administrateur d'agence choisit une province

Le système affiche la liste des villes correspondantes à cette province

L'administrateur d'agence choisit une ville

Le système affiche la liste des agences correspondantes à cette ville

L'administrateur d'agence choisit l'agence

Le système affiche le formulaire de modification

L'administrateur d'agence insère les modifications correspondantes

Le système enregistre après confirmation

Le système renvoie un message de confirmation

Modification d'une agence

: Système

: Administrateur d'agence

Liste de provinces

Choix d'une province

Liste de villes correspondantes

Choix d'une ville

Liste des agences correspondantes

Choix de l'agence

Formulaire de modification

Insertion des informations

Informations sur l'agence et son administrateur

Sauvegarde

Message de confirmation

Figure 15: modifier l'enregistrement d'une agence

- Modifier l'enregistrement d'un véhicule

L'administrateur d'agence demande la liste des provinces

Le système affiche la liste des provinces

L'administrateur d'agence choisit une province

Le système affiche la liste des villes correspondantes à cette province

L'administrateur d'agence choisit une ville

Le système affiche la liste des agences correspondantes à cette ville

L'administrateur d'agence choisit l'agence

Le système affiche la liste des véhicules correspondants à cette agence

L'administrateur d'agence choisit le véhicule

Le système affiche le formulaire de modification

L'administrateur d'agence insère les modifications correspondantes

Le système enregistre après confirmation

Le système renvoie un message de confirmation: Système

: Administrateur d'agence

Modification d'une agence

Liste de provinces

Liste de villes correspondantes

Choix d'une province

Choix d'une ville

Liste des agences correspondantes

Choix de l'agence

Liste es véhicules

Formulaire de modification

Choix d'un véhicule

Insertion des informations

Informations sur le véhicule

Sauvegarde

Message de confirmation

Figure 16: modifier l'enregistrement d'un véhicule

- Supprimer l'enregistrement d'un véhicule

L'administrateur d'agence demande la liste des provinces

Le système affiche la liste des provinces

L'administrateur d'agence choisit une province

Le système affiche la liste des villes correspondantes à cette province

L'administrateur d'agence choisit une ville

Le système affiche la liste des agences correspondantes à cette ville

L'administrateur d'agence choisit l'agence

Le système affiche la liste des véhicules correspondants à cette agence

L'administrateur d'agence choisit le véhicule

Le système supprime l'enregistrement du véhicule correspondant

Le système renvoie un message de confirmation

Liste de provinces

Modification d'une agence

: Système

: Administrateur d'agence

Choix d'une province

Liste de villes correspondantes

Choix d'une ville

Liste des agences correspondantes

Choix de l'agence

Liste es véhicules

Choix d'un véhicule

Suppression

Message de confirmation

Figure 17: supprimer l'enregistrement d'un véhicule

CONSULTATION DE L'ANNUAIRE

La gestion d'une agence est réalisée par l'administrateur d'agence.

Consultation de l'annuaire

Utilisateur

Figure 18: consultation de l'annuaire

- Connexion

L'utilisateur se connecte au système

Le système et autorise l'accès anonyme

: Système

: Utilisateur

Connexion au système

Vérification des paramètres de connexion

Autorisation

Figure 19: connexion anonyme

- Recherche d'une ligne par province

L'utilisateur demande la liste des provinces de départ et de destination

Le système affiche la liste des provinces

L'utilisateur choisit la province de départ et de destination

Le système affiche la liste des villes correspondantes à ces provinces

L'utilisateur choisit la ville de départ et de destination

Le système affiche la liste des agences correspondantes à ces villes

: Système

: Utilisateur

Recherche d'une ligne

Liste de provinces

Choix des provinces

Liste de villes correspondantes

Choix des villes

Liste des agences correspondantes

Figure 20: recherche d'une ligne par province

- Recherche directe d'une ligne

L'utilisateur demande le formulaire de recherche

Le système affiche le formulaire

L'utilisateur renseigne les champs du formulaire

Le système affiche la liste des agences correspondantes

: Système

: Utilisateur

Recherche directe d'une ligne

Formulaire de recherche

Critères de recherche

Informations

Recherche

Liste des agences correspondantes

Figure 21: recherche directe d'une ligne

3. Les collaborations

Il s'agit ici ce présenter les différentes collaborations entre les objets de notre système.

Administration de l'annuaire

- Identification

4 : Cacher ( )

2 : LireMotDePasse

1 : LireCompte

: F_Login

: Login

3 : Correct ? (Mot de passe)

5 : Charger ( )

: Superviseur : user

: F_Administration

Figure 22: collaboration identification

F_Login

Login

F_Administration

user

Figure 23: ébauche du diagramme de classe

Lectures mot de passe

entry : Invite mot de passe

Connexion

Compte et mot de passe OK

Compte et /ou mot de passe incorrect

Compte lu

Mot de passe lu

Vérification

Lecture compte

entry : Invite compte

Figure 24: état transition identification

- création d'une ville

L'opération valeur() représente la sauvegarde

: ville

: L_Provinces

: F_administration

: F_ville

1 : afficher()

2 :sélection()

4 : afficher()

5 : valeur()

Figure 25: collaboration création ville

: ville

: L_Provinces

: F_administration

: F_ville

Figure 26: ébauche diagramme de classe

- Création d'une agence

: L_Provinces

: F_administration

: agence

: F_agence

1 : afficher()

2 :sélection()

5 : afficher()

6 : valeur()

: L_villes

3 : afficher()

4 :sélection()

Figure 27: collaboration création agence

: L_Provinces

: F_administration

: agence

: F_agence

: L_villes

Figure 28: ébauche diagramme de classe

- Ajout d'un véhicule

: L_Provinces

: F_administration

: vehicule

: F_vehicule

1 : afficher()

2 :sélection()

7 : afficher()

8 : valeur()

: L_villes

3 : afficher()

4 :sélection()

: L_agences

5 : afficher()

6 :sélection()

Figure 29: collaboration création véhicule

- Modifier l'enregistrement d'une agence

L'opération image() représente la lecture

: L_Provinces

: F_administration

: agence

: F_agence

1 : afficher()

2 :sélection()

5 : afficher()

6 : image()

7 : valeur()

: L_villes

3 : afficher()

4 :sélection()

Figure 30: collaboration modifier agence

- Modifier l'enregistrement d'un véhicule

: L_Provinces

: F_administration

: vehicule

: F_vehicule

1 : afficher()

2 :sélection()

7 : afficher()

8 : image()

9 : valeur()

: L_villes

3 : afficher()

4 :sélection()

: L_agences

5 : afficher()

6 :sélection()

Figure 31: collaboration modifier véhicule

Diagramme de classes

ville

des_vill

créer()

supprimer()

consulter()

Province

Des_prov

consulter ()

véhicule

imm_v

type

catégorie

ligne

metric

nbr_place

photo_ag

créer()

supprimer()

consulter()

agence

numero_ag

raison

des_ag

sit_geo

respo

effectif

adr

tel

fax

mail

sit_w

photo_ag

créer()

supprimer()

consulter()

1 1..*

1..*

1

user

login

passwd

nom

prenom

priv

créer()

supprimer()

Figure 32 : diagramme de classe

1. Choix des données et Identification des acteurs

a. Déterminer les données de l'annuaire

- les classes

Classes

Description

province

Contient les informations sur les provinces

ville

Contient les informations sur les villes

agence

Contient les informations sur les agences

véhicule

Contient les informations sur les véhicules

User

Contient les informations sur utilisateurs et leurs profils

Tableau 27: le listing des classes

2. Élaboration du schéma

1 - Attributs

ATTRIBUTS

DESCRIPTION

TYPE

Des_prov

Désignation province

Ou : OrganizationalUnit

Des_vill

Désignation ville

Ou : OrganizationalUnit

des_ag

Désignation agence

Ou : OrganizationalUnit

Numero_ag

Numéro d'agence

Integer

sit_geo

Site géographique agence

directoryString

Adr

Adresse agence

directoryString

Tel

Téléphone agence

telephoneNUmber

Fax

Fax agence

faxNumber

Mail

e-mail agence

Mail

Sit_w

Site web agence

directoryString

Photo_ag

Photo agence

JPEG

imm_v

Immatriculation véhicule

directoryString

Type

Type de transport terrestre

directoryString

catégorie

Catégorie de transport

directoryString

Ligne

Ligne de transport

directoryString

Metric

Kilométrage de la ligne

Number

nbr_place

Nombre de place du véhicule

Integer

Iud

Identifiant unique utilisateur

Iud

Login

Login utilisateur

cn

Passwd

Mot de passe utilisateur

userPassword

Nom

Nom utilisateur

Sn

Prenom

Prénom utilisateur

Sn

Priv

Privilèges utilisateur

DirectoryString

Respo

Responsable d'exploitation dune agence

Sn

Effectif

Effectif d'une agence

interger

Tableau 28: le listing des attributs

2 - Classes

o : organization.

Cette classe permet de définir le nom de la société ou association qui gère l'annuaire. Elle peut constituer une racine pour ce même annuaire, avec des ou en dessous.

ou : organizationalUnit.

Un sous-ensemble d'une organisation. On pourrait le traduire en français par un service, une entité, un secteur d'une société.

dc : domainComponent.

Composant de nom de domaine (au sens DNS du terme). Le com ou example dans example.com

person : schéma standard pour une personne.

Elle permet de définir une personne par son nom et son prénom (a minima), ainsi que, de façon optionnelle, un mot de passe, un numéro de téléphone, et une description de la personne.

agency : schéma spécifique pour les agences héritant des propriétés de la classe organizationalUnit

vhicule : schéma spécifique pour les véhicules.

Cette classe permet de définir les informations sur les véhicules appartenant à une agence bien précise.

Les classes d'objets permettent donc de regrouper les objets de même type, avec un plus par rapport à une base de données : un objet peut appartenir à plusieurs classes en même temps.

C. Sécurisation

Il s'agit de définir les droits d'accès des utilisateurs sur les ressources de l'annuaire (objets et attributs).

Ces règles peuvent s'appliquer à tout l'annuaire, à un sous ensemble, à des entrées spécifiques, pour des attributrs spécifiques définis par des filtres sous la forme d'une expression régulière. On peut appliquer également des permissions par utilisateur, par groupe, mais aussi suivant les adresses IP, les noms de domaine ou les jours et heures.

Il n'y a pas encore de standard LDAP concernant les règles d'accès mais en géréral les logiciels proposent des fonctionnalités d'ACLs. Netscape Directory utilise par exemple un attribut aci pour stocker les ACLs.

D. Développement de l'arbre informationnel

1. La structure de l'arbre informationnel

Nous utiliserons un arbre dynamique à fort branchage car il permet des options de recherche poussées.

2. Le nommage des données

a. Choix du suffixe

Dans la norme LDAP chaque annuaire fait ce qu'il lui plaît, et peut prendre comme racine, comme suffixe, ce qu'il veut. Le suffixe est devenu l'identifiant d'un annuaire.

La racine de l'arborescence est nommée par le nom DNS de l'établissement conformément aux recommandations préconisées par l'IETF (Utilisation des Domain Component (dc) - RFC 2377). Ceci permet d'adresser de manière fiable les informations notre annuaire puisque l'unicité d'un domaine est assurée au sein d'Internet.

Dans notre cas nous utiliserons le domaine master.net. On aura donc :

dc : master , dc :net

Pour le domaine master.net

b. Nommage des entrées

ENTREES

Attribut

Adamaoua

Province de l'Adamaoua

Centre

Province du Centre

Est

Province de l'Est

Littoral

Province du littoral

Nord

Province du Nord

nord-ouest

Province du Nord-Ouest

sud-ouest

Province du Sud-Ouest

Maroua

Province de l'Extrême-Nord

Sud

Province duSud

Ouest

Province de l'Ouest

Tableau 29: Nommage des entrées

3. Construction de l'arbre (Directory Information Tree)

dc=net

dc=master

ou=adamaoua

ou=centre

ou=estm

ou=littoral

ou=extreme-nord

ou=nord

ou=ouest

ou=sud

ou=nord-ouest

ou=sud-ouest

ou=ville2

ou=ville1

vh=vehicule1

ag=agence1

ag=agence2

vh=vehicule2

uid=administrateur d'agence

Figure 33: Directory Information Tree

E. Topologie du service

1. Conception

a. Objectifs

Le système à mettre en place doit permettre le déploiement d'un serveur d'annuaire (OpenLDAP), du serveur Web Apache et du serveur DNS sur un poste Linux pour rendre possible l'accès à l'annuaire via le protocole HTTP en Intranet/Internet.

b. Architecture du système

Figure 34: architecture de notre système

Chapitre III : REALISATION DU SYSTEME

A. Présentation des outils

Pour réaliser notre système, nous utiliserons OpenLDAP qui est un serveur d'annuaire sous licence GNU.

Le serveur DNS Bind dans sa version 9

La plate Forme utilisée pour le déploiement des serveurs OpenLDAP et DNS est LINUX dans sa distribution Mandrake 9.2

Le langage de programmation PHP nous permettra, via ses API pour LDAP d'implémenter notre application.

Nous utiliserons également le serveur web Apache pour réaliser l'interface web d'accès au serveur LDAP par le protocole HTTP.

A.1 La plate forme LINUX Mandrake 9.2

Mandrake Linux est une distribution GNU/Linux développée par MandrakeSoft S.A.

La société Mandrake-Soft est née sur Internet en 1998 ; son ambition première demeure de fournir un système GNU/Linux convivial et facile à utiliser. Les deux piliers de MandrakeSoft sont le logiciel libre et le travail coopératif.

Mandrake Linux possède une facilité d'installation vraiment intéressante et

L'administration de la machine est grandement facilitée via l'utilisation du logiciel

drakconf et de commandes telles que urmpi pour l'installation automatique de paquetages. On note par contre, la distribution souffre toujours de quelques bugs qui rendent l'ensemble d'une stabilité relative.

A.2 Présentation de la suite OpenLDAP

Cette section présente la suite logicielle OpenLDAP. Nous verrons l'historique du projet, le détail des outils fournis par cette suite et enfin nous aborderons les points forts et les points faibles du projet.

1. Historique

La suite Openldap est dérivée du logiciel  University of Michigan LDAP version 3.3, c'est à dire du premier serveur LDAP indépendant. La dernière version du serveur de l'Université du Michigan date d'avril 96[5]. Le premier serveur Openldap est sorti en août 1998[6]. La suite Openldap a totalement remplacé le logiciel de l'Université du Michigan qui n'est plus supporté et qui continue d'être distribué pour des raisons historiques seulement.

Les améliorations apportées par la suite sont nombreuses: support de la version 3 de la norme LDAP, ajout de nombreux backend, plus de plates-formes supportées, options de sécurité plus avancées, et d'inévitables corrections de bugs. Actuellement Openldap fonctionne sur de nombreuses plates-formes, dont de nombreux Unix libres (Darwin, FreeBSD, GNU/Linux, NetBSD, OpenBSD) et commerciaux (HP-UX, IBM AIX, SGI IRIX, Solaris), ainsi que sur d'autres plates-formes, comme BeOS, Apple MacOS X, IBM zOS, et Microsoft Windows 2000.

La version 2.0 de la suite, sortie en août 2000, est la première à supporter la version 3 de la norme LDAP. Chaque version suivante, les 2.1 et la 2.2, ajoutent des extensions LDAP supplémentaires à la suite. À ce jour (début 2004) la version stable d'Openldap est la version 2.1. La version 2.2 est encore en phase de stabilisation.

Le copyright du logiciel est détenu par la  fondation OpenLDAP. Son développement est sponsorisé par l'  Internet Software Consortium, qui sponsorise aussi des outils comme dhcp, bind et inn, qui sont respectivement un serveur dhcp, un serveur DNS, un serveur de news. L'autre sponsor est  net boolean, une société de service spécialisée dans les annuaires électroniques, et dans le logiciel libre.

2. Contenu de la suite

La suite Openldap est composée des éléments suivants :

Slapd

Le serveur d'annuaire LDAP. Slapd signifie Stand-alone LDAP Daemon

Slurpd

Serveur de réplication. Slurpd signifie Standalone LDAP Update Replication Daemon

Un kit de développement

Ce kit contient des librairies LDAP réutilisées dans de nombreux projets, et permet de développer des applications LDAP, en C, C++ ou en Tk

Des utilitaires clients

Il s'agit d'applications utilisables en ligne de commande permettant d'interroger un annuaire LDAP

Des contributions

Ces contributions sont actuellement des classes java, développées par Novell, et un pont JDBC-LDAP, développé par Octet String

Tableau 22: composantes suite OpenLDAP

3. RFC supportées

a. Les RFCs obligatoires

La suite Openldap respecte la [rfc3377] qui est en fait la meta RFC définissant la norme LDAP version 3. En se conformant à cette norme, Openldap respecte intégralement la norme LDAP version 3.

· [rfc2251]

· [rfc2252]

· [rfc2253]

· [rfc2254]

· [rfc2255]

· [rfc2256]

· [rfc2829]

· [rfc2830]

b. Les RFCs non obligatoires

Il existe un certain nombre de RFCs qui ajoutent des fonctionnalités au protocole LDAP sans pour autant faire partie de la norme. Openldap implémente plusieurs de ces extensions. Voici une liste de ces extensions supportées, avec une description pour certaines d'entre elles :

[rfc2596]

Cette RFC propose de rajouter une option language aux attributs. Ainsi la valeur d'un attribut pourra être associée à une langue

[rfc2596bis]

Il s'agit d'une extension à la RFC précédente, qui n'est pas devenue une RFC. Cette extension traite des intervalles de langue.

[rfc2247]

définit un mécanisme qui permet de déduire le suffixe d'un annuaire LDAP à partir de son nom de domaine

[rfc3088]

décrit l'utilisation du service DNS pour localiser le serveur annuaire d'un domaine

[rfc3062]

Cette RFC décrit un mécanisme pour modifier le mot de passe d'un utilisateur, même lorsque celui-ci n'est pas authentifié auprès de l'annuaire mais avec un autre procédé SASL

[rfc3296]

Cette RFC propose un moyen de gérer les referrals. Nous explicitons son contenu dans une autre partie

Matched Values Control

Cette extension permet de limiter les attributs récupérés, lors d'une recherche, aux valeurs qui correspondent à un filtre supplémentaire à celui de la recherche

[rfc2696]

Cette RFC décrit un contrôle qui permet à un client de recevoir les réponses à une recherche par paquets au lieu de les recevoir en un seul bloc. Ce contrôle est implémenté depuis la version 2.2 d'Openldap

Tableau 23: les RFCs non obligatoires

4. Les RFCs non supportées

Openldap n'implémente pas toutes les extensions optionnelles LDAP. En particulier les extensions suivantes ne sont pas respectées :

DIT Structure Rules

Openldap ne permet pas de spécifier des règles dans l'arbre informationnel, pour imposer par exemple qu'une branche ne contiendra que des objets d'une classe donnée. Cette possibilité était présente dans la norme X500

Name Forms

Il s'agit de la possibilité d'imposer à des objets d'une classe donnée, ou dans une branche, quel attribut doit être unique et doit être utilisé comme RDN. Cette possibilité est aussi issue du monde X500

Modification de schéma via LDAP

Il n'est pas possible, avec le serveur slapd d'Openldap de modifier le schéma, directement via le protocole LDAP

[rfc2589]

Cette RFC propose un ensemble d'extension et d'objet spécifique pour permettre à un annuaire de gérer des objets à courte durée de vie. L'objectif est de pouvoir gérer avec un annuaire des informations du type: «est-ce que l'utilisateur est en ligne?»

[rfc2649]

Cette RFC propose un contrôle pour signer des opérations effectuées sur un annuaire, et de créer ensuite un journal pour chaque entrée contenant les modifications effectuées et une signature digitale de l'opération

[rfc2891]

Cette RFC décrit un contrôle permettant à un client de demander au serveur de trier les résultats d'une recherche, suivant un attribut donné et éventuellement une règle de comparaison donnée

Tableau 24: les RFCs non supportées

5. La licence

Openldap est un logiciel libre, au send de la  Free Software Foundation. Cela signifie qu'il respecte les quatre libertés fondamentales d'un logiciel libre: liberté d'exécution, liberté d'étude, liberté de modification et liberté de redistribution.

En revanche ce n'est pas un logiciel copyleft. C'est à dire qu'il n'impose pas sa licence d'utilisation aux logiciels qui dérivent de lui. Il peut donc être privatisé. Ce qui ne l'empêche pas d'être compatible avec la licence GPL. Le code d'Openldap peut donc être intégré dans un logiciel sous GPL.

6. Points forts/Points faibles

1. Points forts

Parmi les atouts d'Openldap on distingue facilement ses atouts techniques :

· De nombreux backends. Ils permettent au serveur slapd d'être utilisé à de nombreux usages, (comme un proxy ou un meta annuaire par exemple).

· Des options de sécurité avancées. Le serveur slapd est compatible avec les protocoles SSL et SASL.

· De nombreuses extensions implémentées. Chaque nouvelle version amène son lot de nouveautés et d'extentions supplémentaires implémentées.

L'autre grand atout d'Openldap qu'il ne faut pas négliger c'est sa qualité de logiciel libre. Évidemment son coût s'en trouve réduit, puisqu'il n'y a aucun coût de licence, ni à l'achat, ni à l'exploitation, et quelle que soit la quantité de données gérées. Le seul coût est donc celui de son déploiement et de sa maintenance. En tant que logiciel libre, ses bugs sont corrigés très rapidement, en particulier les bugs de sécurité.

Mais le principal avantage de ce genre de logiciel reste l'indépendance qu'il assure vis à vis d'un fournisseur ou d'un prestataire, la liberté de le modifier (ou de le faire modifier) pour l'adapter à ses propres besoins, sans avoir à en référer à personne.

2. Points faibles

Les principaux reproches que l'on faire à Openldap sont d'ordre technique. L'obligation de redémarrer le serveur à chaque changement de configuration est assez pénible. En effet le fichier de configuration n'est lu qu'au démarrrage, et il contient les règles d'accès et le schéma. Ce qui nécessite l'arrêt puis le redémarrage après chaque modification d'une règle ou du schéma. Ceci n'est au fond pas très gênant dans la mesure où schéma et règle ne devraient pas être modifiés très souvent, et qu'un annuaire qui doit être toujours accessible devrait être répliqué.

L'autre faiblesse, qui peut se révéler plus gênante, concerne les RFCs optionnelles non implémentées, et dont certaines organisations ne peuvent pas se passer.

Enfin, le dernier petit reproche concerne la documentation. La documentation en ligne n'est pas la plus complète. Pour avoir accès à toutes les directives de configuration, il faut télécharger le logiciel pour consulter les pages de manuels. Éventuellement, certaines pages de la FAQ peuvent se révéler d'un grand secours.

D. Le langage PHP

1. Qu'est ce que PHP ?

PHP (officiellement, ce sigle est un acronyme récursif pour PHP: Hypertext Preprocessor) est un langage de scripts généraliste et Open Source, spécialement conçu pour le développement d'applications web. Il peut être intégré facilement au HTML.

Il est à noter la différence avec les autres scripts CGI écrits dans d'autres langages tels que le Perl ou le C : Au lieu d'écrire un programme avec de nombreuses lignes de commandes afin d'afficher une page HTML, vous écrivez une page HTML avec du code inclus à l'intérieur afin de réaliser une action précise (dans ce cas là, afficher du texte). Le code PHP est inclus entre une balise de début et une balise de fin qui permettent au serveur web de passer en "mode PHP".

Ce qui distingue PHP des langages de script comme le Javascript est que le code est exécuté sur le serveur. Si vous avez un script similaire sur votre serveur, le client ne reçoit que le résultat du script, sans aucun moyen d'avoir accès au code qui a produit ce résultat. Vous pouvez configurer votre serveur web afin qu'il analyse tous vos fichiers HTML comme des fichiers PHP. Ainsi, il n'y a aucun moyen de distinguer les pages qui sont produites dynamiquement des pages statiques.

Le grand avantage de PHP est qu'il est extrêmement simple pour les néophytes, mais offre des fonctionnalités avancées pour les experts. On peut plonger dans le code, et en quelques instants, écrire des scripts simples.

Bien que le développement de PHP soit orienté vers la programmation pour les sites web, son utilisation peut être orientée vers bien d'autres usages.

2. Que peut faire PHP?

Tout. PHP est principalement conçu pour servir de langage de script coté serveur, ce qui fait qu'il est capable de réaliser tout ce qu'un script CGI quelconque peut faire, comme collecter des données de formulaire, générer du contenu dynamique, ou gérer des cookies. Mais PHP peut en faire bien plus.

Il y a trois domaines différents où PHP peut s'illustrer.

Langage de script coté serveur. C'est l'utilisation la plus traditionnelle, et aussi le principal objet de PHP. Vous aurez besoin de trois composants pour l'exploiter : un analyseur PHP (CGI ou module serveur), un serveur web et un navigateur web. Vous devez exécuter le serveur web en corrélation avec PHP. Vous pouvez accéder au programme PHP avec l'aide du navigateur web. Tout ceci peut fonctionner sur votre propre machine si vous êtes juste expérimenté avec la programmation en PHP. Voyez la section d'installation pour plus d'informations.

Langage de programmation en ligne de commande. Vous pouvez écrire des scripts PHP et l'exécuter en ligne de commande, sans l'aide du serveur web et d'un navigateur. Il vous suffit de disposer de l'exécutable PHP. Cette utilisation est idéale pour les scripts qui sont exécutés régulièrement (avec un cron sous Unix ou Linux), ou un Task Scheduler (sous Windows). Ces scripts peuvent aussi être utilisés pour réaliser des opérations sur des fichiers texte. Voyez la section sur l'utilisation de PHP en ligne de commande pour plus d'informations.

Ecrire des applications clientes graphiques. PHP n'est probablement pas le meilleur langage pour écrire des applications clientes graphiques, mais si vous connaissez bien PHP et que vous souhaitez exploiter des fonctionnalités avancées dans vos applications clientes, vous pouvez utiliser PHP-GTK pour écrire de tels programmes. Vous avez aussi la possibilité d'écrire des applications très portables avec ce langage. PHP-GTK est une extension de PHP, qui n'est pas fournie dans la distribution de base. Si vous êtes intéressé par PHP-GTK, visitez son site web.

PHP est utilisable sur la majorité des systèmes d'exploitation, comme Linux, de nombreuses variantes Unix (incluant HP-UX, Solaris et OpenBSD), Microsoft Windows, Mac OS X, RISC OS et d'autres encore. PHP supporte aussi la plupart des serveurs web actuels : Apache, Microsoft Internet Information Server, Personal Web Server, Netscape et iPlanet servers, Oreilly Website Pro server, Caudium, Xitami, OmniHTTPd et beaucoup d'autres encore. Pour la majorité des serveurs web, PHP fonctionne comme module, et pour d'autres, il fonctionne comme exécutable CGI.

Avec PHP vous avez le choix de votre système d'exploitation et de votre serveur web. De plus, vous avez aussi le choix d'utiliser la programmation procédurale ou objet, ou encore un mélange des deux. Bien que le support de la couche objet ne soit pas très standard en PHP 4, beaucoup de bibliothèques et d'applications d'envergures (incluant la bibliothèque PEAR) ont été écrites en utilisant uniquement du code orienté objet. PHP 5 a rectifié les faiblesses de la couche objet de PHP 4 et a introduit un modèle objet complet.

Avec PHP, vous n'êtes pas limités à la production de code HTML. Les capacités de PHP lui permettent de générer aussi bien des images, des fichiers PDF, des animations Flash (avec l'aide des bibliothèques libswf et Ming), générés à la volée. Vous pouvez aussi générer facilement du texte, du code XML ou XHTML. PHP génère tous ces fichiers, et les sauve dans le système de fichier, ou bien les envoie directement au navigateur web.

Une des grandes forces de PHP est le support de nombreuses bases de données et autres méthodes de stockage des données. Ecrire une page web exploitant une base de données ou un annuaire électronique est extrêmement simple. Les bases de données suivantes sont toutes supportées par PHP :

Adabas D

InterBase

PostgreSQL

dBase

FrontBase

SQLite

Empress

mSQL

Solid

FilePro (lecture seule)

Direct MS-SQL

Sybase

Hyperwave

MySQL

Velocis

IBM DB2

ODBC

Unix dbm

Informix

Oracle (OCI7 et OCI8)

 LDAP

Ingres

Ovrimos

 X500

Tableau 25: les bases de données supportées par PHP

Il existe aussi des couches d'abstraction de base de données comme DBX qui vous permettent de vous connecter de manière transparente à toute base de données supportée par cette extension. De plus, PHP supporte ODBC, ce qui vous permet de vous connecter à toute autre base de données qui supporte ce standard.

PHP supporte de nombreux protocoles comme LDAP, IMAP, SNMP, NNTP, POP3, HTTP, COM (sous Windows) et encore d'autres. Vous pouvez ouvrir des sockets réseau, et interagir avec n'importe quel autre protocole. PHP supporte le format complexe WDDX, qui permet de communiquer entre tous les langages web. En terme d'interconnexion, PHP supporte aussi les instanciations d'objets Java, et les utilise de manière transparente comme objets intégrés. Vous pouvez aussi exploiter les objets distants avec CORBA.

PHP dispose de fonctionnalités extrêmement utiles pour le traitement de texte, allant des expressions rationnelles POSIX étendues ou Perl aux traitements des fichiers XML, avec les standards SAX et DOM (PHP 4). Vous pouvez utiliser les transformations XSLT. PHP 5 standardise toutes les extensions XML sur la base solide de libxml2 et en attendant les fonctionnalités en ajoutant le support de SimpleXML et XMLReader.

En commerce électronique, vous trouverez des outils de paiement intégrés comme Cybercash, CyberMut, VeriSign Payflow Pro et MCVE, pour réaliser des paiements en ligne.

Enfin, PHP dispose d'extensions très pratiques comme le moteur de recherche mnoGoSearch, la passerelle avec IRC, des outils de compression (gzip, bz2) et de conversion calendaire, de traduction...

A.3 Le serveur Apache

Le logiciel Apache est actuellement le logiciel serveur http le plus utilisé dans l'Internet.

Doté de nombreuses fonctionnalités, performant et gratuit, il constitue un choix très intéressant pour ceux voulant mettre en place un service WWW.

Mais comme pour tout logiciel, le fait d'offrir de nombreuses fonctionnalités implique également une complexité plus grande d'utilisation et en particulier de configuration. Cela entraîne également très souvent, dans le domaine de l'Internet, des problèmes potentiels supplémentaires concernant la sécurité.

A.4 Le DNS

C'est tout simplement ce qui sert à convertir des adresses noms en adresses IP. Par exemple, quand vous tapez dans votre navigateur préféré l'adresse : http://siantou.com. Celui-ci va tout d'abord faire une requête à un serveur DNS (généralement le serveur DNS que vous avez configuré pour votre connexion à l'Internet, donc les serveurs DNS de votre fournisseur d'accès) en lui demandant : C'est quoi l'adresse IP de siantou.com ?

Et le serveur DNS lui donne l'adresse IP et le navigateur va alors se connecter à cette adresse IP et afficher le site.

Ceci est valable pour toute autre application qui manipule des noms DNS (FTP, telnet, mail, ....).

L'annuaire étant destiné à fonctionner dans un environnement Intranet/Internet, la configuration d'un serveur DNS s'avère importante.

B. Implémentation

B.1 Installation et configuration des serveurs

1. Apache et BIND

Pour ce qui concerne l'installation d'apache et de Bind, nous n'entrerons pas dans les détails d'installation. On va configurer les deux serveurs selon nos besoins.

On utilisera le serveur Web Apache dans sa version 2.1.0 et le serveur de noms Bind dans sa version 9 qui sont par ailleurs tous gratuits.

a) Apache

Pour rendre accessible la consultation et l'administration de l'annuaire via un simple navigateur web, il faut compiler apache à l'installation avec le paquetage auth_ldap.

b) Bind

Pour configurer le DNS nous allons prendre comme domaine fictif de travail master.net et comme hôte dany. Notre réseau a une adresse de classe C 192.168.100 car la démonstration sera effectuée en Intranet et le serveur LDAP avec lequel nous travaillons a l'adresse 192.168.100.2

- Fichier named.conf

Nous allons créer deux zones master.net et 0.168.192.in-addr.arpa pour la résolution noms-adresses et adresses-noms.

// Zone master.net

zone "master.net" {

type master;

file "db.master";

};

// zone resolution inverse

zone "0.168.192.in-addr.arpa" {

type master;

file "db.192.168.100";

};

- Fichier db.master

$TTL 38400

master.net. IN SOA dany.master.net. dany.master.net. (

1 ; numéro de série

10800 ; rafraîchissement

3600 ; nouvel essai

604800 ; Obsolescence après une semaine

86400 ) ; TTL minimal de 1 jour

; serveur de noms

@ IN NS dany.master.net.

; adresse et alias

; adresse des hôtes

IN A 192.168.100.2

localhost.master.net IN A 127.0.0.1

mail.master.net IN A 192.168.100.2

dany IN A 192.168.100.2

dany.master.net IN A 192.168.100.2

; alias

www IN CNAME dany.master.net.

mail IN CNAME dany.master.net.

news IN CNAME dany.master.net.

ldap IN CNAME dany.master.net.

pop IN CNAME dany.master.net.

imap IN CNAME dany.master.net.

; Spécification serveur de messagerie

@ IN MX 10 dany.master.net.

Test DNS avec nslookup

[root@dany named]# nslookup master.net

Note: nslookup is deprecated and may be removed from future releases.

Consider using the `dig' or `host' programs instead. Run nslookup with

the `-sil[ent]' option to prevent this message from appearing.

Server: 192.168.100.2

Address: 192.168.100.2#53

Name: master.net

Address: 192.168.100.2

[root@dany named]#

2. Package OpenLDAP

a) Installation par tarball

On vérifie d'abord qu' Openldap n'est pas déjà installé sur votre système en tapant :

rpm -qa | grep -i ldap

On supprime du système les packages contenus dans la liste avec la commande rpm -e nom-du-package (sauf libldap2 qui sert pour de nombreux packages).
Si pour des histoires de dépendance vous n'arrivez pas à tout supprimer ce n'est pas bien grave car par défaut le tarball et les packages mdk ne placent pas les fichiers au même endroit. Lors du lancement du daemon et des exécutables il faut juste faire attention d'appeler le bon exécutable (servez vous de la commande which nom-exe ).

L'archive à récupérer est  openldap-2.2.28.tgz qu'on décompressera en tapant :

tar xvfz openldap-2.2.28.tgz

Cela va nous créer un répertoire openldap-2.2.28. Avant d'aller plus loin il faudra installer (commande urpmi nom-package ) les packages suivants de la Mandrake 9.2

libgdbm2
libgdbm2-devel

En effet par défaut openldap utilise une base de donnée Berkeley dans sa version 4.2 qui est utilisée, comme la 10.0 ne propose que la 4.1, je me suis rabattu sur la base de donnée de type ldbm. Puis on tape successivement :

./configure --enable-crypt --disable-bdb --enable-ldbm

make depend

make

On peut tester maintenant que tout marche bien  en tapant :

cd tests
make

pour installer les binaires de ldap on tapera, en tant que root :

cd ..
make install

Les binaires sont installés par défaut dans /usr/local/sbin et /usr/local/libexec, les fichiers de config dans /usr/local/etc/openldap et les bases dans /usr/local/var/openldap-data. Les biblio vont se trouver sous /usr/local/lib, si ce n'est pas fait, rajouter ce chemin à la fin du fichier /etc/ld.so.conf et tapez

ldconfig

pour changer l'emplacement de tous ces fichiers taper:

configure -help

b) Installation par RPM

Il suffit d'installer (commande urpmi openldap) les packages suivants (dans l'ordre) :

libldap2-2.1.25-6mdk
openldap-2.1.25-6mdk
perl-ldap-0.31-2mdk
openldap-servers-2.1.25-6mdk
openldap-clients-2.1.25-6mdk

Vous pouvez maintenant installer aussi le package php-ldap pour le support LDAP de PHP avec Apache.

 

c) Mise en place des classes d'objet

Le fichier de configuration slapd.conf fait appel à /usr/local/etc/openldap/schema/core.schema (/usr/share/openldap/schema/core.schema pour une install avec package) qui décrit les classes d'objet. Voilà un exemple avec la classe "person"

objectclass ( 2.5.6.6 NAME 'person'
        DESC 'RF256: a person'
        SUP top STRUCTURAL
        MUST ( sn $ cn )
        MAY ( userPassword $ telephoneNumber $ seeAlso $ description ) )

MUST correspond au attributs obligatoires et MAY à ceux facultatifs
objectClass est le nom de la classe qui descend elle même de la classe top
sn correspond à surname (nom)
cn correspond à common name (prénom nom)
Je vous laisse déviner la signification des autres attributs.

On voit qu'il est nécessaire de fournir les attributs sn (surname) et cn (common name), sont facultatifs le mot de passe (userPassword), le numéro de téléphone (telephoneNumber ), les liens (seeAlso) et la description.

Les attributs sont définis dans le même fichier, la syntaxe est la suivante pour telephoneNumber par exemple :

attributetype ( 2.5.4.20 NAME 'telephoneNumber'
        DESC 'RF256: Telephone Number'
        EQUALITY telephoneNumberMatch
        SUBSTR telephoneNumberSubstringsMatch
        SYNTAX 1.3.6.1.4.1.1466.115.121.1.50{32} )

Pour créer les classes d'objet agency et vhicule dérivant de organizationalUnit, disposant de l'attribut obligatoire title en plus et des arguments facultatifs ou (groupe de travail) et l (localistation). On tapera dans le fichier core.schema juste après la définition de la classe organizationalUnit.

objectclass ( 2.5.6.6.2 NAME `agency' SUP organizationalUnit STRUCTURAL
    MUST ( title )
    MAY ( ou $ l ) )

Vous noterez le nombre 2.5.6.6.2, ce nombre doit être unique dans le fichier, il dérive directement du numéro de la classe objet organizationalUnit qui a pour numéro 2.5.6.6. Il est évident que comme agency et vhicule dérivent de organizationalUnit, les attributs ** sont aussi obligatoires.

A noter qu'avec une installation avec package les classes "locales" peuvent être créées dans le fichier /etc/openldap/schema/local.schema

d) Choix du suffixe

Le rootDSE ou suffixe correspond à l'entrée tout en haut de l'arbre (DIT) de l'annuaire, on utilise généralement le nom de domaine, avec la syntaxe suivante  dc=master, dc=net  pour le domaine master.net (dc correspond à Domain Component).

e) Configuration du serveur LDAP

# $OpenLDAP: pkg/ldap/servers/slapd/slapd.conf,v 1.8.8.6 2001/04/20 23:32:43 kurt Exp $

#

# See slapd.conf(5) for details on configuration options.

# This file should NOT be world readable.

#

# Modified by Christian Zoffoli <czoffoli@linux-mandrake.com>

# Version 0.2

#

include /usr/share/openldap/schema/core.schema

include /usr/share/openldap/schema/cosine.schema

include /usr/share/openldap/schema/corba.schema

include /usr/share/openldap/schema/inetorgperson.schema

include /usr/share/openldap/schema/java.schema

include /usr/share/openldap/schema/krb5-kdc.schema

include /usr/share/openldap/schema/kerberosobject.schema

include /usr/share/openldap/schema/misc.schema

include /usr/share/openldap/schema/nis.schema

include /usr/share/openldap/schema/openldap.schema

#include /usr/share/openldap/schema/rfc822-MailMember.schema

#include /usr/share/openldap/schema/pilot.schema

#include /usr/share/openldap/schema/autofs.schema

#include /usr/share/openldap/schema/samba.schema

#include /usr/share/openldap/schema/qmail.schema

#include /usr/share/openldap/schema/mull.schema

#include /usr/share/openldap/schema/netscape-profile.schema

#include /usr/share/openldap/schema/trust.schema

#include /usr/share/openldap/schema/dns.schema

#include /usr/share/openldap/schema/cron.schema

include /etc/openldap/schema/local.schema

# Define global ACLs to disable default read access.

include /etc/openldap/slapd.access.conf

# Do not enable referrals until AFTER you have a working directory

# service AND an understanding of referrals.

#referral ldap://root.openldap.org

pidfile /var/run/ldap/slapd.pid

argsfile /var/run/ldap/slapd.args

modulepath /usr/lib/openldap

#moduleload back_dnssrv.la

#moduleload back_ldap.la

#moduleload back_passwd.la

#moduleload back_sql.la

# SASL config

#sasl-host ldap.master.net

# To allow TLS-enabled connections, create /usr/share/ssl/certs/slapd.pem

# and uncomment the following lines.

#TLSRandFile /dev/random

#TLSCipherSuite HIGH:MEDIUM:+SSLv2

TLSCertificateFile /etc/ssl/openldap/ldap.pem

TLSCertificateKeyFile /etc/ssl/openldap/ldap.pem

#TLSCACertificatePath /etc/ssl/openldap/

TLSCACertificateFile /etc/ssl/openldap/ldap.pem

#TLSVerifyClient 0

#######################################################################

# ldbm database definitions

#######################################################################

database ldbm

suffix "dc=master,dc=net"

#suffix "o=My Organization Name,c=US"

rootdn "cn=Manager,dc=master,dc=net"

#rootdn "cn=Manager,o=My Organization Name,c=US"

# Cleartext passwords, especially for the rootdn, should

# be avoided. See slappasswd(8) and slapd.conf(5) for details.

# Use of strong authentication encouraged.

rootpw {SSHA}RK9gP6YyIOOreXm5+oFsZ8W+9AiEL4el

# The database directory MUST exist prior to running slapd AND

# should only be accessable by the slapd/tools. Mode 700 recommended.

directory /var/lib/ldap

# Indices to maintain

#index objectClass eq

index objectClass,uid,uidNumber,gidNumber eq

index cn,mail,surname,givenname eq,subinitial

# logging

loglevel 256

# Basic ACL

access to attr=userPassword

by self write

by anonymous auth

by dn="cn=Manager,dc=master,dc=net" write

by * none

access to *

by dn="cn=Manager,dc=master,dc=net" write

by * read

access to attr=userPassword

by self write

by anonymous auth

by dn="dc=master,dc=net" write

by * none

Le fichier ldap.conf peut être vide dans un premier temps voire inexistant.

Le mot de passe de l'administrateur est secret par défaut et en clair. Pour des raisons de sécurité il vaut mieux le crypté.

slappasswd -v -s Mot_de_Passe -h {SSHA}

A la place de

rootpw      secret

Dans slapd.conf, vous mettrez donc:

rootpw          {SSHA}RK9gP6YyIOOreXm5+oFsZ8W+9AiEL4el


 

f) Lancement du serveur

Pour une installation par RPM, vous allez retrouver un fichier de lancement ldap sous /etc/rc.d/init.d. Pour l'installation par tarball, voici un fichier ldap à placer sous /etc/rc.d/init.d, attention ce fichier utilise les chemins par défaut, vous devez le modifier si nécessaire et lui donner des droits d'exécution (755). Vous devez aussi modifier (non nécessaire pour installation par rpm) le fichier /etc/rc.d/init.d/functions et à la place de :

PATH="/sbin:/usr/sbin:/bin:/usr/bin:/usr/X11R6/bin"

On mettra

PATH="/sbin:/usr/sbin:/bin:/usr/bin:/usr/X11R6/bin:/usr/local/libexec"

pour que serveur LDAP soit lancé automatiquement à l'état de marche 3, 4 et 5 ( les deux types d'install) on tapera :

chkconfig --level 345 ldap on

Pour l'arrêter à l'état de marche 0, 1, 2 et 6, on tapera:

chkconfig --level 0126 ldap off

Au prochain reboot le serveur sera lancé automatiquement, pour éviter un reboot pour lancer le serveur, il suffit de taper :

/etc/rc.d/init.d/ldap start ou service ldap start

 
 

g) Ajouter un enregistrement

Nous avons différents moyens d'ajouter des données à l'annuaire, pour des besoins de configurations on va d'abord aborder la méthode manuelle. Pour ajouter des données au serveur LDAP nous devons fournir un fichier au format LDIF (pour LDAP Directory Interchange Format), le fichier est un format texte facilement lisible au contraire du format interne de l'annuaire. Notre fichier comportera l'enregistrement du domaine (master.net) pour notre annuaire et les enregistrements des 10 provinces du Cameroun, enregistrements figés dans la base de données.

A noter que:

- chaque enregistrement dans le fichier est séparé du précédent et du suivant par une ligne vierge,

- les espaces sont pris en compte. ATTENTION, il est très important qu'il n'y ait aucun espace en fin de ligne.

Creation du fichier LDIF de base (base.ldif)

# Build the root node.

dn: dc=master,dc=net

dc: master

objectClass: top

objectClass: dcObject

objectClass: organization

o: Annuaire LDAP Master

#Province du Adamaoua

dn: ou=adamaoua,dc=master,dc=net

objectClass: top

objectClass: organizationalunit

ou: adamaoua

#Province du Centre

dn: ou=centre,dc=master,dc=net

objectClass: top

objectClass: organizationalunit

ou: centre

#Province du Littoral

dn: ou=littoral,dc=master,dc=net

objectClass: top

objectClass: organizationalunit

ou: littoral

#Province du Est

dn: ou=est,dc=master,dc=net

objectClass: top

objectClass: organizationalunit

ou: est

#Province du Ouest

dn: ou=ouest,dc=master,dc=net

objectClass: top

objectClass: organizationalunit

ou: ouest

#Province du Sud-ouest

dn: ou=sud-ouest,dc=master,dc=net

objectClass: top

objectClass: organizationalunit

ou: sud-ouest

#Province du Nord-ouest

dn: ou=nord-ouest,dc=master,dc=net

objectClass: top

objectClass: organizationalunit

ou: nord-ouest

#Province du Nord

dn: ou=nord,dc=master,dc=net

objectClass: top

objectClass: organizationalunit

ou: nord

#Province du Extreme-nord

dn: ou=extreme-nord,dc=master,dc=net

objectClass: top

objectClass: organizationalunit

ou: extreme-nord

#Province du Sud

dn: ou=sud,dc=master,dc=net

objectClass: top

objectClass: organizationalunit

ou: sud

Pour ajouter l'enregistrement il faut utiliser la commande ldapadd qui necessite une authentification.

ldapadd -x -D "description du dn de l'administrateur" -W -f nom-du-fichier-ldif

Dans notre cas on aura concretement:

[root@dany openldap]# ldapadd -x -c -D "cn=Manager,dc=master,dc=net» -W -f base.ldif

Enter LDAP Password:

adding new entry "dc=master,dc=net"

adding new entry "ou=adamaoua,dc=master,dc=net"
adding new entry "ou=centre,dc=master,dc=net"
adding new entry "ou=littoral,dc=master,dc=net"

adding new entry "ou=est,dc=master,dc=net"

adding new entry "ou=ouest,dc=master,dc=net"

adding new entry "ou=sud-ouest,dc=master,dc=net"

adding new entry "ou=nord-ouest,dc=master,dc=net"

adding new entry "ou=nord,dc=master,dc=net"

adding new entry "ou=extreme-nord,dc=master,dc=net"

adding new entry "ou=sud,dc=master,dc=net"

[root@dany openldap]#

A présent il faut vérifier tout ça. On va utiliser la fonction ldapserach

[root@dany projet]# ldapsearch -x -b 'dc=master,dc=net' '(objectclass=*)'

# extended LDIF

#

# LDAPv3

# base <dc=master,dc=net> with scope sub

# filter: (objectclass=*)

# requesting: ALL

# master.net

dn: dc=master,dc=net

objectClass: top

objectClass: dcObject

objectClass: organization

dc: master

o: masterLDAP

# adamaoua, master.net

dn: ou=adamaoua,dc=master,dc=net

objectClass: top

objectClass: organizationalunit

ou: adamaoua

# centre, master.net

dn: ou=centre,dc=master,dc=net

objectClass: top

objectClass: organizationalunit

ou: centre

# littoral, master.net

dn: ou=littoral,dc=master,dc=net

objectClass: top

objectClass: organizationalunit

ou: littoral

# est, master.net

dn: ou=est,dc=master,dc=net

objectClass: top

objectClass: organizationalunit

ou: est

# ouest, master.net

dn: ou=ouest,dc=master,dc=net

objectClass: top

objectClass: organizationalunit

ou: ouest

# sud-ouest, master.net

dn: ou=sud-ouest,dc=master,dc=net

objectClass: top

objectClass: organizationalunit

ou: sud-ouest

# nord-ouest, master.net

dn: ou=nord-ouest,dc=master,dc=net

objectClass: top

objectClass: organizationalunit

ou: nord-ouest

# nord, master.net

dn: ou=nord,dc=master,dc=net

objectClass: top

objectClass: organizationalunit

ou: nord

# extreme-nord, master.net

dn: ou=extreme-nord,dc=master,dc=net

objectClass: top

objectClass: organizationalunit

ou: extreme-nord

# sud, master.net

dn: ou=sud,dc=master,dc=net

objectClass: top

objectClass: organizationalunit

ou: sud

# search result

search: 2

result: 0 Success

# numResponses: 13

# numEntries: 11

[root@dany projet]#

B.2 Réalisation de l'application cliente pour la gestion et l'administration de l'annuaire

1. L'IHM

a) La charte graphique

Nous avons choisit les couleurs verte et grise comme couleurs principales

b) L'ergononie

2. La programmation

Ici nous allons simplement lister les fonctions de l'API PHP utilisées qui permettent de manipuler un serveur d'annuaire LDAP.

ldap_8859_to_t61 --  Convertit les caractères 8859 en caractères t61

ldap_add -- Ajoute une entrée dans un dossier LDAP

ldap_bind -- Authentification au serveur LDAP

ldap_close -- Alias de ldap_unbind()

ldap_compare -- Compare une entrée avec des valeurs d'attributs

ldap_connect -- Se connecte à un serveur LDAP

ldap_count_entries -- Compte le nombre d'entrées après une recherche

ldap_delete -- Efface une entrée dans un dossier

ldap_dn2ufn -- Convertit un DN en format UFN (User Friendly Naming)

ldap_err2str --  Convertit un numéro d'erreur LDAP en message d'erreur

ldap_errno --  Retourne le numéro d'erreur LDAP de la dernière commande exécutée

ldap_error --  Retourne le message LDAP de la dernière commande LDAP

ldap_explode_dn -- Sépare les différents composants d'un DN

ldap_first_attribute -- Retourne le premier attribut

ldap_first_entry -- Retourne la première entrée

ldap_first_reference --  Retourne la première référence

ldap_free_result -- Libère la mémoire du résultat

ldap_get_attributes -- Lit les attributs d'une entrée

ldap_get_dn -- Lit le DN d'une entrée

ldap_get_entries -- Lit toutes les entrées du résultat

ldap_get_option -- Lit/écrit la valeur courante d'une option

ldap_get_values_len -- Lit toutes les valeurs binaires d'une entrée

ldap_get_values -- Lit toutes les valeurs d'une entrée LDAP

ldap_list -- Recherche dans un niveau

ldap_mod_add -- Ajoute un attribut à l'entrée courante

ldap_mod_del -- Efface un attribut à l'entrée courante

ldap_mod_replace -- Remplace un attribut dans l'entrée courante

ldap_modify -- Modifie une entrée LDAP

ldap_next_attribute -- Lit l'attribut suivant

ldap_next_entry -- Lit la prochaine entrée

ldap_next_reference -- Lit la référence suivante

ldap_parse_reference --  Extrait les informations d'une référence d'entrée

ldap_parse_result -- Extrait des informations d'un résultat

ldap_read -- Lit une entrée

ldap_rename -- Modifie le nom d'une entrée

ldap_sasl_bind --  Authentification au serveur LDAP en utilisant SASL

ldap_search -- Recherche sur le serveur LDAP

ldap_set_option -- Modifie la valeur d'une option LDAP

ldap_set_rebind_proc --  Configure une fonction de callback pour refaire des liaisons lors de recherche de référants

ldap_sort --  Trie les entrées d'un résultat LDAP

ldap_start_tls --  Démarre TLS

ldap_t61_to_8859 --  Convertit les caractères t6 en caractères 8859

ldap_unbind -- Déconnecte d'un serveur LDAP

III Résultats attendus et problèmes rencontrés

A. Test des différents serveurs

A.1 Test du DNS

root@dany dany]# telnet -x master.net

Trying 192.168.100.2...

Connected to master.net (192.168.100.2).

Escape character is '^]'

[root@dany dany]# service named status

number of zones: 5

debug level: 0

xfers running: 0

xfers deferred: 0

soa queries in progress: 0

query logging is OFF

server is up and running

[root@dany dany]#

A.2 Test serveur Web

[root@dany dany]# telnet -x www.master.net 80

Trying 192.168.100.2...

Connected to www.master.net (192.168.100.2).

[root@dany dany]# service httpd status

Apache est en cours d'exécution.

httpd2: 2816 2806 2732 2716 2301 2300 2299 2298 2297 2283

A.3 Test serveur LDAP

[root@dany dany]# telnet -x ldap.master.net 389

Trying 192.168.100.2...

Connected to ldap.master.net (192.168.100.2).

[root@dany dany]# service ldap stop

Arrêt du serveur LDAP : [ OK ]

[root@dany dany]# service ldap start

ldaps

Lancement du serveur LDAP (ldap + ldaps) : [ OK ]

[root@dany dany]#

B. Quelques écrans de l'application

Figure 35: Interface de gestion des villes

Figure 36: Interface de gestion d'ajout d'une agence

Figure 37: Interface de recherche d'une ligne de transport

B. Problèmes rencontrés

Nous avons eu quelques difficultés dans notre démarche de tant méthodologiques que pratiques. Les différents problèmes auxquels nous avons du faire face sont les suivants :

? Le temps qui nous a cruellement fait défaut. Dans un projet d'une telle envergure nous aurons aimé présentér un travail encore plus abouti avec la validation des concernés et du ministère des transports.

? Une indisponibilité affichée dans certaines compagnies de transport.

? La technologie utilisée pour la mise en place de notre système étant encore peu connue et utilisée au Cameroun, nous n'avons pas trouvé l'aide académique suffisante ce qui a augmenté le coût en terme de recherche de notre travail.

CHAPITRE IV : CONCLUSION ET PERSPECTIVES

Au terme de ce travail, nous pensons avoir présenté la technologie de annuaires électronique qui représente un sérieux atout dans la mise en place des systèmes et applications informatiques distribuées.

Nous avons choisit le domaine des transport pour appliquer les concepts en mettant sur pied les fondations d'un systèmes de référencement dans les transports terrestres camerounais qui permet entre autres d'avoir facilement l'information détaillé et à moindre coût sur les agences et compagnies de transport terrestre avec des options de recherches avancées et optimisées grâce aux annuaire LDAP, le souci étant de réaliser un système d'information normalisé, accessible à grande échelle, dynamique et utile comme celui présent dans les transport aérien.

Dans le cadre de ce mémoire, nous nous sommes limité à l'implémentation du système à partir des informations de recueillies dans certaines agences et il nous tient à coeur que ce projet soit suivi car il offre de nombreuses possibilités future pour notre système des transports terrestres.

L'intérêt ici de présenter les services d'annuaires LDAP réside dans le fait que c'est une technologie du futur dans ce sens que la plupart des nouveaux systèmes et autres applications informatiques utilisent LDAP. Son utilisation couvre plusieurs domaines comme la réalisation des annuaires téléphoniques interne/externe, gestion des comptes utilisateurs et l'authentification unique sur le réseau, authentification pour accès aux divers services informatiques, listes de diffusion, contrôles d'accès aux bâtiments, des supports d'inventaire, base de configuration d'équipements réseau, intégration dans un système de téléphonie sur IP, les outils de systèmes d'exploitation, les certificats de clé publique PKI pour le paiement sécurisé sur Internet ...

Ainsi nous savons notre tâche juste entamée dans ce sens que nous avons mis les fondations d'un système sérieux et indispensable à notre système de transport. Maintenant, il serait intéressant qu'un tel projet soit suivi car necessite beaucoup de ressources tant d'ordres logistique que techniques et financières pour arriver à mettre en place un système de recherche poussé comme celui des transports aériens et pourquoi pas obtenir un annuaire général camerounais référencent plusieurs domaines clés comme les pharmacies, l'éducation à la hauteur des systèmes comme « Europages, l'annuaire européen des affaires » .

BIBLIOGRAPHIE

A. Les livres utilises

· PHP5 Développemnt d'application Web :
Tobias RATSCHILLER & Till GERKEN - Campous Presse

· Modélisation Objet avec UML:
Pierre-Alain MULLER - Eyrolles

B. Webographie

· Understanding X.500 - The Directory.  http://www.isi.salford.ac.uk/staff/dwc/Version.Web/Contents.htm

· Guidelines for the Evaluation of X.500 Directory Products.  http://snad.ncsl.nist.gov/snad-staff/tebbutt/x5eg/tableofcontents2_1.html

· Introduction to LDAP. Peter Gietz.  http://www.ceenet.org/workshops/lectures2001/Peter%20Gietz/CEENET2001-LDAPl/index.htm

· Linuxworld LDAP in action:
http://linuxworld.com/linuxworld/lw-1999-07/lw-07-ldap_1.html

· Linux LDAP services:
http://www.rage.net/ldap/

· OPenLDAP.org:
http://www.openldap.org

· Netscape Deployment Guide:
http://developer.netscape.com/docs/manuals/directory/deploy30/index.htm

· LDAP FAQ:
http://www.critical-angle.com/ldapworld/ldapfaq.html

· LDAP roadmap and FAQ:
http://www.kingsmountain.com/ldapRoadmap.shtml

· RFC 1777 The Lightweight Directory Access Protocol:
http://www.umich.edu/~dirsvcs/ldap/doc/rfc/rfc1777.txt

· LDAP Version 2 standard:
http://www.ietf.org/rfc/rfc1777.txt

· LDAP Version 3 standard:
http://www.ietf.org/rfc/rfc2251.txt

· The LDAP Extensions Working Group of the IETF:
http://www.ietf.org/html.charters/ldapext-charter.html

· The LDAP Duplication/Update Protocol Working Group of the IETF:
http://www.ietf.org/html.charters/ldup-charter.html

· Les Annuaires LDAP avec OpenLDAP Par Michaël Parienti Maire:
http://www.developpez.com

· Le manuel PHP : http://www.manuel.php/docs/

· Investir en zone franc : http://www.izf.net






Bitcoin is a swarm of cyber hornets serving the goddess of wisdom, feeding on the fire of truth, exponentially growing ever smarter, faster, and stronger behind a wall of encrypted energy








"Qui vit sans folie n'est pas si sage qu'il croit."   La Rochefoucault