OpenDJ, import-ldif y PosixGroup: All entries must contain a structural objectclass

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.