Mar 15

Jugando a importar usuarios LDAP en Liferay

Logo LiferayLiferay se puede configurar para que busque los usuarios en un directorio LDAP. La configuración se hace desde la ventana de administración de Liferay y es más o menos sencilla si se conoce cómo funciona LDAP.

Sin embargo y como ya estamos acostumbrados, no todo es tan fácil y siempre hay pegas, peros y contras.

Entre los datos de los usuarios de Liferay (nombre, correo, teléfono, etc) hay un campo denominado Screen Name que liferay usará en la URL de las páginas personales del usuario. Si el Screen Name es "federico", la URL de las páginas personales de Federico será algo como http://un.servidor.liferay/…./federico/….  Por ello, liferay verifica que lo que se mete en este campo es amigable para una URL y es muy estricto con los caracteres que admite. No admite acentos, ni eñes …. ni espacios en blanco ni incluso subrayados _  . Tampoco permite que dos usuarios distintos tengan el mismo Screen Name.

Cuando importamos usuarios de LDAP sobre Liferay tenemos que indicar qué campo de LDAP será el Screen Name y lo normal es que Liferay use el CN del usuario o el UID, que son los que identifican un usuario y tenemos garantía en LDAP de que son distintos. Y aquí empiezan los problemas. LDAP admite de todo en sus  campos, espacios, acentos, eñes y gurruños … pero Liferay no. La mejor forma de tener éxito creando usuarios en LDAP para Liferay es asegurarse que el campo CN o UID (el que elijamos para Screen Name de Liferay) cumple con lo exigido por Liferay.

Y si no cumple, podemos hacer ciertas "trampas".

En primer lugar, entre las ventanas de administración de Liferay para los temas de usuarios hay un check para "auto generar nombres de usuario" (control panel -> Portal Settings -> Users en la versión 6.0.6 de Liferay). Podemos marcarlo y luego importar los usuarios de LDAP. Esto hará que Liferay genere los Screen Names de forma correcta. Pero nos abre un segundo problema. Cuando Liferay intente buscar al usuario en LDAP, no lo va a encontrar, porque usará como CN o UID el nombre auto generado y no el real de LDAP. Así que debemos dar un segundo paso, un poco chapucero y que no debe hacerse nunca … salvo que no quede otro remedio.

Si son muchos usuarios, nos vamos a la base de datos de Liferay y en la tabla user_ están los screen names auto generados por Liferay. Con un pequeño programita o script que nos hagamos, podemos ir leyendo los CN o UID de LDAP e ir haciendo los update correspondientes en la base de datos de Liferay para poner como Screen Name el valor CN o UID de LDAP.

Si son pocos usuarios, podemos editar los Screen Names desde el mismo Liferay … .pero tenemos otro pequeño truco que hacer antes. Hay que decirle a Liferay que sea "liberal" a la hora de admitir Screen Names. Hay una propiedad en portal.properties (o portal-ext.properties) que se puede cambiar 

# Este es el valor que tiene por defecto en portal.properties
users.screen.name.validator=com.liferay.portal.security.auth.DefaultScreenNameValidator

# Y este es el que debemos poner en portal-ext.properties
users.screen.name.validator=com.liferay.portal.security.auth.LiberalScreenNameValidator
 

Con esto ya podemos poner el Screen Name que nos dé la gana a cada usuario desde el editor de Liferay, así que podemos ir cambiándolos uno a uno para poner los CN o UID reales de LDAP. Esta propiedad no afecta a la importación de usuarios de LDAP, por lo que no sirve de nada fijarla antes de importar los usuarios.

Una vez hecha la importación y cambiados los Screen Names, bien en base de datos directamente, bien desde el editor de Liferay, tenemos que acordarnos de desmarcar la casilla de autogenerar Screen Names.

Listo, usuarios importados. Y a rezar cuando alguien quiera ver sus páginas personales y le salga una URL de lo más raro.

 

Entradas relacionadas:

2 Responses to “Jugando a importar usuarios LDAP en Liferay”

  1. change-pass Says:

    #!/bin/bash

    echo “vas a cambiar la contraseña de un usuario del directorio ldap”

    read -p “introduce el uid del usuario: ” USUARIO
    read -p “introduce la unidad organizativa del usuario: ” UO
    read -p “introduce la contraseña del usuario $USUARIO: ” CONTRA
    if [ $USUARIO != "" ]; then
    if [ $UO != "" ]; then
    ldappasswd -w asixasix -D cn=admin,dc=iesmvm,dc=com -x cn=USUARIO,ou=UO,dc=iesmvm,dc=com -s $CONTRA
    echo $?” este era el error1″

    #controlar el error 32: usuario no existe!!!!
    else
    ldappasswd -w asixasix -D cn=admin,dc=iesmvm,dc=com -x cn=USUARIO,dc=iesmvm,dc=com -s $CONTRA
    echo $?” este era el error2″
    fi
    else
    echo “no has introducido el usuario”
    fi

  2. delete-user Says:

    #!/bin/bash

    echo “vas a eliminar un usuario del directorio ldap”

    read -p “introduce el uid del usuario” USUARIO
    read -p “introduce la unidad organizativa del usuario” UO

    if [ $USUARIO != "" ]; then
    if [ $UO != "" ]; then
    ldapdelete -x -v -w asixasix -D cn=admin,dc=iesmvm,dc=com cn=$USUARIO,ou=$UO,dc=iesmvm,dc=com

    echo $?” este era el error1″
    #controlar el error 32: usuario no existe!!!!

    else
    echo “ldapdelete -x -v -w asixasix -D ’cn=admin,dc=iesmvm,dc=com’ ‘uid=$USUARIO,dc=iesmvm,dc=com’”
    ldapdelete -x -v -w asixasix -D cn=admin,dc=iesmvm,dc=com cn=$USUARIO,dc=iesmvm,dc=com
    echo $?” este era el error2″
    fi
    else echo “no has introducido el usuario”
    fi

Leave a Reply