/** * @param \RainLoop\Model\Account $oAccount * @param string $sPrevPassword * @param string $sNewPassword * * @return bool */ public function ChangePassword(\RainLoop\Account $oAccount, $sPrevPassword, $sNewPassword) { $bResult = false; try { $sDomain = \MailSo\Base\Utils::GetDomainFromEmail($oAccount->Email()); $sUserDn = \strtr($this->sUserDnFormat, array('{domain}' => $sDomain, '{domain:dc}' => 'dc=' . \strtr($sDomain, array('.' => ',dc=')), '{email}' => $oAccount->Email(), '{email:user}' => \MailSo\Base\Utils::GetAccountNameFromEmail($oAccount->Email()), '{email:domain}' => $sDomain, '{login}' => $oAccount->Login(), '{imap:login}' => $oAccount->Login(), '{imap:host}' => $oAccount->DomainIncHost(), '{imap:port}' => $oAccount->DomainIncPort())); $oCon = @\ldap_connect($this->sHostName); if ($oCon) { @\ldap_set_option($oCon, LDAP_OPT_PROTOCOL_VERSION, 3); if (!@\ldap_bind($oCon, $sUserDn, $sPrevPassword)) { if ($this->oLogger) { $sError = $oCon ? @\ldap_error($oCon) : ''; $iErrno = $oCon ? @\ldap_errno($oCon) : 0; $this->oLogger->Write('ldap_bind error: ' . $sError . ' (' . $iErrno . ')', \MailSo\Log\Enumerations\Type::WARNING, 'LDAP'); } return false; } } $sEncodedNewPassword = $sNewPassword; switch (\strtolower($this->sPasswordEncType)) { case 'sha': switch (true) { default: case \function_exists('sha1'): $sEncodedNewPassword = '******' . \base64_encode(\pack('H*', \sha1($sNewPassword))); break; case \function_exists('hash'): $sEncodedNewPassword = '******' . \base64_encode(\hash('sha1', $sNewPassword, true)); break; case \function_exists('mhash') && defined('MHASH_SHA1'): $sEncodedNewPassword = '******' . \base64_encode(\mhash(MHASH_SHA1, $sNewPassword)); break; } break; case 'md5': $sEncodedNewPassword = '******' . \base64_encode(\pack('H*', \md5($sNewPassword))); break; case 'crypt': $sEncodedNewPassword = '******' . \crypt($sNewPassword, $this->getSalt(2)); break; } $aEntry = array(); $aEntry[$this->sPasswordField] = (string) $sEncodedNewPassword; if (!!@\ldap_modify($oCon, $sUserDn, $aEntry)) { $bResult = true; } else { if ($this->oLogger) { $sError = $oCon ? @\ldap_error($oCon) : ''; $iErrno = $oCon ? @\ldap_errno($oCon) : 0; $this->oLogger->Write('ldap_modify error: ' . $sError . ' (' . $iErrno . ')', \MailSo\Log\Enumerations\Type::WARNING, 'LDAP'); } } } catch (\Exception $oException) { if ($this->oLogger) { $this->oLogger->WriteException($oException, \MailSo\Log\Enumerations\Type::WARNING, 'LDAP'); } $bResult = false; } return $bResult; }
/** * @param \RainLoop\Account $oAccount * @param string $sPrevPassword * @param string $sNewPassword * * @return bool */ public function ChangePassword(\RainLoop\Account $oAccount, $sPrevPassword, $sNewPassword) { $bResult = false; try { $oPoppassdClient = \MailSo\Poppassd\PoppassdClient::NewInstance(); if ($this->oLogger instanceof \MailSo\Log\Logger) { $oPoppassdClient->SetLogger($this->oLogger); } $oPoppassdClient->Connect($this->sHost, $this->iPort)->Login($oAccount->Login(), $oAccount->Password())->NewPass($sNewPassword)->LogoutAndDisconnect(); $bResult = true; } catch (\Exception $oException) { $bResult = false; } return $bResult; }