5.1 Funktionsweise von LDIF

LDIF ist ein weit verbreitetes Dateiformat, das Directory-Informationen oder Änderungsoperationen beschreibt, die für ein Directory ausgeführt werden können. LDIF ist vollständig unabhängig vom Speicherformat, das für eine bestimmte Directory-Implementierung verwendet wird, und wird gewöhnlich zum Exportieren von Directory-Informationen von und zum Importieren von Daten nach LDAP-Servern verwendet.

LDIF ist üblicherweise einfach zu erstellen. Dies ermöglicht die Verwendung von Werkzeugen wie awk oder perl, um Daten von einem systemeigenen Format in ein LDAP-Directory zu verschieben. Darüber hinaus können Sie Skripten erstellen, um Testdaten im LDIF-Format zu erstellen.

5.1.1 LDIF-Dateiformat

Für den Import mit dem NetIQ Import Conversion Export-Dienstprogramm sind LDIF 1-formatierte Dateien erforderlich. Folgende Grundregeln gelten für LDIF 1-Dateien:

  • Die erste Zeile, die kein Kommentar ist, muss „version: 1“ lauten.

  • Auf die Version folgen eine oder mehrere Datensätze.

  • Jeder Datensatz besteht aus Feldern, wobei pro Zeile ein Feld vorhanden ist.

  • Die Zeilen werden durch einen Zeilenvorschub oder eine Kombination aus Zeilenumschaltung/Zeilenvorschub getrennt.

  • Datensätze werden durch eine oder mehrere Leerzeilen getrennt.

  • Es gibt zwei verschiedene Arten von LDIF-Datensätzen: Inhaltsdatensätze und Änderungsdatensätze. Eine LDIF-Datei kann eine unbegrenzte Anzahl von Datensätzen enthalten, sie müssen jedoch alle den gleichen Typ aufweisen. Es ist nicht möglich, Inhaltsdatensätze und Änderungsdatensätze in einer LDIF-Datei zu mischen.

  • Jede Zeile, die mit dem Nummernzeichen (#) beginnt, ist ein Kommentar und wird bei der Verarbeitung der LDIF-Datei ignoriert.

5.1.2 LDIF-Inhaltsdatensätze

Ein LDIF-Inhaltsdatensatz repräsentiert die Inhalte eines vollständigen Eintrags. Es folgt ein Beispiel für eine LDIF-Datei mit vier Inhaltsdatensätzen:

 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

Diese LDIF-Datei besteht aus den folgenden Bestandteilen:

Komponente

Beschreibung

Versionsbezeichner

Die erste Zeile einer LDIF-Datei enthält die Version. Null oder mehr Zeilen sind zwischen dem Doppelpunkt und der Versionsnummer zulässig, die derzeit als "1" definiert ist.

Falls die Versionszeile fehlt, kann jede Anwendung, welche die LDIF-Datei verarbeitet, von der Version 0 für die Datei ausgehen. Es ist außerdem möglich, dass die LDIF-Datei als syntaktisch falsch abgelehnt wird. Dienstprogramme von NetIQ, die LDIF verarbeiten, gehen von der Dateiversion 0 aus, wenn die Versionszeile fehlt.

Bezeichner für den eindeutigen Namen

Die erste Zeile jedes Inhaltsdatensatzes (die Zeilen 2, 6, 11 und 16 im obigen Beispiel) bezeichnet den eindeutigen Namen (DN) des repräsentierten Eintrags.

Der DN-Bezeichner muss eines der folgenden beiden Formate aufweisen:

  • dn: safe_UTF-8_distinguished_name

  • dn:: Base64_encoded_distinguished_name

Zeilenbegrenzungszeichen

Das Zeilentrennzeichen kann ein Zeilenvorschub oder eine Kombination aus Zeilenumschaltung/Zeilenvorschub darstellen. Dies behebt eine allgemeine Inkompatibilität zwischen Linux- und Solaris-Textdateien, die einen Zeilenvorschub als Zeilentrennzeichen verwenden, und MS-DOS*- und Windows-Textdateien, die eine Kombination aus Zeilenumschaltung/Zeilenvorschub als Zeilentrennzeichen verwenden.

Datensatzbegrenzungszeichen

Leerzeilen (die Zeilen 5, 10, 15 und 26 im obigen Beispiel) werden als Datensatzbegrenzungszeichen verwendet.

Jeder Datensatz in einer LDIF-Datei, einschließlich des letzten Datensatzes, muss mit einem Datensatzbegrenzungszeichen beendet werden (eine oder mehrere Leerzeilen). Zwar akzeptieren einige Implementierungen eine LDIF-Datei ohne abschließendes Datensatzbegrenzungszeichen, aber für die LDIF-Spezifikation ist dies erforderlich.

Attributwertbezeichner

Alle anderen Zeilen in einem Inhaltsdatensatz sind Wertbezeichner. Wertbezeichner müssen eines der folgenden drei Formate aufweisen:

  • Attribute description: Wert

  • Attribute description:: Base64_kodierter_Wert

  • Attribute description: < URL

5.1.3 LDIF-Änderungsdatensätze

LDIF-Änderungsdatensätze enthalten Änderungen, die an einem Directory vorgenommen werden sollen. Jede LDAP-Aktualisierungsoperation (Hinzufügen, Löschen, Ändern und DN ändern) können in einem LDIF-Änderungsdatensatz dargestellt werden.

LDIF-Änderungsdatensätze verwenden dasselbe Format für den Bezeichner des eindeutigen Namens, den Attributwertbezeichner und das Datensatzbegrenzungszeichen wie LDIF-Inhaltsdatensätze. (Weitere Informationen hierzu finden Sie unter LDIF-Inhaltsdatensätze.) Das Vorhandensein eines changetype-Felds unterscheidet einen LDIF-Änderungsdatensatz von einem LDIF-Inhaltsdatensatz. Ein changetype-Feld identifiziert die durch den Änderungsdatensatz angegebene Operation.

Für ein changetype-Feld sind die folgenden fünf Formate möglich:

Formular

Beschreibung

changetype:add

Ein Schlüsselwort, das für den Änderungsdatensatz eine LDAP-Operation zum Hinzufügen festlegt.

changetype:delete

Ein Schlüsselwort, das für den Änderungsdatensatz eine LDAP-Operation zum Löschen festlegt.

changetype: moddn

Ein Schlüsselwort, das für den Änderungsdatensatz eine LDAP-Operation zum Ändern des DN festlegt, falls der LDIF-Prozessor an den LDAP-Server als Version 3-Client gebunden ist, oder eine Operation zum Ändern des RDN, falls der LDIF-Prozessor an den LDAP-Server als Version 2-Client gebunden ist.

changetype: modrdn

Ein Synonym für den moddn-Änderungstyp.

changetype:modify

Ein Schlüsselwort, das für den Änderungsdatensatz eine LDAP-Operation zum Ändern festlegt.

Der Änderungstyp "Add"

Ein Änderungsdatensatz vom Typ „Add“ (Hinzufügen) ähnelt einem Inhaltsänderungsdatensatz (siehe LDIF-Inhaltsdatensätze), verfügt jedoch genau vor den Attributwertfeldern zusätzlich über das Feld „changetype: add“.

Alle Datensätze müssen den gleichen Typ aufweisen. Es ist nicht möglich, Inhalts- und Änderungsdatensätze zu mischen.

 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

Der Änderungstyp "Delete"

Ein delete-Änderungsdatensatz bezeichnet das Löschen eines Eintrags, weshalb für einen delete-Änderungsdatensatz nur die Felder für den Bezeichner des eindeutigen Namens und der delete-Änderungstyp erforderlich sind.

Es folgt ein Beispiel für eine LDIF-Datei, mit der die vier Einträge gelöscht werden, die erstellt wurden von der LDIF-Datei im Abschnitt Der Änderungstyp "Add".

WICHTIG:Um Einträge zu löschen, die Sie zuvor hinzugefügt haben, kehren Sie die Reihenfolge der Einträge um. Wenn dies nicht erfolgt, tritt beim Löschvorgang ein Fehler auf, weil die Containereinträge nicht leer sind.

 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

Der Änderungstyp "Modify"

Mit dem modify-Änderungstyp legen Sie das Hinzufügen, Löschen und Ersetzen von Attributwerten für einen bereits vorhandenen Eintrag fest. Änderungen weisen eines der folgenden drei Formate auf:

Element

Beschreibung

add: Attributtyp

Ein Schlüsselwort, das angibt, dass nachfolgende Attributwertbezeichner für den Attributtyp zum Eintrag hinzugefügt werden sollen.

delete: Attributtyp

Ein Schlüsselwort, das angibt, dass Werte des Attributtyps gelöscht werden sollen. Wenn Attributwertbezeichner auf das delete-Feld folgen, werden die angegebenen Werte gelöscht.

Wenn keine Attributwertbezeichner auf das delete-Feld folgen, werden alle Werte gelöscht. Weist das Attribut keine Werte auf, schlägt diese Operation fehl, aber der gewünschte Effekt wird dennoch erzielt, weil für das Attribut keine zu löschenden Werte vorhanden waren.

replace: Attributtyp

Ein Schlüsselwort, das angibt, dass Werte des Attributtyps ersetzt werden sollen. Alle Attributwertbezeichner, die auf das replace-Feld folgen, werden zu den neuen Werten für den Attributtyp.

Wenn keine Attributwertbezeichner auf das replace-Feld folgen, werden die aktuellen Werte durch leere Werte ersetzt (wodurch das Attribut gelöscht wird). Im Gegensatz zum delete-Änderungsbezeichner wird die Ersetzung dennoch erfolgreich ausgeführt, wenn das Attribut keine Werte aufweist. Das Endergebnis ist in beiden Fällen identisch.

Im nachfolgenden Beispiel für einen modify-Änderungstyp wird zum Eintrag cn=Peter Michaels eine zusätzliche Telefonnummer hinzugefügt.

 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

So wie mehrere Änderungen in einer einzigen LDAP-Änderungsanforderung kombiniert werden können, können Sie mehrere Änderungen in einem einzigen LDIF-Datensatz angeben. Mit einer Zeile, die nur einen Bindestrich (-) aufweist, wird das Ende der Attributwertspezifikationen für jeden Änderungsbezeichner markiert.

Die folgende LDIF-Beispieldatei enthält verschiedene Änderungen:

 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

Der Änderungstyp "Modify DN"

Mit dem Änderungstyp "modify DN" können Sie einen Eintrag umbenennen, verschieben, oder beides. Dieser Änderungstyp besteht aus zwei erforderlichen Feldern und einem optionalen Feld.

Feld

Beschreibung

newrdn (erforderlich)

Liefert den neuen Namen für den Eintrag, der beim Verarbeiten dieses Datensatzes zugewiesen wird. Der newrdn-Bezeichner muss eines der folgenden beiden Formate aufweisen:

  • newrdn: safe_UTF-8_relativer_eindeutiger_Name

  • newrdn:: Base64_kodierter_relativer_eindeutiger_Name

Der newrdn-Bezeichner ist in allen LDIF-Datensätzen des Änderungstyps "modify DN" erforderlich.

deleteoldrdn (erforderlich)

Der deleteoldrdn-Bezeichner ist eine Flagge, die anzeigt, ob der alte RDN durch den "newrdn" ersetzt werden oder aber beibehalten werden soll. Dieser Bezeichner weist eines der folgenden Formate auf:

  • deleteoldrdn: 0

    Der alte RDN-Wert sollte nach dem Umbenennen des Eintrags in diesem erhalten bleiben.

  • deleteoldrdn: 1

    Der alte RDN-Wert sollte nach dem Umbenennen des Eintrags gelöscht werden.

newsuperior (optional)

Der newsuperior-Bezeichner liefert den Namen des neuen übergeordneten Objekts, der beim Verarbeiten des "modify DN"-Datensatzes dem Eintrag zugewiesen wird. Der newsuperior-Bezeichner muss eines der folgenden beiden Formate aufweisen:

  • newsuperior: safe_UTF-8_eindeutiger_Name

  • newsuperior:: Base64_kodierter_eindeutiger_Name

Der newsuperior-Bezeichner ist in LDIF-Datensätzen des Änderungstyps "modify DN" optional. Er wird nur verwendet, wenn Sie dem Eintrag ein neues übergeordnetes Objekt zuweisen möchten.

Es folgt ein Beispiel für den Änderungstyp „modify DN“, das veranschaulicht, wie ein Eintrag umbenannt wird:

 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

Es folgt ein Beispiel für den Änderungstyp „modify DN“, das veranschaulicht, wie ein Eintrag verschoben wird:

 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

Es folgt ein Beispiel für den Änderungstyp „modify DN“, das veranschaulicht, wie ein Eintrag gleichzeitig verschoben und umbenannt wird:

 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

WICHTIG:Die RDN-Änderungsoption von LDAP 2 unterstützt das Verschieben von Einträgen nicht. Wenn Sie versuchen, einen Eintrag über die LDIF-Syntax newsuperior mit einem LDAP 2-Client zu verschieben, tritt ein Fehler bei der Anforderung auf.

5.1.4 Zeilenumbruch in LDIF-Dateien

Um eine Zeile in einer LDIF-Datei umzubrechen, fügen Sie einfach ein Zeilentrennzeichen (einen Zeilenvorschub oder eine Kombination aus Zeilenumschaltung/Zeilenvorschub) gefolgt von einem Leerzeichen an der Stelle ein, an der die Zeile umgebrochen werden soll. Wenn die LDIF-Analyse ein Leerzeichen am Beginn der Zeile findet, bedeutet dies, dass die restlichen Daten in der Zeile mit den Daten in der vorherigen Zeile verkettet werden müssen. Das vorangestellte Leerzeichen wird dann verworfen.

Sie sollten Zeilen nicht in der Mitte eines aus mehreren Byte bestehenden UTF-8-Zeichens umbrechen.

Es folgt ein Beispiel für eine LDIF-Datei mit einer umgebrochenen Zeile (siehe Zeile 13 und 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 Darstellung von Passwörtern mit Hash in LDIF-Dateien

Passwörter mit Hash werden in der LDIF-Datei als base64-Daten dargestellt. Nach dem Attributnamen userpassword muss die Bezeichnung der für das Hashing des Passworts verwendeten Verschlüsselung angegeben werden. Diese Bezeichnung muss in geschweifte Klammern „{ }“ gesetzt werden, wie im folgenden Beispiel dargestellt:

Beispiel 1

Für Passwörter mit SHA-Hashing:

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

Beispiel 2

Für Passwörter mit SSHA-Hashing:

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

Beispiel 3

Für Passwörter mit MD5-Hashing:

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