Migration de schéma Sun DSEE vers OpenLDAP

Comme vu précédemment (https://www.vincentliefooghe.net/content/migration-sun-dsee-vers-openld…) la migration Sun DSEE vers OpenLDAP nécessite une phase d'adaptation des schémas spécifiques.

Si on utilise des attributs ou classes d'objets propres à la structure (ce qui est bien souvent le cas) il faudra adapter la définition pour OpenLDAP.

Exemple d'un fichier 99user.ldif :

dn: cn=schema
objectClass: top
objectClass: ldapSubentry
objectClass: subschema
cn: schema
aci: (target="ldap:///cn=schema")(targetattr !="aci")(version 3.0;acl "anonymo
 us, no acis"; allow (read, search, compare) userdn = "ldap:///anyone";)
modifiersName: cn=directory manager
modifyTimestamp: 20151011134724Z
attributeTypes: ( ExpirationDate-oid NAME 'ExpirationDate'  SYNTAX 1.3.6.1.4.1
 .1466.115.121.1.24 SINGLE-VALUE X-ORIGIN 'user defined' )
attributeTypes: ( issuerNUM-oid NAME 'issuerNUM'  SYNTAX 1.3.6.1.4.1.1466.115.
 121.1.15 SINGLE-VALUE X-ORIGIN 'user defined' )
attributeTypes: ( emailSent-oid NAME 'emailSent'  SYNTAX 1.3.6.1.4.1.1466.115.
 121.1.15 SINGLE-VALUE X-ORIGIN 'user defined' )
attributeTypes: ( affiliate-oid NAME 'affiliate'  SYNTAX 1.3.6.1.4.1.1466.115.
 121.1.15 SINGLE-VALUE X-ORIGIN 'user defined' )
objectClasses: ( persoGuestPerson-oid NAME 'persoGuestPerson' SUP inetorgperso
 n STRUCTURAL MUST ( affiliate $ ExpirationDate $ emailSent $ issuerNUM ) X-O
 RIGIN 'user defined' )
objectClasses: ( persopartnerperson-oid NAME 'persopartnerperson' SUP inetorgp
 erson STRUCTURAL MUST ( issuerNUM $ affiliate $ ExpirationDate $ emailSent )
  X-ORIGIN 'user defined' )
nsSchemaCSN: 561a686c000000000000

Le fichier contient une ACI (dans l'annuaire de Sun, les ACI sont potentiellement positionnées au niveau où elles s'appliquent), la définition des attributs (attributeTypes) et des classes d'objets (objectClasses).

Dans la syntaxe OpenLDAP, les noms diffèrent quelque peu :

  • olcAttributeTypes
  • olcObjectClasses

OpenLDAP étant plus strict, si une classe d'objet est définie comme ABSTRACT, alors elle doit avoir un SUP positionné à top.

On aura donc quelque chose du genre :

olcObjectClasses: (1.3.6.1.4.1.0.1.10.13 NAME 'customOtpNomadePerson' SUP top ABSTRACT MAY (...)

Autre particularité : l'annuaire de Sun (et pas mal d'autres, tels que OpenDJ, IBM ISDS) permettent d'utiliser des OID alphabetiques. OpenLDAP respecte à la lettre les RFC (RFC4512) qui n'autorise normalement que des OID numériques.

On peut faire une demande à l'IANA. On peut également utiliser un OID de la forme 1.3.6.1.4.1.X, si l'OID n'est pas utilisé à l'extérieur de la société.

En convertissant, on aura donc un fichier LDIF de la forme suivante :

dn: cn=Custom,cn=schema,cn=config
objectClass: olcSchemaConfig
cn: Custom
olcAttributeTypes: (1.3.6.111.1.1.1 NAME 'ExpirationDate'  SYNTAX 1.3.6.1.4.1.1466.115.121.1.24 SINGLE-VALUE X-ORIGIN 'user defined' )
olcAttributeTypes: (1.3.6.111.1.1.2 NAME 'issuerNUM'  SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE X-ORIGIN 'user defined' )
olcAttributeTypes: (1.3.6.111.1.1.3 NAME 'emailSent'  SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE X-ORIGIN 'user defined' )
olcAttributeTypes: (1.3.6.111.1.1.4 NAME 'affiliate'  SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE X-ORIGIN 'user defined' )
olcObjectClasses: (1.3.6.111.0.1.2.1 NAME 'persoGuestPerson' SUP inetorgperson STRUCTURAL MUST ( affiliate $ ExpirationDate $ emailSent $ issuerNUM ) X-ORIGIN 'user defined' )
olcObjectClasses: (1.3.6.111.0.1.2.2 NAME 'persopartnerperson' SUP inetorgperson STRUCTURAL MUST ( issuerNUM $ affiliate $ ExpirationDate $ emailSent ) X-ORIGIN 'user defined' )

Le schéma peut ensuite être ajouté dans OpenLDAP (voir https://www.vincentliefooghe.net/content/ajouter-un-sch%C3%A9ma-sp%C3%A…)

Par exemple :

ldapadd -Y EXTERNAL -H ldapi:/// -f olcSchemaCustom.ldif

SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "cn=guest,cn=schema,cn=config"

Pour simplifier les choses, j'ai fait un programme en perl, qui permet de gérer les transformations facilement, et de générer des OID numériques, à partir d'un OID "de base"

perl schemaDSEE2openldap.pl -f 99user.ldif -n Custom -a 1.3.6.111.1.1 -o 1.3.6.111.0.1.2

C'est cadeau !

 

Catégorie