Thomas Bruederli
2013-09-28 cf46aefd9d8be57722514ab0b6047fa573f46a36
program/include/rcmail.php
@@ -263,6 +263,23 @@
  /**
   * Return identifier of the address book object
   *
   * @param rcube_addressbook Addressbook source object
   *
   * @return string Source identifier
   */
  public function get_address_book_id($object)
  {
    foreach ($this->address_books as $index => $book) {
      if ($book === $object) {
        return $index;
      }
    }
  }
  /**
   * Return address books list
   *
   * @param boolean True if the address book needs to be writeable
@@ -464,15 +481,22 @@
        $port = $config['default_port'];
    }
    /* Modify username with domain if required
       Inspired by Marco <P0L0_notspam_binware.org>
    */
    // Check if we need to add domain
    if (!empty($config['username_domain']) && strpos($username, '@') === false) {
      if (is_array($config['username_domain']) && isset($config['username_domain'][$host]))
        $username .= '@'.rcube_utils::parse_host($config['username_domain'][$host], $host);
      else if (is_string($config['username_domain']))
        $username .= '@'.rcube_utils::parse_host($config['username_domain'], $host);
    // Check if we need to add/force domain to username
    if (!empty($config['username_domain'])) {
      $domain = is_array($config['username_domain']) ? $config['username_domain'][$host] : $config['username_domain'];
      if ($domain = rcube_utils::parse_host((string)$domain, $host)) {
        $pos = strpos($username, '@');
        // force configured domains
        if (!empty($config['username_domain_forced']) && $pos !== false) {
          $username = substr($username, 0, $pos) . '@' . $domain;
        }
        // just add domain if not specified
        else if ($pos === false) {
          $username .= '@' . $domain;
        }
      }
    }
    if (!isset($config['login_lc'])) {
@@ -937,22 +961,32 @@
    /**
     * Write login data (name, ID, IP address) to the 'userlogins' log file.
     */
    public function log_login()
    public function log_login($user = null, $failed_login = false, $error_code = 0)
    {
        if (!$this->config->get('log_logins')) {
            return;
        }
        $user_name = $this->get_user_name();
        $user_id   = $this->get_user_id();
        // failed login
        if ($failed_login) {
            $message = sprintf('Failed login for %s from %s in session %s (error: %d)',
                $user, rcube_utils::remote_ip(), session_id(), $error_code);
        }
        // successful login
        else {
            $user_name = $this->get_user_name();
            $user_id   = $this->get_user_id();
        if (!$user_id) {
            return;
            if (!$user_id) {
                return;
            }
            $message = sprintf('Successful login for %s (ID: %d) from %s in session %s',
                    $user_name, $user_id, rcube_utils::remote_ip(), session_id());
        }
        self::write_log('userlogins',
            sprintf('Successful login for %s (ID: %d) from %s in session %s',
                $user_name, $user_id, rcube_utils::remote_ip(), session_id()));
        // log login
        self::write_log('userlogins', $message);
    }