OBTENIDO FORO: jOOMLA SPANISH – AUTOR FEDY

En primer lugar he creado un archivo llamado validLDAP.php en el directorio raiz y que unicamente lleva la variable $mosConfig_login_LDAP = true; esto es únicamente para que simplemente cambiando la contraseña a true o false, pueda validarme mediante el LDAP o el sistema tradicional de Joomla. Tienes dos opciones, o en la tabla users de Joomla introduces los usuarios de windows en el campo username o, haces como yo, busco en el LDAP el usuario, leo los datos que hay del usuario, uno de ellos es su cuenta de correo, y ésta es la que busco en la base de datos de Joomla.

En el fichero includes/joomla.php busca la funcion login y antes de la línea:

Código PHP:
$passwd = md5( $passwd ); 

insertas esta:

Código PHP:
$passwdLDAP = $passwd

Esto lo hacemos porque en LDAP tenemos que buscar la contraseña en texto plano, encriptada con md5 no nos sirve, te quedaría así:

Código PHP:
$passwdLDAP = $passwd;
$passwd = md5( $passwd ); 

A continuación, después de:

Código PHP:
$row = null;
if (!
$username || !$passwd) {
mosErrorAlert( _LOGIN_INCOMPLETE );
exit();
} else {
if (
$remember && strlen($username) == 32 && strlen($passwd) == 32 && $userid ) {
// query used for remember me cookie
$harden = mosHash( @$_SERVER['HTTP_USER_AGENT'] );
$query = "SELECT id, name, username, password, usertype, block, gid"
. "\n FROM #__users"
. "\n WHERE id = " . (int) $userid
;
$this->_db->setQuery( $query );
$this->_db->loadObject($user);

$check_username = md5( $user->username . $harden );
$check_password = md5( $user->password . $harden );

if ( $check_username == $username && $check_password == $passwd ) {
$row = $user;

añades

Código PHP:
} else {

include_once( $mosConfig_absolute_path .'/validLDAP.php' );
$validadoLDAP = false;
if (
$mosConfig_login_LDAP) {

$DatosUsuario = validacionActiveDirectory($username, $passwdLDAP);
if (
$DatosUsuario){
$validadoLDAP = true;

$username = strtolower(trim( $DatosUsuario['email'] ));
$query = "SELECT id, name, username, password, usertype, block, gid"
. "\n FROM #__users"
. "\n WHERE email= ". $this->_db->Quote( $username )
;
$this->_db->setQuery( $query );
$this->_db->loadObject( $row );
}

} else { 

y luego sigue el código original:

Código PHP:
// query used for login via login module
$query = "SELECT id, name, username, password, usertype, block, gid"
. "\n FROM #__users"
. "\n WHERE username = ". $this->_db->Quote( $username )
.
"\n AND password = ". $this->_db->Quote( $passwd )

Después, al final del archivo, creas la función validacionActiveDirectory:

Código PHP:

function validacionActiveDirectory($uid, $psw) {
ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_set_option($ds, LDAP_OPT_REFERRALS, 0);
$sroot = "dc=loquesea,dc=loquesea,dc=loquesea";
$host = "midominio.com";
$ds = @ldap_connect($host);
if (!
$ds) {
// echo "Falló la conexión...<br/ >";
return false;
} else {
$validacion = @ldap_bind( $ds, $uid, $psw );    
if (!
$validacion) {
// echo "Falló la validación...<br/ >";
return false;
} else {
$ActiveDirectory = array();
$ArrayCampos = array( "ou", "cn", "mail", "telephonenumber", "givenName", "sn", "displayName");
$sr = @ldap_search($ds, $sroot, "samaccountname=$uid", $ArrayCampos);
// $sr                    = @ldap_search($ds, $sroot, "samaccountname=$uid");  // Así leo todos los campos.
$ad = @ldap_get_entries( $ds, $sr );
$ActiveDirectory['uid']            = $ad[0]["cn"][0];
$ActiveDirectory['email']        = $ad[0]["mail"][0];
$ActiveDirectory['telefono']    = $ad[0]["telephonenumber"][0];
$ActiveDirectory['Nombre']        = $ad[0]["givenname"][0];
$ActiveDirectory['Apellidos']    = $ad[0]["sn"][0];
$ActiveDirectory['NombApell']    = $ad[0]["displayname"][0];
return
$ActiveDirectory;
}
}
}
// Fin de la función  validacionActiveDirectory($uid, $psw)

Por admin

Deja una respuesta

Ads Blocker Image Powered by Code Help Pro

Ads Blocker Detected!!!

We have detected that you are using extensions to block ads. Please support us by disabling these ads blocker.

Powered By
100% Free SEO Tools - Tool Kits PRO