🧬Schemata

Das Schema ist der Bauplan des Verzeichnisses: Es definiert Attributtypen (Name, Syntax, Vergleichsregeln) und Objektklassen (welche Attribute Pflicht und erlaubt sind). Jede Definition hat eine weltweit eindeutige OID. Der Browser enthält alle Definitionen aus den OpenLDAP-Dateien core, cosine, inetorgperson und nis sowie die wichtigsten in slapd eingebauten.

🔬Schema-Browser

inetOrgPerson

inetorgperson.schema
objectclass ( 2.16.840.1.113730.3.2.2 NAME 'inetOrgPerson' DESC 'RFC2798: Internet Organizational Person' SUP organizationalPerson STRUCTURAL MAY ( audio $ businessCategory $ carLicense $ departmentNumber $ displayName $ employeeNumber $ employeeType $ givenName $ homePhone $ homePostalAddress $ initials $ jpegPhoto $ labeledURI $ mail $ manager $ mobile $ o $ pager $ photo $ roomNumber $ secretary $ uid $ userCertificate $ x500uniqueIdentifier $ preferredLanguage $ userSMIMECertificate $ userPKCS12 ) )
OID
2joint-iso-itu-t.16.840country US.1.113730Netscape.3.2Netscape-Objektklassen.2
NAMEinetOrgPerson
DESCRFC2798: Internet Organizational Person
SUPorganizationalPerson
STRUCTURALlegt fest, was der Eintrag ist (genau eine Kette)
MAYaudio, businessCategory, carLicense, departmentNumber, displayName, employeeNumber, employeeType, givenName, homePhone, homePostalAddress, initials, jpegPhoto, labeledURI, mail, manager, mobile, o, pager, photo, roomNumber, secretary, uid, userCertificate, x500uniqueIdentifier, preferredLanguage, userSMIMECertificate, userPKCS12

🧬 Vererbung: von top bis inetOrgPerson

Jede Ebene erbt MUST und MAY aller Oberklassen. Klick auf ein Attribut öffnet seine Definition.

1
topABSTRACT2.5.6.0
2
personSTRUCTURAL2.5.6.6
3
organizationalPersonSTRUCTURAL2.5.6.7
4
inetOrgPersonSTRUCTURAL2.16.840.1.113730.3.2.2
Insgesamt: 3 Pflichtattribute (sn, cn, objectClass) und 48 erlaubte Attribute.

📚 Quellen: RFC 4512 – LDAP: Directory Information Models · RFC 4519 – LDAP: Schema for User Applications · RFC 2798 – Definition of the inetOrgPerson Object Class · RFC 2307 – An Approach for Using LDAP as a Network Information Service · Admin Guide: Schema Specification

📜Aufbau einer Definition

attributetype ( 2.5.4.3                  ← OID
    NAME ( 'cn' 'commonName' )           ← Namen (Aliase)
    DESC 'RFC2256: common name(s) …'     ← Beschreibung
    SUP name )                           ← erbt EQUALITY, SUBSTR, SYNTAX

objectclass ( 2.5.6.6
    NAME 'person'
    DESC 'RFC2256: a person'
    SUP top STRUCTURAL                   ← Art der Klasse
    MUST ( sn $ cn )                     ← Pflicht
    MAY ( userPassword $ telephoneNumber $ seeAlso $ description ) )
💡 slapd.conf oder cn=config
In slapd.conf beginnt die Definition mit attributetype/objectclass, in cn=config ist sie ein Wert von olcAttributeTypes/olcObjectClasses – slapd setzt dort ein {0} davor, um die Reihenfolge festzuhalten.
⚠️ posixGroup: STRUCTURAL oder AUXILIARY?
Im nis.schema (RFC 2307) ist posixGroup STRUCTURAL – deshalb lässt sie sich nicht mit groupOfNames kombinieren. Der nie verabschiedete Entwurf rfc2307bis macht sie AUXILIARY. Welches Schema geladen ist, entscheidet, welche Gruppen möglich sind.
✅ Warum (cn>=M) nichts findet
name und damit cn haben keine ORDERING-Regel. Größer/kleiner-Filter ergeben für cn immer Undefined – ausprobieren im Filter-Labor.

📚 Quellen: RFC 4512 – LDAP: Directory Information Models · slapd-config(5)

🔤Syntaxen

