From cf46aefd9d8be57722514ab0b6047fa573f46a36 Mon Sep 17 00:00:00 2001
From: Thomas Bruederli <thomas@roundcube.net>
Date: Sat, 28 Sep 2013 06:04:35 -0400
Subject: [PATCH] Make password plugin use the new 'settings_actions' hook to register its link in the settings navigation

---
 program/include/rcmail.php |   51 ++++++++++++++++++++++++++++++++++-----------------
 1 files changed, 34 insertions(+), 17 deletions(-)

diff --git a/program/include/rcmail.php b/program/include/rcmail.php
index 62f6b6c..0483f0e 100644
--- a/program/include/rcmail.php
+++ b/program/include/rcmail.php
@@ -481,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'])) {
@@ -954,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);
     }
 
 

--
Gitblit v1.9.1