Horde IMP passwd “User not found”
Jueves, 16 de Marzo de 2006Problema: Tienes IMP de Horde instalado, además tienes instalado una tostadora de Qmail con vpopmail con backend mysql compilado con --disable-many-domains. O sea, vpopmail está utilizando una tabla diferente para los usuarios de cada dominio. IMP passwd falla en actualizar el password del usuario y presenta u mensaje "User not found".
Solución: passwd no soporta vpopmail compilado para utilizar una tabla de usuarios por cada dominio. Hay que hacerle un par de retoques.
1°) Corregir el método _lookup de passwd/lib/Driver/vpopmail.php. Una versión correjida para la versión de passwd h3-3.0 sería:
-
function _lookup($username, $old_password)
-
{
-
/* Connect to the database. */
-
$res = $this->_connect();
-
return $res;
-
}
-
-
/* Only split up username if domain is set in backend
-
* configuration. */
-
} else {
-
$domain = $this->_params['domain'];
-
$name = $username;
-
}
-
-
if ($this->_params['disable_many_domains']) { // if disable_many_domains (we are using one table for each domain)
-
}
-
-
/* Build the SQL query. */
-
$sql = 'SELECT ' . $this->_params['passwd'] .
-
' FROM ' . $this->_params['table'] .
-
' WHERE ' . $this->_params['name'] . ' = ?';
-
if ($this->_params['domain']) {
-
$sql .= ' AND ' . $this->_params['domain'] . ' = ?';
-
$values[] = $domain;
-
}
-
Horde::logMessage('SQL Query by Passwd_Driver_vpopmail::_lookup(): ' . $sql, __FILE__, __LINE__, PEAR_LOG_DEBUG);
-
-
/* Execute the query. */
-
$result = $this->_db->query($sql, $values);
-
$row = $result->fetchRow(DB_FETCHMODE_ASSOC);
-
$result->free();
-
/* Get the password from the database. */
-
$current_password = $row[$this->_params['passwd']];
-
-
/* See if the passwords match. */
-
return $this->comparePasswords($current_password, $old_password);
-
}
-
}
-
-
}
2°) Agregar en la configuración del backend de vpopmail (passwd/config/backends.php) un parametro llamado "disable_many_domains" seteado en true.
-
'name' => 'Example Vpopmail Server',
-
'preferred' => '',
-
'minLength' => 3,
-
'maxLength' => 8,
-
'maxSpace' => 0,
-
'minUpper' => 0,
-
'minLower' => 0,
-
'minNumeric' => 0
-
),
-
'driver' => 'vpopmail',
-
'phptype' => 'mysql',
-
'hostspec' => 'localhost',
-
'username' => '',
-
'password' => '',
-
'encryption' => 'crypt',
-
'database' => 'vpopmail',
-
'table' => 'vpopmail',
-
'name' => 'pw_name',
-
'domain' => 'pw_domain',
-
'passwd' => 'pw_passwd',
-
'clear_passwd' => 'pw_clear_passwd',
-
'use_clear_passwd' => true,
-
'show_encryption' => true,
-
'disable_many_domains' => true
-
)
-
);
No estoy metido en el desarrollo de horde, así que si alguien quiere submitir el patch, en caso de que la versión de CVS no esté correjida, por favor hágalo.
Es un fix tonto, pero puede sacar de un apuro a alguien.