Modificar un esquema LDAP

Os comento mi situación. Tengo un servidor qmail con qmail-ldap y vpopmail.

qmail-ldap tiene su propio esquema LDAP y vpopmail tiene otro distinto. Ambos son incompatibles entre sí, por lo que estoy usando el de vpopmail, que es el que me era imprescindible.

El problema ha venido a la hora de quere usar una funcionalidad del parche qmail-ldap. Dicha funcionalidad hace uso de los atributos uid o mailAlternateAddress (cualquiera de ellos). El problema está en que esos atributos están definidos en el esquema de qmail-ldap pero no en el esquema de vpopmail al ser algo distintos.

Mi conocimiento respecto a la modificación de esquemas es nulo, por lo que no se si lo que he intentado ha sido una burrada.

He intentado solucionarlo copiando el bloque que referencia al atributo mailAlternateAddress del esquema qmail-ldap al esquema de vpopmail (supongo que será una burrada y por eso no funciona).

Aparte de eso, que en caso de que sirviera dudo que funcione, ya que vpopmail no tendría en cuenta dicho atributo y por lo tanto no escribiría el valor adecuado en él (esto es una suposición), lo único que se me ocurre es definir un atributo que se autogenere con cada registro (no se si esto se puede hacer en ldap, sólo he usado BD relacionales como oracle, mysql...etc, es la primera vez que trabajo con LDAP). El atributo debería generar su valor mediante composicion, usando otros atributos que si genera vpopmail: qmailUID@qmaildomain

No se... ahí queda eso por si alguien puede ayudarme.

Detalles:
------------------------------

El bloque que define el atributo (en el esquema qmail-ldap) es:

attributetype ( 1.3.6.1.4.1.7914.1.2.1.4 NAME 'mailAlternateAddress'
DESC 'Secondary (alias) mailaddresses for the same user'
EQUALITY caseIgnoreIA5Match
SUBSTR caseIgnoreIA5SubstringsMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} )

Y el esquema completo que uso (el de vpopmail) es el siguiente (es en este esquema donde copio el bloque anterior para intentar que los registros dispongan del atributo necesario):

attributetype ( 1.3.6.1.4.1.8868.3.1.2
NAME 'qmailGID'
DESC 'qmail group id'
EQUALITY caseIgnoreIA5Match
SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{100}
SINGLE-VALUE )

attributetype ( 1.3.6.1.4.1.8868.3.1.3
NAME 'qmailUID'
DESC 'qmail userid'
EQUALITY caseIgnoreIA5Match
SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{100}
SINGLE-VALUE )

attributetype ( 1.3.6.1.4.1.8868.3.1.4
NAME 'qmaildomain'
DESC 'qmail Domain'
EQUALITY caseIgnoreIA5Match
SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{100}
SINGLE-VALUE )
attributetype ( 1.3.6.1.4.1.8868.3.1.6
NAME 'mailQuota'
DESC 'qmail quota'
EQUALITY caseIgnoreIA5Match
SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{100}
SINGLE-VALUE )
attributetype ( 1.3.6.1.4.1.8868.3.1.7
NAME 'mailMessageStore'
DESC 'qmail Store'
EQUALITY caseIgnoreIA5Match
SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{100}
SINGLE-VALUE )
attributetype ( 1.3.6.1.4.1.8868.3.1.8
NAME 'clearPassword'
DESC 'qmail Clear Password for APOP'
EQUALITY octetStringMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.40{128}
SINGLE-VALUE )

objectclass ( 1.3.6.1.4.1.8868.3.1
NAME 'qmailUser'
DESC 'qmail local mail recipient'
SUP ( top $ person $ organizationalPerson )
MAY ( qmailGID $ qmailUID $ qmaildomain $
mailQuota $ mailMessageStore $ clearPassword $
uid $ name $ sn $ cn ) )

Your rating: None

No es cuestión de modificar

No es cuestión de modificar el esquema, porque como tú mismo apuntas si el software no sabe que ese atributo está ahí, no lo va a usar.

Se me ocurren dos cosas:

- un proceso automático que cada X tiempo "sincronice" los atributos propios de vpopmail y qmail-ldap
- en qmail-ldap era relativamente fácil cambiar el nombre de los atributos que utiliza, estaban como #defines en un .h que lo tocabas, recompilabas y ya está (no recuerdo el fichero en concreto, mira la documentación o pásate por la lista de correo). Mucha gente lo usaba p.ej. para aprovechar ciertos atributos del Active Directory de Windows e integrarlo con qmail-ldap. Si los atributos de los que hablas en vpopmail y qmail-ldap son equivalentes (mismo tipo, contenido, función....) y sólo cambia el nombre, modifica y recompila qmail-ldap para que utilice los de vpopmail.

