OpenLDAP Schema Dateien für cn=config aufbereiten

Vor einer Weile habe ich beschrieben, wie man eine Authenfizierung für cn=config von OpenLDAP aktiviert.

Heute möchte ich etwas dazu schreiben, wie man Schema-Dateien in die cn=config importiert.
Wenn man weiß, wie es geht, ist das fast schon erschreckend einfach 😉

Als Beispiel habe ich mir das suse-mailserver.schema herausgesucht. Ich benutze es gerne für Mailserver, bei denen ich Accounts im OpenLDAP verwalten will. Das Schema liegt sowohl bei openSUSE als auch im GitHub Repository von yast2 nur im Schema-Format nach RFC 4517 vor.

Um das File zu konvertieren, muss man nicht viel tun. Es reicht, wenn man ein paar reguläre Ausdrücke beherrscht und schon funktioniert die Konvertierung fast wie von allein.

Dazu sind folgende Regexp notwendig:

  • Tabulatoren durch Leerzeichen ersetzen: 's/\t/ /g' Achtung: 8 Leerzeichen 😉
  • objectidentifier durch olcObjectIdentifier: ersetzen: 's/^objectidentifier/olcObjectIdentifier:/g'
  • attributetype durch olcAttributeTypes: ersetzen: s/^attributetype/olcAttributeTypes:/g
  • objectclass durch olcObjectClasses: ersetzen: s/^objectclass/olcObjectClasses:/g
  • Leere Zeilen löschen: '/^\s*$/d'

Das funktioniert z.B. mit sed mit einem einzigen Aufruf (aus Platzgründen habe ich den One-Liner umgebrochen):

mbpgb:~ gbeine$ sed -i \
> -e 's/\t/        /g' \
> -e 's/^objectidentifier/olcObjectIdentifier:/g' \
> -e 's/^attributetype/olcAttributeTypes:/g' \
> -e 's/^objectclass/olcObjectClasses:/g' \
> -e '/^\s*$/d' suse-mailserver.schema 
mbpgb:~ gbeine$

Zu guter Letzt stellt man dem neu erzeugten LDIF noch den Distiguished Name, Common Name und die Object Class voran. Diese Attribute sind notwendig, damit ein gültiges Objekt in das Verzeichnis geladen werden kann. Das Attribut cn wird im Distiguished Name verwendet, beide Werte müssen also übereinstimmen.
Wichtig ist, dass zwischen dem Distignuished Name und all den Attributen keine Leerzeilen auftreten. Kommentare, mit # eingeleitet, sind zulässig; bei Leerzeilen bricht das Laden des LDIF aber ab.

dn: cn=mailserver,cn=schema,cn=config
objectClass: olcSchemaConfig
cn: mailserver

Ein auf diesem Weg vollständig konvertiertes Schema kann man sich in meinem GitHub Repository anschauen: suse-mailserver.schema.ldif

Referenzen

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.