5.1 Informazioni sul formato LDIF

LDIF è un formato di file ampiamente utilizzato che contiene le informazioni o le modifiche che è possibile effettuare in una directory. È completamente indipendente dal formato di memorizzazione utilizzato nell'implementazione specifica della directory e solitamente viene utilizzato per l'esportazione delle informazioni sulla directory e per l'importazione di dati nei server LDAP.

La generazione dei file LDIF è in genere un'operazione semplice ed è possibile utilizzare strumenti come awk o perl per spostare i dati da un formato proprietario a una directory LDAP. È inoltre possibile creare degli script per generare dati di prova in formato LDIF.

5.1.1 Formato dei file LDIF

Per l'utility di importazione, conversione ed esportazione di NetIQ è necessario utilizzare file in formato LDIF 1. Di seguito sono elencate le regole di base per i file LDIF 1:

  • La prima riga non di commento deve essere version: 1.

  • La versione è seguita da una serie di uno o più record.

  • Ciascun record è costituito da campi, un campo per riga.

  • Le righe sono separate da un carattere nuova riga o da una coppia di caratteri ritorno a capo/nuova riga.

  • I record sono separati da una o più righe vuote.

  • I record LDIF sono di due diversi tipi: record di contenuto e record di modifica. Un file LDIF può contenere un numero illimitato di record, ma devono essere tutti dello stesso tipo. Non è possibile utilizzare record di contenuto insieme a record di modifica nello stesso file LDIF.

  • Le righe che iniziano con il cancelletto (#) sono righe di commento e vengono ignorate durante l'elaborazione del file LDIF.

5.1.2 Record di contenuto LDIF

Un record di contenuto LDIF racchiude il contenuto di un'intera voce. Di seguito è riportato un esempio di file LDIF con quattro record di contenuto:

 1  version: 1
 2  dn: c=US
 3  objectClass: top
 4  objectClass: country
 5  
 6  dn: l=San Francisco, c=US
 7  objectClass: top
 8  objectClass: locality
 9  st: San Francisco
10
11 dn: ou=Artists, l=San Francisco, c=US
12 objectClass: top
13 objectClass: organizationalUnit
14 telephoneNumber: +1 415 555 0000
15 
16 dn: cn=Peter Michaels, ou=Artists, l=San Francisco, c=US
17 sn: Michaels
18 givenname: Peter
19 objectClass: top
20 objectClass: person
21 objectClass: organizationalPerson
22 objectClass: iNetOrgPerson
23 telephonenumber: +1 415 555 0001
24 mail: Peter.Michaels@aaa.com
25 userpassword: Peter123
26

Questo file LDIF è composto dalle parti seguenti:

Componente

Descrizione

Specificatore di versione

Nella prima riga di un file LDIF è necessario specificare la versione. Tra i due punti e il numero di versione, che attualmente è la numero 1, è possibile non inserire alcuno spazio o più spazi.

Se manca la riga della versione, le applicazioni che elaborano il file LDIF potrebbero presumere che la versione sia la numero 0. È inoltre possibile che il file LDIF venga rifiutato perché sintatticamente errato. Se la versione non è specificata, le utility di NetIQ che elaborano il formato LDIF presuppongono che la versione del file sia la numero 0.

Specificatore del nome distinto

Nella prima riga di ciascun record di contenuto (righe 2, 6, 11 e 16 nell'esempio precedente) è specificato il nome distinto della voce rappresentata.

Lo specificatore del nome distinto può essere di due tipi:

  • dn: nome_distinto_UTF-8_sicuro

  • dn: nome_distinto_codificato_Base64

Delimitatori di riga

Come delimitatore di riga è possibile utilizzare il carattere di avanzamento riga o la coppia di caratteri ritorno a capo/avanzamento riga. Si evita così il problema comune d'incompatibilità fra i file di testo di Linux e Solaris, che utilizzano l'avanzamento riga come delimitatore, e quelli di MS-DOS* e Windows, che utilizzano invece la coppia di caratteri ritorno a capo/avanzamento riga.

Delimitatori di record

Le righe vuote (5, 10, 15 e 26 nell'esempio precedente) sono utilizzate come delimitatori di record.

In un file LDIF ciascun record, incluso l'ultimo, deve terminare con un delimitatore di record (una o più righe vuote). Nonostante alcune implementazioni non generino errori in caso di file LDIF senza delimitatori della fine dei record, la specifica LDIF li prevede.

Specificatore del valore dell'attributo

Tutte le altre righe dei record di contenuto sono specificatori di valore. Tali specificatori possono essere di tre tipi:

  • Descrizione attributo: valore

  • Descrizione attributo: valore_codificato_Base64

  • Descrizione attributo: < URL

5.1.3 Record di modifica LDIF

I record di modifica LDIF contengono le modifiche da apportare in una directory. In un record di modifica LDIF è possibile rappresentare qualsiasi operazione di aggiornamento LDAP (aggiunta, eliminazione, modifica e modifica del DN).

I record di modifica LDIF utilizzano lo stesso formato dei record di contenuto LDIF per lo specificatore del nome distinto, lo specificatore del valore dell'attributo e il delimitatore di record. Per ulteriori informazioni, vedere Record di contenuto LDIF. Ciò che distingue un record di modifica LDIF da uno di contenuto è la presenza del campo del tipo di modifica (changetype), che identifica l'operazione specificata nel record di modifica.

Il campo changetype può essere di cinque tipi:

Modulo

Descrizione

changetype: add

Parola chiave per indicare che il record di modifica specifica un'operazione di aggiunta LDAP.

changetype: delete

Parola chiave per indicare che il record di modifica specifica un'operazione di eliminazione LDAP.

changetype: moddn

Parola chiave per indicare che il record di modifica specifica un'operazione di modifica LDAP del DN, se il processore LDIF viene associato al server LDAP come client versione 3, oppure un'operazione di modifica del nome RDN, se il processore LDIF viene associato al server LDAP come client versione 2.

changetype: modrdn

Sinonimo del campo changetype moddn.

changetype: modify

Parola chiave per indicare che il record di modifica specifica un'operazione di modifica LDAP.

Modifica di tipo aggiunta

Un record di modifica del tipo aggiunta (changetype: add) si presenta come un record di modifica del contenuto (vedere Record di contenuto LDIF) con in più il campo changetype: add posto immediatamente prima di eventuali campi di valore dell'attributo.

Tutti i record devono essere dello stesso tipo. Non è possibile utilizzare record di contenuto insieme a record di modifica.

 1 version: 1
 2 dn: c=US
 3 changetype: add
 4 objectClass: top
 5 objectClass: country
 6 
 7 dn: l=San Francisco, c=US
 8 changetype: add
 9 objectClass: top
10 objectClass: locality
11 st: San Francisco
12
14 dn: ou=Artists, l=San Francisco, c=US
15   changetype: add
16 objectClass: top
17 objectClass: organizationalUnit
18 telephoneNumber: +1 415 555 0000
19 
20 dn: cn=Peter Michaels, ou=Artists, l=San Francisco, c=US
21 changetype: add
22 sn: Michaels
23 givenname: Peter
24 objectClass: top
25 objectClass: person
26 objectClass: organizationalPerson
27 objectClass: iNetOrgPerson
28 telephonenumber: +1 415 555 0001
29 mail: Peter.Michaels@aaa.com
30 userpassword: Peter123
31

Modifica di tipo eliminazione

Poiché un record di modifica del tipo eliminazione (changetype: delete) specifica l'eliminazione di una voce, gli unici campi necessari sono lo specificatore del nome distinto e il campo changetype: delete.

Di seguito è riportato un esempio di file LDIF utilizzato per eliminare le quattro voci create mediante il file LDIF descritto nella sezione Modifica di tipo aggiunta.

IMPORTANTE:per eliminare voci aggiunte in precedenza, invertire l'ordinamento. Se non si effettua questa operazione, l'eliminazione non viene eseguita perché le voci del container non sono vuote.

 1 version: 1
 2 dn: cn=Peter Michaels, ou=Artists, l=San Francisco, c=US
 3 changetype: delete
 4
 5 dn: ou=Artists, l=San Francisco, c=US
 8   changetype: delete
 9
10 dn: l=San Francisco, c=US
11 changetype: delete
12
13 dn: c=US
14 changetype: delete
15

Modifica di tipo modifica

La modifica del tipo modifica (changetype: modify) consente di specificare l'aggiunta, l'eliminazione e la sostituzione di valori dell'attributo per una voce esistente. Le modifiche possono essere di tre tipi:

Elemento

Descrizione

add: tipo attributo

Parola chiave per indicare che i successivi specificatori del valore dell'attributo relativi al tipo devono essere aggiunti alla voce.

delete: tipo attributo

Parola chiave per indicare che i valori del tipo di attributo devono essere eliminati. Se gli specificatori del valore dell'attributo seguono il campo delete, vengono eliminati i valori specificati.

Se il campo delete non è seguito da alcuno specificatore del valore dell'attributo, vengono eliminati tutti i valori. Se l'attributo non contiene valori, l'operazione non viene eseguita, ma si ottiene comunque l'effetto desiderato poiché l'attributo non contiene alcun valore da eliminare.

replace: tipo attributo

Parola chiave per indicare che i valori del tipo di attributo devono essere sostituiti. Eventuali specificatori di valore dell'attributo che seguono il campo replace diventano i nuovi valori per il tipo di attributo.

Se il campo replace non è seguito da alcuno specificatore del valore dell'attributo, il set di valori attuale viene sostituito con un set di valori vuoto, che fa sì che l'attributo venga rimosso. A differenza dello specificatore di modifica di eliminazione, la sostituzione viene eseguita anche se l'attributo non contiene valori. In entrambi i casi l'effetto è il medesimo.

Di seguito è riportato un esempio di un campo changetype: modify che consente di aggiungere un ulteriore numero di telefono alla voce cn=Peter Michaels.

 1 version: 1
 2 dn: cn=Peter Michaels, ou=Artists, l=San Francisco, c=US
 3 changetype: modify
 4 # add the telephone number to cn=Peter Michaels
 4 add: telephonenumber
 5 telephonenumber: +1 415 555 0002
 6

Così come è possibile combinare diversi tipi di modifica in una sola richiesta di modifica LDAP, è possibile anche specificare più modifiche in un solo record LDIF. Per contrassegnare la fine delle specifiche del valore dell'attributo per ciascun specificatore di modifica si utilizza una riga contenente soltanto il carattere trattino (-).

Il file LDIF esemplificativo che segue contiene una combinazione di modifiche:

 1 version: 1
 2
 3 # An empty line to demonstrate that one or more
 4 # line separators between the version identifier 
 5 # and the first record is legal.
 6
 7 dn: cn=Peter Michaels, ou=Artists, l=San Francisco, c=US
 8 changetype: modify
 9 # Add an additional telephone number value.
10 add: telephonenumber
11 telephonenumber: +1 415 555 0002
12 -
13 # Delete the entire fascimiletelephonenumber attribute.
14 delete: facsimileTelephoneNumber
15 -
16 # Replace the existing description (if any exists) 
17 # with two new values.
18 replace: description
19 description: guitar player
20 description: solo performer
21 -
22 # Delete a specific value from the telephonenumber 
23 # attribute.
24 delete: telephonenumber
25 telephonenumber: +1 415 555 0001
26 -
27 # Replace the existing title attribute with an empty 
28 # set of values, thereby causing the title attribute to 
29 # be removed.
30 replace: title
31 -
32

Modifica di tipo modifica del DN

La modifica del tipo modifica del DN (changetype: moddn) consente di ridenominare una voce, spostarla oppure eseguire entrambe le operazioni. Questo tipo di modifica prevede due campi obbligatori e un campo facoltativo.

Campo

Descrizione

newrdn (obbligatorio)

Fornisce il nuovo nome che verrà assegnato alla voce durante l'elaborazione del record. Lo specificatore del nuovo RDN può essere di due tipi:

  • newrdn: nome_distinto_relativo_UTF-8_sicuro

  • newrdn: nome_distinto_relativo_codificato_Base64

Lo specificatore del nuovo RDN è obbligatorio in tutti i record LDIF con campo changetype: moddn.

deleteoldrdn (obbligatorio)

Lo specificatore di eliminazione dell'RDN precedente è un flag che indica se il nome RDN precedente deve essere sostituito da newrdn o deve essere mantenuto. Può essere di due tipi:

  • deleteoldrdn: 0

    Indica che il valore RDN precedente deve essere mantenuto nella voce dopo la ridenominazione.

  • deleteoldrdn: 1

    Indica che il valore RDN precedente deve essere eliminato quando la voce viene rinominata.

newsuperior (facoltativo)

Lo specificatore newsuperior fornisce il nome del nuovo superiore che verrà assegnato alla voce durante l'elaborazione del record di modifica del DN. Lo specificatore newsuperior può essere di due tipi:

  • newsuperior: nome_distinto_UTF-8_sicuro

  • newsuperior: nome_distinto_codificato_Base64

Lo specificatore newsuperior è facoltativo nei record LDIF con changetype: moddn e viene fornito solo nei casi in cui si desidera assegnare alla voce un nuovo superiore.

Di seguito è riportato un esempio di campo changetype: moddn che illustra come ridenominare una voce:

 1 version: 1
 2 
 3 # Rename ou=Artists to ou=West Coast Artists, and leave
 4 # its old RDN value.
 5 dn: ou=Artists,l=San Francisco,c=US
 6 changetype: moddn
 7 newrdn: ou=West Coast Artists
 8 deleteoldrdn: 1
 9

Di seguito è riportato un esempio di campo changetype: moddn che illustra come spostare una voce:

 1 version: 1
 2
 3 # Move cn=Peter Michaels from 
 4 # ou=Artists,l=San Francisco,c=US to 
 5 # ou=Promotion,l=New York,c=US and delete the old RDN.
 5 dn: cn=Peter Michaels,ou=Artists,l=San Francisco,c=US
 6 changetype: moddn
 7 newrdn: cn=Peter Michaels
 8 deleteoldrdn: 1
 9 newsuperior: ou=Promotion,l=New York,c=US
10

Di seguito è riportato un esempio di campo changetype: moddn che illustra come spostare e contemporaneamente ridenominare una voce:

 1 version: 1
 2
 3 # Move ou=Promotion from l=New York,c=US to
 4 # l=San Francisco,c=US and rename it to 
 5 # ou=National Promotion.
 5 dn: ou=Promotion,l=New York,c=US
 6 changetype: moddn
 7 newrdn: ou=National Promotion
 8 deleteoldrdn: 1
 9 newsuperior: l=San Francisco,c=US
10

IMPORTANTE:l'operazione di modifica dell'RDN di LDAP 2 non supporta lo spostamento delle voci. Se si tenta di spostare una voce utilizzando la sintassi newsuperior di LDIF con un client LDAP 2, la richiesta ha esito negativo.

5.1.4 Invio a capo delle righe nei file LDIF

Per mandare a capo una riga in un file LDIF, è sufficiente inserire un separatore di riga (un carattere nuova riga o una coppia ritorno a capo/nuova riga) seguito da uno spazio nel punto in cui si desidera mandare a capo la riga. Quando l'analizzatore sintattico LDIF rileva uno spazio all'inizio della riga, i dati restanti sulla stessa riga vengono concatenati a quelli della riga precedente. Lo spazio iniziale viene quindi eliminato.

Non è consentito inserire ritorni a capo o nuove righe tra caratteri UTF-8 multibyte.

Di seguito è riportato un esempio di un file LDIF con una riga mandata a capo (vedere righe 13 e 14):

 1 version: 1
 2 dn: cn=Peter Michaels, ou=Artists, l=San Francisco, c=US
 3 sn: Michaels
 4 givenname: Peter
 5 objectClass: top
 6 objectClass: person
 7 objectClass: organizationalPerson
 8 objectClass: iNetOrgPerson
 9 telephonenumber: +1 415 555 0001
10 mail: Peter.Michaels@aaa.com
11 userpassword: Peter123
12 description: Peter is one of the most popular music
13  ians recording on our label. He’s a big concert dr
14  aw, and his fans adore him.
15

5.1.5 Rappresentazione della password con hash nei file LDIF

Nei file LDIF la password con hash viene rappresentata sotto forma di dati Base64. Il nome dell'attributo userpassword deve essere seguito dal nome della cifratura utilizzata per generare l'hash della password. Tale nome deve essere racchiuso fra parentesi graffe "{}", come illustrato di seguito:

Esempio 1

Per le password con hash SHA:

1 version: 1 2 dn: cn=Peter Michaels, ou=Artists, l=San Francisco, c=US 3 sn: Michaels 4 userpassword: {SHA}xcbdh46ngh37jsd0naSFDedjAS30dm5 objectclass: inetOrgPerson

Esempio 2

Per le password con hash SSHA:

1 version: 1 2 dn: cn=Peter Michaels, ou=Artists, l=San Francisco, c=US 3 sn: Michaels 4 userpassword: {SSHA}sGs948DFGkakdfkasdDF34DF4dS3skl5DFS5 objectclass: inetOrgPerson

Esempio 3

Per le password con hash Digest MD5:

1 version: 1 2 dn: cn=Peter Michaels, ou=Artists, l=San Francisco, c=US 3 sn: Michaels 4 userpassword: {MD5}a45lkSDF234SDFG62dsfsf2DG2QEvgdmnk4305 objectclass: inetOrgPerson