Suerte :)

Vaya, no iba mal encaminado

Vaya, no iba mal encaminado entonces.

Y respecto a la posibilidad de definir un atributo que se autogenere, ¿no es posible hacerlo en ldap? Con eso evitaría tener que lanzar el script que actualice los campos, que por otra parte no tengo ni idea de cómo hacerlo, pero supongo que podré buscar algún ejemplo.

De momento voy a intentarlo modificando el código fuente como me has dicho. O mejor dicho voy a ver si es posible hacerlo.

¡Muchas gracias por la respuesta!

Vaya chasco. Después de

Vaya chasco. Después de tenerlo todo listo (ya localicé los defines en el parche), resulta que el campo uid se usa tanto en vpopmail como en qmail-ldap, de modo que el problema que tengo creo que no es por culpa del esquema...

Me va a tocar tirar de logs a fondo a ver porqué motivo la verificación de usuario/remitente siempre da "no existe".

Como ya dije, y por eso abrí este hilo, pensaba que era debido a que qmail-ldap estaba buscando un atributo que no existía en el esquema de vpopmail, pero ahora no creo que sea de eso. qmail-ldap (en concreto qmail-verify, que es la parte que se encarga de la verificación) realiza una búsqueda en el esquema por los atributos uid o mailAlternateAddress, y el atributo uid existen en ambos esquemas y con valores equivalentes.

En fin... seguiré buscando la solución (si la encuentro explicaré cómo, por si le sirve a alguien).

Gracias en cualquier caso

Novedades: Según la

Novedades:

Según la documentación: http://www.qmail-ldap.org/wiki/Qmail-verify

qmail-verify utiliza los atributos uid (http://www.qmail-ldap.org/wiki/LDAP_UID) o mailAlternateAddress (http://www.qmail-ldap.org/wiki/LDAP_MAILALTERNATE), cualquiera de ellos.

Por eso me descolocó el hecho de ver posteriormente que vpopmail también dispone del atributo uid y a pesar de eso no funcionaba. Mi idea desde el principio era que al ser distintos esquemas, no encontraba lo que buscaba por tener distintos nombres de los atributos necesarios, pero eso desmontaba mi teoría ya que según la documentación.

Después de revisar el log, creo que estaba en lo cierto, ya que a pesar de lo que pone en la documentación, revisando el log veo que está buscando por los atributos mail y mailAlternateAddress (como bien me dijo en su momento Salvatore Toribio en una conversación por mail) y dichos campos no están en el esquema de vpopmail.

Con esto así y a menos que alguien me indique una forma de autogenerar un atributo automáticamente cada vez que se crea un registro en una BD ldap, creo que la única solución será usar un script que sincronice el valor del atributo mail que habrá que crear a mano en el esquema de vpopmail.

Modificar el nombre del

Modificar el nombre del atributo en los define de qmail-ldap antes de compilar no serviría porque no hay ningún atributo 100% equivalente en el esquema de vpopmail. qmail-ldap busca un atributo cuyo valor tenga la forma usuario@dominio, y en el esquema de vpopmail esos datos se guardan por separado (usuario y dominio, cada uno en su atributo).

A ver si alguien me puede

A ver si alguien me puede explicar cómo hacer el script:

Un registro en mi actual esquema (el de vpopmail) tiene la siguiente forma:

dn: uid=prueba,ou=dominio.es,o=vpopmail
entryUUID: 51f1a6ea-5aj4-1029-9f6c-a776c37889541
creatorsName: cn=vpopmanager,o=vpopmail
createTimestamp: 20050411125207Z
uid: prueba
userPassword:: e0KXJJRkxiiiaRWdaeiQ4djKODLloos2lvKKduwoOOpqlLLsS56
qmailUID: 1
qmailGID: 0
qmaildomain: prueba
mailMessageStore: /home/vpopmail/domains/dominio.es/prueba
mailQuota: 5485760S
clearPassword: prueba
objectClass: qmailUser
entryCSN: 20050411125254Z#000002#00#000000
modifiersName: cn=vpopmanager,o=vpopmail
modifyTimestamp: 20050411125254Z

Lo que habria que hacer es insertar un nuevo atributo llamado mail o mailAlternateAddress que se forme mediante el atributo uid y el ou del dn de modo que quede así: prueba@dominio.es.

Necesito entonces, modificar el esquema añadiendo el nuevo atributo (mail o mailAlternateAddress), hacer un script que me inserte ese atributo para todos los registros ya creado y otro (quizás el mismo) que me permita ir sincronizandolo cuando cree nuevas cuentas.

(lo he borrado, se publicó

(lo he borrado, se publicó dos veces)

¿nadie me sabe echar un

¿nadie me sabe echar un cable?