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.
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.
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:
|
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:
|
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. |
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
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
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
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:
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:
|
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:
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.
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
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:
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
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
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