Si estamos migrando datos entre directorios, puede ser habitual encontrar problemas relacionados con incompatibilidad de los schema entre ambos, ausencia de ciertos atributos, clases de objetos, etc. En este caso, el error que se me ha presentado al migrar desde un directorio de Sun (parece ser que es muy común también desde OpenLDAP) a OpenDJ coincidía directamente con una diferencia en la especificación de schema en la RFC 2307 y su posterior borrador rfc2307bis. Gracias al artículo del gurú de OpenDJ Ludo, todo ha sido más sencillo de solucionar.
Concretamente, al hacer un import del ldif en el servidor de OpenDJ todo se importaba correctamente excepto los grupos (bueno, no todo, he tenido que migrar un schema…). El error que recibía en la salida del log era el siguiente:
LDAP: error code 65 – Entry cn=grupo01,ou=groups,o=foo violates the Directory Server schema configuration because it does not include a structural objectclass. All entries must contain a structural objectclass
Todas las entradas deben contener un objectclass estructural. La definición del objeto PosixGroup en los directorios que soportan el schema modificado de la RFC 2307bis así lo tienen, pero no los directorios de los que siguen fieles a la RFC 2307, entre ellos el SunDS del que estaba migrando.
Para solucionarlo sin tener que tocar los schema del servidor OpenDJ, es tan sencillo como añadir a cada entrada del ldif afectada (en este caso los grupos, que contienen el objeto PosixGroup) el siguiente objectClass:
objectClass: namedObject
Con lo que si antes una entrada era así:
dn: cn=grupo01,ou=groups,o=foo cn: Grupo01 objectClass: top objectClass: posixGroup gidNumber: 2000
Quedaría así:
dn: cn=grupo01,ou=groups,o=foo cn: Grupo01 objectClass: top objectClass: posixGroup objectClass: namedObject gidNumber: 2000
Importamos de nuevo el ldif con import-ldif y solucionado. También se podría eliminar el schema 04-rfc2307bis.ldif para evitar la modificación del ldif y dejar de ser estrictos con este borrador y pasar a serlo con la RFC 2307. Prefiero la primera opción.