Index: jspwiki-war/src/main/java/org/apache/wiki/Release.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- jspwiki-war/src/main/java/org/apache/wiki/Release.java	(revision 1613475)
+++ jspwiki-war/src/main/java/org/apache/wiki/Release.java	(revision )
@@ -72,7 +72,7 @@
      *  <p>
      *  If the build identifier is empty, it is not added.
      */
-    public static final String     BUILD         = "4";
+    public static final String     BUILD         = "5";
     
     /**
      *  This is the generic version string you should use when printing out the version.  It is of 
Index: jspwiki-war/src/main/java/org/apache/wiki/auth/user/DefaultUserProfile.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- jspwiki-war/src/main/java/org/apache/wiki/auth/user/DefaultUserProfile.java	(revision 1613475)
+++ jspwiki-war/src/main/java/org/apache/wiki/auth/user/DefaultUserProfile.java	(revision )
@@ -18,6 +18,8 @@
  */
 package org.apache.wiki.auth.user;
 
+import org.apache.commons.lang.StringUtils;
+
 import java.io.Serializable;
 import java.util.Date;
 import java.util.HashMap;
@@ -85,7 +87,7 @@
         {
             DefaultUserProfile u = (DefaultUserProfile) o;
             return  same( m_fullname, u.m_fullname ) && same( m_password, u.m_password )
-                    && same( m_loginName, u.m_loginName ) && same( m_email, u.m_email ) && same( m_wikiname,
+                    && same( m_loginName, u.m_loginName ) && same(StringUtils.lowerCase( m_email ), StringUtils.lowerCase( u.m_email ) ) && same( m_wikiname,
                     u.m_wikiname );
         }
 
@@ -98,7 +100,7 @@
                (m_password  != null ? m_password.hashCode()  : 0) ^
                (m_loginName != null ? m_loginName.hashCode() : 0) ^
                (m_wikiname  != null ? m_wikiname.hashCode()  : 0) ^
-               (m_email     != null ? m_email.hashCode()     : 0);
+               (m_email     != null ? StringUtils.lowerCase( m_email ).hashCode()     : 0);
     }
 
     /**
Index: jspwiki-war/src/main/resources/CoreResources.properties
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- jspwiki-war/src/main/resources/CoreResources.properties	(revision 1613475)
+++ jspwiki-war/src/main/resources/CoreResources.properties	(revision )
@@ -62,6 +62,7 @@
 security.error.cannot.rename=Cannot rename: the login name ''{0}'' is already taken.
 security.error.fullname.taken=Someone with the name of ''{0}'' has already registered.
 security.error.login.taken=The login name ''{0}'' is already taken.
+security.error.email.taken=The email ''{0}'' is already taken, you can use an email for only one profile.
 
 # These should roughly match whatever is used in default.properties for UserProfile.jsp
 security.user.loginname=Login name
Index: jspwiki-war/src/main/config/db/hsql.ddl
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- jspwiki-war/src/main/config/db/hsql.ddl	(revision 1613475)
+++ jspwiki-war/src/main/config/db/hsql.ddl	(revision )
@@ -20,7 +20,7 @@
 
 create table users (
   uid varchar(100),
-  email varchar(100),
+  email varchar_ignorecase(100),
   full_name varchar(100),
   login_name varchar(100) not null,
   password varchar(100),
Index: jspwiki-war/src/test/config/hsql-userdb-setup.ddl
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- jspwiki-war/src/test/config/hsql-userdb-setup.ddl	(revision 1613475)
+++ jspwiki-war/src/test/config/hsql-userdb-setup.ddl	(revision )
@@ -20,7 +20,7 @@
 
 create table users (
   uid varchar(100),
-  email varchar(100),
+  email varchar_ignorecase(100),
   full_name varchar(100),
   login_name varchar(100) not null,
   password varchar(100),
Index: jspwiki-it-tests/jspwiki-selenium-tests/src/main/config/hsql-userdb-setup.sql
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- jspwiki-it-tests/jspwiki-selenium-tests/src/main/config/hsql-userdb-setup.sql	(revision 1613475)
+++ jspwiki-it-tests/jspwiki-selenium-tests/src/main/config/hsql-userdb-setup.sql	(revision )
@@ -14,7 +14,7 @@
 
 create table users (
   uid varchar(100),
-  email varchar(100),
+  email varchar_ignorecase(100),
   full_name varchar(100),
   login_name varchar(100) not null,
   password varchar(100),
Index: jspwiki-war/src/main/config/db/postgresql.ddl
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- jspwiki-war/src/main/config/db/postgresql.ddl	(revision 1613475)
+++ jspwiki-war/src/main/config/db/postgresql.ddl	(revision )
@@ -20,7 +20,7 @@
 
 create table users (
   uid varchar(100),
-  email varchar(100),
+  email varchar_ignorecase(100),
   full_name varchar(100),
   login_name varchar(100) not null primary key,
   password varchar(100),
Index: jspwiki-war/src/main/java/org/apache/wiki/auth/user/XMLUserDatabase.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- jspwiki-war/src/main/java/org/apache/wiki/auth/user/XMLUserDatabase.java	(revision 1613475)
+++ jspwiki-war/src/main/java/org/apache/wiki/auth/user/XMLUserDatabase.java	(revision )
@@ -38,6 +38,7 @@
 import javax.xml.parsers.DocumentBuilderFactory;
 import javax.xml.parsers.ParserConfigurationException;
 
+import org.apache.commons.lang.StringUtils;
 import org.apache.wiki.WikiEngine;
 import org.apache.wiki.api.exceptions.NoRequiredPropertyException;
 import org.apache.wiki.auth.NoSuchPrincipalException;
@@ -623,11 +624,24 @@
         NodeList users = c_dom.getElementsByTagName( USER_TAG );
         
         if( users == null ) return null;
-        
+
+        // check if we have to do a case insensitive compare
+        boolean caseSensitiveCompare = true;
+        if (matchAttribute.equals(EMAIL))
+        {
+            caseSensitiveCompare = false;
+        }
+
         for( int i = 0; i < users.getLength(); i++ )
         {
             Element user = (Element) users.item( i );
-            if ( user.getAttribute( matchAttribute ).equals( index ) )
+            String userAttribute = user.getAttribute( matchAttribute );
+            if (!caseSensitiveCompare)
+            {
+                userAttribute = StringUtils.lowerCase(userAttribute);
+                index = StringUtils.lowerCase(index);
+            }
+            if ( userAttribute.equals( index ) )
             {
                 UserProfile profile = newProfile();
                 
\ No newline at end of file
Index: jspwiki-war/src/main/java/org/apache/wiki/auth/UserManager.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- jspwiki-war/src/main/java/org/apache/wiki/auth/UserManager.java	(revision 1613475)
+++ jspwiki-war/src/main/java/org/apache/wiki/auth/UserManager.java	(revision )
@@ -32,6 +32,7 @@
 import javax.mail.internet.AddressException;
 import javax.servlet.http.HttpServletRequest;
 
+import org.apache.commons.lang.StringUtils;
 import org.apache.log4j.Logger;
 import org.apache.wiki.WikiContext;
 import org.apache.wiki.WikiEngine;
@@ -538,6 +539,7 @@
         UserProfile otherProfile;
         String fullName = profile.getFullname();
         String loginName = profile.getLoginName();
+        String email = profile.getEmail();
 
         // It's illegal to use as a full name someone else's login name
         try
@@ -561,7 +563,24 @@
             {
                 Object[] args = { loginName };
                 session.addMessage( SESSION_MESSAGES, MessageFormat.format( rb.getString("security.error.illegalloginname"),
+                        args ) );
+            }
+        }
+        catch ( NoSuchPrincipalException e)
+        { /* It's clean */ }
+
+        // It's illegal to use multiple accounts with the same email
+        try
+        {
+            otherProfile = getUserDatabase().findByEmail( email );
+            System.out.println("otherProfile: " + otherProfile);
+            System.out.println("profile.equals( otherProfile ): " + profile.equals( otherProfile ));
+            System.out.println("StringUtils.lowerCase( email ).equals( StringUtils.lowerCase(otherProfile.getEmail()) :" + StringUtils.lowerCase( email ).equals( StringUtils.lowerCase(otherProfile.getEmail())));
+            if ( otherProfile != null && !profile.equals( otherProfile ) && StringUtils.lowerCase( email ).equals( StringUtils.lowerCase(otherProfile.getEmail() ) ) )
+            {
+                Object[] args = { email };
+                session.addMessage( SESSION_MESSAGES, MessageFormat.format( rb.getString("security.error.email.taken"),
-                                                                            args ) );
+                        args ) );
             }
         }
         catch ( NoSuchPrincipalException e)