Die Syntax legt fest, welche Werte gültig sind. Die OID-Endung …115.121.1.x stammt aus RFC 4517; ein Längenhinweis wie {64} ist nur eine Empfehlung an Clients.
SyntaxOIDBeispielErklärungpassende Regeln
Directory String1.3.6.1.4.1.1466.115.121.1.15Müller & SöhneUTF-8-Text, mindestens ein Zeichen. Der Normalfall für Namen und Beschreibungen.caseIgnoreMatch · caseIgnoreOrderingMatch · caseIgnoreSubstringsMatch
IA5 String1.3.6.1.4.1.1466.115.121.1.26anna@example.orgNur ASCII (International Alphabet 5) – z. B. mail, homeDirectory.caseIgnoreIA5Match · caseIgnoreIA5SubstringsMatch
Printable String1.3.6.1.4.1.1466.115.121.1.44DE-4711Eingeschränkter Zeichensatz: Buchstaben, Ziffern, Leerzeichen und ' ( ) + , - . / : ? =caseIgnoreMatch · caseIgnoreSubstringsMatch
Integer1.3.6.1.4.1.1466.115.121.1.2710001Ganze Zahl in Dezimalschreibweise, ohne führende Nullen.integerMatch · integerOrderingMatch
Boolean1.3.6.1.4.1.1466.115.121.1.7TRUEGenau „TRUE“ oder „FALSE“ (Großbuchstaben).booleanMatch
Distinguished Name1.3.6.1.4.1.1466.115.121.1.12uid=anna,ou=people,dc=example,dc=orgEin DN in der Schreibweise nach RFC 4514 – z. B. member, manager.distinguishedNameMatch
Generalized Time1.3.6.1.4.1.1466.115.121.1.2420260929120000ZZeitpunkt JJJJMMTTHHMMSS mit Zeitzone (Z = UTC).generalizedTimeMatch · generalizedTimeOrderingMatch
Numeric String1.3.6.1.4.1.1466.115.121.1.360815 4711Nur Ziffern und Leerzeichen.numericStringMatch · numericStringOrderingMatch · numericStringSubstringsMatch
Telephone Number1.3.6.1.4.1.1466.115.121.1.50+49 30 23125 101Telefonnummer (E.123); Leerzeichen und Bindestriche zählen beim Vergleich nicht.telephoneNumberMatch · telephoneNumberSubstringsMatch
Octet String1.3.6.1.4.1.1466.115.121.1.40(beliebige Bytes)Beliebige Oktette – z. B. userPassword. Vergleich Byte für Byte.octetStringMatch · octetStringOrderingMatch
OID1.3.6.1.4.1.1466.115.121.1.382.5.6.6 oder personObjekt-Identifikator, numerisch oder als Name – z. B. objectClass.objectIdentifierMatch
Postal Address1.3.6.1.4.1.1466.115.121.1.41Musterweg 1$12345 MusterstadtZeilen durch „$“ getrennt.caseIgnoreListMatch · caseIgnoreListSubstringsMatch
Country String1.3.6.1.4.1.1466.115.121.1.11DEZweistelliger Ländercode nach ISO 3166.–
JPEG1.3.6.1.4.1.1466.115.121.1.28(Bilddaten)JPEG-Bild – in LDIF immer Base64 (::).–
Name And Optional UID1.3.6.1.4.1.1466.115.121.1.34cn=Admins,dc=example,dc=org#'0101'BDN mit optionaler Bitfolge – für uniqueMember.uniqueMemberMatch

📚 Quellen: RFC 4517 – LDAP: Syntaxes and Matching Rules

⚖️Matching-Regeln

EQUALITY für (attr=wert), ORDERING für >= und <=, SUBSTR für Sternchen-Suchen. Fehlt die Regel, ist der Filter Undefined.
caseIgnoreMatchEQUALITY
2.5.13.2

Groß-/Kleinschreibung egal, Leerzeichen normalisiert (RFC 4518).

caseIgnoreOrderingMatchORDERING
2.5.13.3

Sortierung ohne Beachtung der Groß-/Kleinschreibung.

caseIgnoreSubstringsMatchSUBSTR
2.5.13.4

Teilstring-Suche (*) ohne Groß-/Kleinschreibung.

caseExactMatchEQUALITY
2.5.13.5

Groß-/Kleinschreibung zählt.

caseExactOrderingMatchORDERING
2.5.13.6

Sortierung mit Groß-/Kleinschreibung.

caseExactSubstringsMatchSUBSTR
2.5.13.7

Teilstring-Suche mit Groß-/Kleinschreibung.

caseIgnoreIA5MatchEQUALITY
1.3.6.1.4.1.1466.109.114.2

Wie caseIgnoreMatch, aber für IA5-(ASCII-)Werte.

caseExactIA5MatchEQUALITY
1.3.6.1.4.1.1466.109.114.1

ASCII, Groß-/Kleinschreibung zählt.

caseIgnoreIA5SubstringsMatchSUBSTR
1.3.6.1.4.1.1466.109.114.3

Teilstring-Suche für IA5-Werte.

integerMatchEQUALITY
2.5.13.14

Zahlenvergleich (0010 ist keine gültige Integer-Syntax).

integerOrderingMatchORDERING
2.5.13.15

Numerische Ordnung – nötig für (uidNumber>=1000).

booleanMatchEQUALITY
2.5.13.13

TRUE/FALSE.

distinguishedNameMatchEQUALITY
2.5.13.1

Vergleich normalisierter DNs.

objectIdentifierMatchEQUALITY
2.5.13.0

Name und numerische OID sind gleichwertig.

octetStringMatchEQUALITY
2.5.13.17

Byteweiser Vergleich.

octetStringOrderingMatchORDERING
2.5.13.18

Byteweise Ordnung.

numericStringMatchEQUALITY
2.5.13.8

Ziffernfolgen, Leerzeichen zählen nicht.

numericStringOrderingMatchORDERING
2.5.13.9

Ordnung von Ziffernfolgen.

numericStringSubstringsMatchSUBSTR
2.5.13.10

Teilstrings in Ziffernfolgen.

telephoneNumberMatchEQUALITY
2.5.13.20

Leerzeichen und Bindestriche werden ignoriert.

telephoneNumberSubstringsMatchSUBSTR
2.5.13.21

Teilstrings in Telefonnummern.

generalizedTimeMatchEQUALITY
2.5.13.27

Gleicher Zeitpunkt.

generalizedTimeOrderingMatchORDERING
2.5.13.28

Früher/später – z. B. (modifyTimestamp>=20260101000000Z).

caseIgnoreListMatchEQUALITY
2.5.13.11

Postanschriften zeilenweise ohne Groß-/Kleinschreibung.

caseIgnoreListSubstringsMatchSUBSTR
2.5.13.12

Teilstrings in Postanschriften.

uniqueMemberMatchEQUALITY
2.5.13.23

Für uniqueMember (DN + optionale UID).

📚 Quellen: RFC 4517 – LDAP: Syntaxes and Matching Rules · RFC 4518 – LDAP: Internationalized String Preparation