Il demone del server LDAP è chiamato Slapd. Slapd supporta una varietà di differenti database backends utilizzabili.
Essi includono come scelta primaria BDB, un database backend transazionale ad alte prestazioni; LDBM, un backend leggero basato su DBM; SHELL, un’interfaccia di backend per script di shell arbitrari e PASSWD, una semplice interfaccia di backend per il file passwd(5).
BDB utilizza Sleepycat Berkeley DB 4. LDBM utilizza Berkeley DB o GDBM.
Il backend transazionale BDB è adatto per l’accesso a database di lettura/scrittura in modalità multiutente, con qualunque mix di operazioni lettura/scrittura. BDB è usato nelle applicazioni che richiedono:
Transazioni, compresi cambiamenti multipli di database effettuati in modo atomico e il rollback di eventuali modifiche non completate, quando necessario.
Capacità di ripristino da crash del sistema e da guasti hardware senza perdere nessuna transazione completata.
In questo documento si suppone che venga scelto il database BDB.
Per importare ed esportare le informazioni tra directory server basati su LDAP, o per descrivere un insieme di cambiamenti da apportare alla directory, si usa tipicamente il formato file LDIF (LDAP Data Interchange Format). Un file LDIF memorizza informazioni in strutture gerarchiche orientate agli oggetti. Il pacchetto di programmi di LDAP che si avrà è fornito di un programma di utilità per convertire i files LDIF in formato BDB.
Un file LDIF comune è simile a questo:
dn: o=TUDelft, c=NL o: TUDelft objectclass: organization dn: cn=Luiz Malere, o=TUDelft, c=NL cn: Luiz Malere sn: Malere mail: malere@yahoo.com objectclass: person
Come si può vedere ogni voce è identificata unicamente in base a un nome distinto, o DN. Il DN è composto dal nome della voce più un percorso di nomi che risalgono dalla voce all’indietro fino in cima alla struttura gerarchica della directory (come in un albero).
In LDAP, una classe oggetto definisce la collezione degli attributi che possono essere usati per definire una voce. Lo standard di LDAP fornisce questi tipi base di classi oggetto:
Gruppi nella directory, che includono liste non ordinante di singoli oggetti o gruppi di oggetti.
Locazioni, come il nome di un paese e una descrizione.
Organizzazioni nella directory.
Persone nella directory.
Una voce può appartenere a più di una classe oggetto. Per esempio, la voce per una persona è definita dalla classe oggetto person, ma può anche essere definita dagli attributi delle classi inetOrgPerson, groupOfNames e organization. La struttura di classi oggetto del server (il suo schema) determina la lista totale degli attributi obbligatori e permessi per ogni singola voce.
I dati della directory sono rappresentati come coppie di attributi-valori. Qualsiasi informazione specifica è associata a un attributo descrittivo.
Per esempio, l’attributo commonName, o cn, è usato per immagazzinare il nome della persona. Una persona chiamata Jonas Salk può essere rappresentata nella directory come
cn: Jonas Salk
Ogni persona che è inserita nella directory è definita da una serie di attributi nella classe person. Altri attributi usati per definire questa voce potrebbero essere:
givenname: Jonas surname: Salk mail: jonass@airius.com
Gli attributi obbligatori includono gli attributi che devono essere presenti nella voce in quanto appartenenti ad una specifica classe. Tutte le voci richiedono l’attributo objcetClass, che elenca le classi cui l’oggetto appartiene.
Gli attributi consentiti includono gli attributi che possono essere presenti nelle voci che usano una classe oggetto. Per esempio, nella classe oggetto person, gli attributi cn e sn sono obbligatori. Gli attributi descrizione, telephoneNumber, seeAlso e userpassword sono consentiti ma non sono obbligatori.
Ogni attributo ha una corrispondente definizione di sintassi. La definizione di sintassi descrive il tipo di informazione fornita dall’attributo, per esempio:
bin: tipo binario.
ces: case exact string (durante il confronto le maiuscole/minuscole devono corrispondere).
cis: case ignore string (durante il confronto maiuscole/minuscole sono ignorate).
tel: telephone number string (come cis ma gli spazi in bianco ed il ` - ’ sono ignorati durante i confronti).
dn: distinguished name.
Nota: di solito le definizioni delle classi oggetto e degli attributi risiedono nei file di schema, nella sottodirectory schema sotto la directory di installazione di OpenLDAP.