Vtiger es un CRM de código abierto muy potente que trata de acercarse  a grandes crms como salesforce y SugarCRM, pero en esta ocasión veremos como autentificarlo hacia LDAP.

Con un gran compañero de la compañía Gabo, logramos hacer la autentificación continuación describo los pasos para lograrla.

Para lograr la autentificación debemos usar los archivos de autentificación de Vtiger de 5.x,  estos archivos los encuentran en github.

https://github.com/braybaut/ldap-vtiger

Los archivos Ldap.php y config.ldap.php deben quedar en la siguiente ruta:

/var/www/html/vtigercrm/include/ldap/

Nota: debe editar el archivo Config.ldap.php y adicionar la configuración de su servidor LDAP

la ruta puede variar dependiendo de donde tenga ubicado los archivos de  vtiger.

A continuación debemos hacer unos cambios en el archivo:

/var/www/html/vtigercrm/modules/Users/Users.php

Este archivo es el encargado de hacer la autentificación de los usuarios, aquí lo que vamos  hacer es llamar  los archivos Ldap.php y Config.ldap.php para que lea las variables y posteriormente lograr la autentificación, igualmente haremos un cambio en una función para que no se presenten problemas.

Adicionar las siguientes dos lineas al final de los require once , aproximadamente en la linea 41:

require_once 'include/ldap/config.ldap.php';
require_once 'include/ldap/ldap.php';

La función dologin la cual es:

function doLogin($user_password) {
        global $AUTHCFG;
        $usr_name = $this->column_fields["user_name"];

        switch (strtoupper($AUTHCFG['authType'])) {
            case 'LDAP':
                $this->log->debug("Using LDAP authentication");
                require_once('modules/Users/authTypes/LDAP.php');
                $result = ldapAuthenticate($this->column_fields["user_name"], $user_password);
                if ($result == NULL) {
                    return false;
                } else {
                    return true;
                }
                break;

Debe ser cambiada por esta:

function doLogin($user_password) {
        global $AUTHCFG;
        $usr_name = $this->column_fields["user_name"];

        // Allow the 'admin' always to log in independent from the LDAP server
        $usr_list = $AUTHCFG['sql_accounts'];

        if (in_array(strtolower($usr_name), $usr_list))
            $AUTHCFG['authType'] = 'SQL';

        //SEAN TSANG PATCH START - User must exists in database first
        $query = "SELECT * from $this->table_name where user_name=?";
               $result = $this->db->requirePsSingleResult($query, array($usr_name), false);
              if (empty($result)) return false;
        //SEAN TSANG PATCH END------------------------------------------

        switch (strtoupper($AUTHCFG['authType'])) {
            case 'LDAP':
                $this->log->debug("Using LDAP authentication");
                require_once('include/ldap/Ldap.php');
                return ldapAuthenticate($this->column_fields["user_name"], $user_password);

Después de estos cambios la autentificación desde LDAP debe funcionar.

Importante:

Automáticamente el no autentificara con los usuarios que esten el el servidor LDAP, Para que funcione debe crear los usuarios en vtiger con  usuario, contraseña, correo electrónico, etc  (NO IMPORTA LA CONTRASEÑA QUE ASIGNE AL CREAR LA CUENTA,  AL AUTENTIFICARSE CON UN USUARIO, VTIGER BUSCARA LA CONTRASEÑA EN EL SERVIDOR LDAP Y NO USARA LA QUE USTED ASIGNO, EL USERNAME DEL USUARIO DE VTIGER DEBE SER EL MISMO USERNAME DEL USUARIO EN LDAP)

PD: Funciona para todas las versiones de 6.X tanto para 6.0 como para 6.4