LINUX.ORG.RU

История изменений

Исправление petav, (текущая версия) :

Если верить документации, то cram-md5 хочет пароль в открытом виде

Может быть, но клиентское приложение делает так

public function authenticate(
$username,
$password,
$authtype = 'LOGIN',
$realm = '',
$workstation = ''
) {
 if (empty($authtype)) {
$authtype = 'LOGIN';
}
switch ($authtype) {
#....
case 'CRAM-MD5':
// Start authentication
if (!$this->sendCommand('AUTH CRAM-MD5', 'AUTH CRAM-MD5', 334)) {
return false;
}
// Get the challenge
$challenge = base64_decode(substr($this->last_reply, 4));

// Build the response
$response = $username . ' ' . $this->hmac($challenge, $password);

// send encoded credentials
return $this->sendCommand('Username', base64_encode($response), 235);
break;
}
#...
}
protected function hmac($data, $key)
{
if (function_exists('hash_hmac')) {
return hash_hmac('md5', $data, $key);
}

// The following borrowed from
// http://php.net/manual/en/function.mhash.php#27225

// RFC 2104 HMAC implementation for php.
// Creates an md5 HMAC.
// Eliminates the need to install mhash to compute a HMAC
// Hacked by Lance Rushing

$bytelen = 64; // byte length for md5
if (strlen($key) > $bytelen) {
$key = pack('H*', md5($key));
}
$key = str_pad($key, $bytelen, chr(0x00));
$ipad = str_pad('', $bytelen, chr(0x36));
$opad = str_pad('', $bytelen, chr(0x5c));
$k_ipad = $key ^ $ipad;
$k_opad = $key ^ $opad;

return md5($k_opad . pack('H*', md5($k_ipad . $data)));
}

pwcheck_method: auxprop

И auxprop и saslauthd пробовал, потому что не понял где ошибка.

Если непонятно что за ошибки то в .conf

Да, спасибо

«WHERE email = '%u'» - IMHO только имя без домена

Да, все верно и имя и домен в одном столбце храняться.

Исправление petav, :

Если верить документации, то cram-md5 хочет пароль в открытом виде

Может быть, но клиентское приложение делает так

public function authenticate(
$username,
$password,
$authtype = 'LOGIN',
$realm = '',
$workstation = ''
) {
 if (empty($authtype)) {
$authtype = 'LOGIN';
}
switch ($authtype) {
....
case 'CRAM-MD5':
// Start authentication
if (!$this->sendCommand('AUTH CRAM-MD5', 'AUTH CRAM-MD5', 334)) {
return false;
}
// Get the challenge
$challenge = base64_decode(substr($this->last_reply, 4));

// Build the response
$response = $username . ' ' . $this->hmac($challenge, $password);

// send encoded credentials
return $this->sendCommand('Username', base64_encode($response), 235);
break;
}
...
}
protected function hmac($data, $key)
{
if (function_exists('hash_hmac')) {
return hash_hmac('md5', $data, $key);
}

// The following borrowed from
// http://php.net/manual/en/function.mhash.php#27225

// RFC 2104 HMAC implementation for php.
// Creates an md5 HMAC.
// Eliminates the need to install mhash to compute a HMAC
// Hacked by Lance Rushing

$bytelen = 64; // byte length for md5
if (strlen($key) > $bytelen) {
$key = pack('H*', md5($key));
}
$key = str_pad($key, $bytelen, chr(0x00));
$ipad = str_pad('', $bytelen, chr(0x36));
$opad = str_pad('', $bytelen, chr(0x5c));
$k_ipad = $key ^ $ipad;
$k_opad = $key ^ $opad;

return md5($k_opad . pack('H*', md5($k_ipad . $data)));
}

pwcheck_method: auxprop

И auxprop и saslauthd пробовал, потому что не понял где ошибка.

Если непонятно что за ошибки то в .conf

Да, спасибо

«WHERE email = '%u'» - IMHO только имя без домена

Да, все верно и имя и домен в одном столбце храняться.

Исходная версия petav, :

Если верить документации, то cram-md5 хочет пароль в открытом виде

Может быть, но клиентское приложение делает так

case 'CRAM-MD5':
// Start authentication
if (!$this->sendCommand('AUTH CRAM-MD5', 'AUTH CRAM-MD5', 334)) {
return false;
}
// Get the challenge
$challenge = base64_decode(substr($this->last_reply, 4));

// Build the response
$response = $username . ' ' . $this->hmac($challenge, $password);

// send encoded credentials
return $this->sendCommand('Username', base64_encode($response), 235);
break;
}
protected function hmac($data, $key)
{
if (function_exists('hash_hmac')) {
return hash_hmac('md5', $data, $key);
}

// The following borrowed from
// http://php.net/manual/en/function.mhash.php#27225

// RFC 2104 HMAC implementation for php.
// Creates an md5 HMAC.
// Eliminates the need to install mhash to compute a HMAC
// Hacked by Lance Rushing

$bytelen = 64; // byte length for md5
if (strlen($key) > $bytelen) {
$key = pack('H*', md5($key));
}
$key = str_pad($key, $bytelen, chr(0x00));
$ipad = str_pad('', $bytelen, chr(0x36));
$opad = str_pad('', $bytelen, chr(0x5c));
$k_ipad = $key ^ $ipad;
$k_opad = $key ^ $opad;

return md5($k_opad . pack('H*', md5($k_ipad . $data)));
}

pwcheck_method: auxprop

И auxprop и saslauthd пробовал, потому что не понял где ошибка.

Если непонятно что за ошибки то в .conf

Да, спасибо

«WHERE email = '%u'» - IMHO только имя без домена

Да, все верно и имя и домен в одном столбце храняться.