symfonyでユーザ認証にLDAPを利用して失敗したら自分とこのDB見に行く

<?php

class LDAP
{
  public static function checkPassword($username, $password)
  {
    // LDAPサーバへ問い合わせる
    $options = array(
      'host'              => 's0.foo.net',
      'username'          => 'CN=user1,DC=foo,DC=net',
      'password'          => 'pass1',
      'bindRequiresDn'    => true,
      'accountDomainName' => 'foo.net',
      'baseDn'            => 'OU=Sales,DC=foo,DC=net'
    );
    $ldap = new Zend_Ldap($options);

    try
    {
      $ldap->bind($username, $password);
      $ldap->getCanonicalAccountName($username);

      // 自分とこのサーバに未登録なら登録する
      if (!Doctrine::getTable('sfGuardUser')->findOneByUsername($username))
      {
        $user = new sfGuardUser();
        $user->setUsername($username);
        $user->setPassword($password);
        $user->setIsActive(true);
        $user->save();
      }

      return true;
    }
    catch (Zend_Ldap_Exception $zle)
    {
      if ($user = Doctrine::getTable('sfGuardUser')->findOneByUsername($username))
      {
        // LDAPサーバには登録されて無いが、自分とこのサーバには登録されている
        if ($user->checkPasswordByGuard($password))
        {
          // checkPassword関数使うとLDAP::checkPasswordが呼ばれ続けて無限ループに陥るので
          // checkPasswordByGuard使う

          return true;
        }
      }

      // LDAPサーバにも自分とこのサーバにも未登録のユーザ
      return false;
    }
  }
}