Index: jspwiki-war/src/main/resources/CoreResources_de.properties
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- jspwiki-war/src/main/resources/CoreResources_de.properties	(revision 1613475)
+++ jspwiki-war/src/main/resources/CoreResources_de.properties	(revision )
@@ -69,6 +69,7 @@
 security.error.cannot.rename = Umbenennung nicht m�glich: Der Login name ''{0}'' ist bereits in Verwendung.
 security.error.fullname.taken = Jemand mit dem Namen ''{0}'' ist bereits registriert.
 security.error.login.taken = Der Login Name ''{0}'' wird bereits verwendet.
+security.error.email.taken = Die E-Mail-Adresse ''{0}'' wird bereits verwendet, du kannst eine E-Mail-Adresse nur f�r eine login gebrauchen.
 
 # These should roughly match whatever is used in default.properties for UserProfile.jsp
 security.user.loginname=Benutzername
Index: ChangeLog
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- ChangeLog	(revision 1613475)
+++ ChangeLog	(revision )
@@ -1,3 +1,9 @@
+2014-07-27  Harry Metske (metskem@apache.org)
+
+       * 2.10.2-svn-5
+
+       * Fixed JSPWIKI-195 - do not allow more than one account with the same email address.
+
 2014-07-07  Juan Pablo Santos (juanpablo AT apache DOT org)
 
        * 2.10.2-svn-4
