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 !