Index: jspwiki-war/src/main/java/org/apache/wiki/ui/InputValidator.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- jspwiki-war/src/main/java/org/apache/wiki/ui/InputValidator.java	(revision 1613475)
+++ jspwiki-war/src/main/java/org/apache/wiki/ui/InputValidator.java	(revision )
@@ -144,8 +144,7 @@
             if ( !valid )
             {
                 Object[] args = { label, "&quot;&#39;&lt;&gt;;&amp;[]#\\@{}%$" };
-                m_session.addMessage( m_form, MessageFormat.format( rb.getString("validate.unsafechars"),
-                                                                    args ) );
+                m_session.addMessage( m_form, MessageFormat.format( rb.getString("validate.unsafechars"), args ) );
             }
             return valid;
         case EMAIL:
@@ -154,8 +153,7 @@
             if ( !valid )
             {
                 Object[] args = { label };
-                m_session.addMessage( m_form, MessageFormat.format( rb.getString("validate.invalidemail"),
-                                                                    args ) );
+                m_session.addMessage( m_form, MessageFormat.format( rb.getString("validate.invalidemail"), args ) );
             }
             return valid;
         case ID:
@@ -164,8 +162,7 @@
             if ( !valid )
             {
                 Object[] args = { label, "&quot;&#39;&lt;&gt;;&amp;{}" };
-                m_session.addMessage( m_form, MessageFormat.format( rb.getString("validate.unsafechars"),
-                                                                    args ) );
+                m_session.addMessage( m_form, MessageFormat.format( rb.getString("validate.unsafechars"), args ) );
             }
             return valid;
          default:
Index: jspwiki-war/src/main/resources/CoreResources_nl.properties
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- jspwiki-war/src/main/resources/CoreResources_nl.properties	(revision 1613475)
+++ jspwiki-war/src/main/resources/CoreResources_nl.properties	(revision )
@@ -60,6 +60,7 @@
 security.error.cannot.rename=Kan niet hernoemen: de Login naam ''{0}'' is al in gebruik.
 security.error.fullname.taken=De volledige naam ''{0}'' is al in gebruik.
 security.error.login.taken=De Login naam ''{0}'' is al in gebruik. 
+security.error.email.taken=Het email adres ''{0}'' is al in gebruik, je kunt een email adres maar voor een profile gebruiken.
 
 # These should roughly match whatever is used in default.properties for UserProfile.jsp
 security.user.loginname=Login naam
