Merge branch 'maintenance_1.8' into develop

# Conflicts:
#	bundles/org.eclipse.emf.emfstore.client.model.edit/META-INF/MANIFEST.MF
#	bundles/org.eclipse.emf.emfstore.client.model.edit/pom.xml
#	bundles/org.eclipse.emf.emfstore.client.transaction/META-INF/MANIFEST.MF
#	bundles/org.eclipse.emf.emfstore.client.transaction/pom.xml
#	bundles/org.eclipse.emf.emfstore.client.ui.historybrowsercomparator/META-INF/MANIFEST.MF
#	bundles/org.eclipse.emf.emfstore.client.ui.historybrowsercomparator/pom.xml
#	bundles/org.eclipse.emf.emfstore.client.ui.rap/META-INF/MANIFEST.MF
#	bundles/org.eclipse.emf.emfstore.client.ui.rap/pom.xml
#	bundles/org.eclipse.emf.emfstore.client.ui.rcp/META-INF/MANIFEST.MF
#	bundles/org.eclipse.emf.emfstore.client.ui.rcp/pom.xml
#	bundles/org.eclipse.emf.emfstore.client.ui.transaction/META-INF/MANIFEST.MF
#	bundles/org.eclipse.emf.emfstore.client.ui.transaction/pom.xml
#	bundles/org.eclipse.emf.emfstore.client.ui/META-INF/MANIFEST.MF
#	bundles/org.eclipse.emf.emfstore.client.ui/pom.xml
#	bundles/org.eclipse.emf.emfstore.client/META-INF/MANIFEST.MF
#	bundles/org.eclipse.emf.emfstore.client/pom.xml
#	bundles/org.eclipse.emf.emfstore.common.model.edit/META-INF/MANIFEST.MF
#	bundles/org.eclipse.emf.emfstore.common.model.edit/pom.xml
#	bundles/org.eclipse.emf.emfstore.common.model/META-INF/MANIFEST.MF
#	bundles/org.eclipse.emf.emfstore.common.model/pom.xml
#	bundles/org.eclipse.emf.emfstore.common/META-INF/MANIFEST.MF
#	bundles/org.eclipse.emf.emfstore.common/pom.xml
#	bundles/org.eclipse.emf.emfstore.ecore/META-INF/MANIFEST.MF
#	bundles/org.eclipse.emf.emfstore.ecore/pom.xml
#	bundles/org.eclipse.emf.emfstore.example.helloworld/META-INF/MANIFEST.MF
#	bundles/org.eclipse.emf.emfstore.example.helloworld/pom.xml
#	bundles/org.eclipse.emf.emfstore.example.installer/META-INF/MANIFEST.MF
#	bundles/org.eclipse.emf.emfstore.example.installer/examples/org.eclipse.emf.emfstore.example.helloworld/META-INF/MANIFEST.MF
#	bundles/org.eclipse.emf.emfstore.example.installer/examples/org.eclipse.emf.emfstore.example.helloworld/pom.xml
#	bundles/org.eclipse.emf.emfstore.example.installer/examples/org.eclipse.emf.emfstore.example.merging/META-INF/MANIFEST.MF
#	bundles/org.eclipse.emf.emfstore.example.installer/pom.xml
#	bundles/org.eclipse.emf.emfstore.example.merging/META-INF/MANIFEST.MF
#	bundles/org.eclipse.emf.emfstore.example.merging/pom.xml
#	bundles/org.eclipse.emf.emfstore.example.sessionprovider/META-INF/MANIFEST.MF
#	bundles/org.eclipse.emf.emfstore.example.sessionprovider/pom.xml
#	bundles/org.eclipse.emf.emfstore.examplemodel.edit/META-INF/MANIFEST.MF
#	bundles/org.eclipse.emf.emfstore.examplemodel.edit/pom.xml
#	bundles/org.eclipse.emf.emfstore.examplemodel/META-INF/MANIFEST.MF
#	bundles/org.eclipse.emf.emfstore.examplemodel/pom.xml
#	bundles/org.eclipse.emf.emfstore.fuzzy.emf.edit/pom.xml
#	bundles/org.eclipse.emf.emfstore.fuzzy.emf.editor/pom.xml
#	bundles/org.eclipse.emf.emfstore.fuzzy.emf.example/pom.xml
#	bundles/org.eclipse.emf.emfstore.fuzzy.emf/pom.xml
#	bundles/org.eclipse.emf.emfstore.migration.edapt/META-INF/MANIFEST.MF
#	bundles/org.eclipse.emf.emfstore.migration.edapt/pom.xml
#	bundles/org.eclipse.emf.emfstore.migration/META-INF/MANIFEST.MF
#	bundles/org.eclipse.emf.emfstore.migration/pom.xml
#	bundles/org.eclipse.emf.emfstore.modelmutator/pom.xml
#	bundles/org.eclipse.emf.emfstore.mongodb.client/META-INF/MANIFEST.MF
#	bundles/org.eclipse.emf.emfstore.mongodb.client/pom.xml
#	bundles/org.eclipse.emf.emfstore.mongodb.server/META-INF/MANIFEST.MF
#	bundles/org.eclipse.emf.emfstore.mongodb.server/pom.xml
#	bundles/org.eclipse.emf.emfstore.mongodb/META-INF/MANIFEST.MF
#	bundles/org.eclipse.emf.emfstore.mongodb/pom.xml
#	bundles/org.eclipse.emf.emfstore.server.model.edit/META-INF/MANIFEST.MF
#	bundles/org.eclipse.emf.emfstore.server.model.edit/pom.xml
#	bundles/org.eclipse.emf.emfstore.server.model/META-INF/MANIFEST.MF
#	bundles/org.eclipse.emf.emfstore.server.model/pom.xml
#	bundles/org.eclipse.emf.emfstore.server/META-INF/MANIFEST.MF
#	bundles/org.eclipse.emf.emfstore.server/pom.xml
#	features/org.eclipse.emf.emfstore.client.feature/feature.xml
#	features/org.eclipse.emf.emfstore.client.feature/pom.xml
#	features/org.eclipse.emf.emfstore.client.transaction.feature/feature.xml
#	features/org.eclipse.emf.emfstore.client.transaction.feature/pom.xml
#	features/org.eclipse.emf.emfstore.client.ui.feature/feature.xml
#	features/org.eclipse.emf.emfstore.client.ui.feature/pom.xml
#	features/org.eclipse.emf.emfstore.client.ui.historybrowsercomparator.feature/feature.xml
#	features/org.eclipse.emf.emfstore.client.ui.historybrowsercomparator.feature/pom.xml
#	features/org.eclipse.emf.emfstore.client.ui.rap.feature/feature.xml
#	features/org.eclipse.emf.emfstore.client.ui.rap.feature/pom.xml
#	features/org.eclipse.emf.emfstore.common.feature/feature.xml
#	features/org.eclipse.emf.emfstore.common.feature/pom.xml
#	features/org.eclipse.emf.emfstore.ecore.feature/feature.xml
#	features/org.eclipse.emf.emfstore.ecore.feature/pom.xml
#	features/org.eclipse.emf.emfstore.example.feature/feature.xml
#	features/org.eclipse.emf.emfstore.example.feature/pom.xml
#	features/org.eclipse.emf.emfstore.fuzzy.feature/feature.xml
#	features/org.eclipse.emf.emfstore.fuzzy.feature/pom.xml
#	features/org.eclipse.emf.emfstore.fuzzy.test.feature/feature.xml
#	features/org.eclipse.emf.emfstore.fuzzy.test.feature/pom.xml
#	features/org.eclipse.emf.emfstore.license.feature/feature.xml
#	features/org.eclipse.emf.emfstore.license.feature/pom.xml
#	features/org.eclipse.emf.emfstore.migration.edapt.feature/feature.xml
#	features/org.eclipse.emf.emfstore.migration.edapt.feature/pom.xml
#	features/org.eclipse.emf.emfstore.modelmutator.feature/feature.xml
#	features/org.eclipse.emf.emfstore.modelmutator.feature/pom.xml
#	features/org.eclipse.emf.emfstore.mongodb.client.feature/feature.xml
#	features/org.eclipse.emf.emfstore.mongodb.client.feature/pom.xml
#	features/org.eclipse.emf.emfstore.mongodb.server.feature/feature.xml
#	features/org.eclipse.emf.emfstore.mongodb.server.feature/pom.xml
#	features/org.eclipse.emf.emfstore.sdk.feature/feature.xml
#	features/org.eclipse.emf.emfstore.sdk.feature/pom.xml
#	features/org.eclipse.emf.emfstore.server.feature/feature.xml
#	features/org.eclipse.emf.emfstore.server.feature/pom.xml
#	features/org.eclipse.emf.emfstore.test.feature/feature.xml
#	features/org.eclipse.emf.emfstore.test.feature/pom.xml
#	releng/_target/pom.xml
#	releng/emfstore-parent/pom.xml
#	releng/org.eclipse.emf.emfstore.p2repository/pom.xml
#	releng/org.eclipse.emf.emfstore.products/pom.xml
#	releng/org.eclipse.emf.emfstore.releng.bundles/pom.xml
#	releng/org.eclipse.emf.emfstore.releng.features/pom.xml
#	releng/org.eclipse.emf.emfstore.releng.tests/pom.xml
#	tests/org.eclipse.emf.emfstore.client.api.test/META-INF/MANIFEST.MF
#	tests/org.eclipse.emf.emfstore.client.api.test/pom.xml
#	tests/org.eclipse.emf.emfstore.client.changetracking.test/META-INF/MANIFEST.MF
#	tests/org.eclipse.emf.emfstore.client.changetracking.test/pom.xml
#	tests/org.eclipse.emf.emfstore.client.conflictdetection.test/META-INF/MANIFEST.MF
#	tests/org.eclipse.emf.emfstore.client.conflictdetection.test/pom.xml
#	tests/org.eclipse.emf.emfstore.client.example.test/META-INF/MANIFEST.MF
#	tests/org.eclipse.emf.emfstore.client.example.test/pom.xml
#	tests/org.eclipse.emf.emfstore.client.recording.test/META-INF/MANIFEST.MF
#	tests/org.eclipse.emf.emfstore.client.recording.test/pom.xml
#	tests/org.eclipse.emf.emfstore.client.test.alltests/META-INF/MANIFEST.MF
#	tests/org.eclipse.emf.emfstore.client.test.ui/META-INF/MANIFEST.MF
#	tests/org.eclipse.emf.emfstore.client.test.ui/pom.xml
#	tests/org.eclipse.emf.emfstore.client.test/META-INF/MANIFEST.MF
#	tests/org.eclipse.emf.emfstore.client.test/pom.xml
#	tests/org.eclipse.emf.emfstore.client.ui.test/META-INF/MANIFEST.MF
#	tests/org.eclipse.emf.emfstore.client.ui.test/pom.xml
#	tests/org.eclipse.emf.emfstore.fuzzy.emf.diff.test/pom.xml
#	tests/org.eclipse.emf.emfstore.fuzzy.emf.test/pom.xml
#	tests/org.eclipse.emf.emfstore.migration.edapt.test/META-INF/MANIFEST.MF
#	tests/org.eclipse.emf.emfstore.migration.edapt.test/pom.xml
#	tests/org.eclipse.emf.emfstore.performance.test/META-INF/MANIFEST.MF
#	tests/org.eclipse.emf.emfstore.performance.test/pom.xml
#	tests/org.eclipse.emf.emfstore.server.test/META-INF/MANIFEST.MF
#	tests/org.eclipse.emf.emfstore.server.test/pom.xml
#	tests/org.eclipse.emf.emfstore.test.common/META-INF/MANIFEST.MF
#	tests/org.eclipse.emf.emfstore.test.common/pom.xml
#	tests/org.eclipse.emf.emfstore.test.model.edit/pom.xml
#	tests/org.eclipse.emf.emfstore.test.model/pom.xml
diff --git a/bundles/org.eclipse.emf.emfstore.server/src/org/eclipse/emf/emfstore/internal/server/accesscontrol/authentication/verifiers/LDAPUserVerifier.java b/bundles/org.eclipse.emf.emfstore.server/src/org/eclipse/emf/emfstore/internal/server/accesscontrol/authentication/verifiers/LDAPUserVerifier.java
index a9ca2ed..54591cf 100644
--- a/bundles/org.eclipse.emf.emfstore.server/src/org/eclipse/emf/emfstore/internal/server/accesscontrol/authentication/verifiers/LDAPUserVerifier.java
+++ b/bundles/org.eclipse.emf.emfstore.server/src/org/eclipse/emf/emfstore/internal/server/accesscontrol/authentication/verifiers/LDAPUserVerifier.java
@@ -22,11 +22,18 @@
 import javax.naming.directory.SearchControls;
 import javax.naming.directory.SearchResult;
 
+import org.apache.commons.lang.StringUtils;
 import org.eclipse.emf.emfstore.internal.common.model.util.ModelUtil;
+import org.eclipse.emf.emfstore.internal.server.ServerConfiguration;
 import org.eclipse.emf.emfstore.internal.server.connection.ServerKeyStoreManager;
+import org.eclipse.emf.emfstore.internal.server.core.MonitorProvider;
 import org.eclipse.emf.emfstore.internal.server.exceptions.AccessControlException;
+import org.eclipse.emf.emfstore.internal.server.model.accesscontrol.ACUser;
+import org.eclipse.emf.emfstore.internal.server.model.accesscontrol.AccesscontrolFactory;
 import org.eclipse.emf.emfstore.server.model.ESOrgUnitProvider;
 
+import com.google.common.base.Optional;
+
 /**
  * Verifies user name/password using LDAP.
  *
@@ -42,6 +49,7 @@
 	private static final String DEFAULT_CTX = "com.sun.jndi.ldap.LdapCtxFactory"; //$NON-NLS-1$
 	private final String authUser;
 	private final String authPassword;
+	private final ESOrgUnitProvider orgUnitProvider;
 
 	/**
 	 * Default constructor.
@@ -59,6 +67,7 @@
 	public LDAPUserVerifier(ESOrgUnitProvider orgUnitProvider,
 		String ldapUrl, String ldapBase, String searchDn, String authUser, String authPassword) {
 		super(orgUnitProvider);
+		this.orgUnitProvider = orgUnitProvider;
 		this.ldapUrl = ldapUrl;
 		this.ldapBase = ldapBase;
 		this.searchDn = searchDn;
@@ -200,4 +209,31 @@
 
 	}
 
+	@Override
+	protected ACUser findUser(String username) throws AccessControlException {
+		final Boolean ignoreCase = Boolean.parseBoolean(ServerConfiguration.getProperties().getProperty(
+			ServerConfiguration.AUTHENTICATION_MATCH_USERS_IGNORE_CASE, Boolean.FALSE.toString()));
+
+		final Boolean createAuthenticatedUsers = Boolean.parseBoolean(ServerConfiguration.getProperties().getProperty(
+			ServerConfiguration.AUTHENTICATION_CREATE_AUTHENTICATED_USERS, Boolean.FALSE.toString()));
+
+		synchronized (MonitorProvider.getInstance().getMonitor()) {
+			final Optional<ACUser> user = findExistingUser(orgUnitProvider, username, ignoreCase);
+
+			if (user.isPresent()) {
+				return user.get();
+			}
+
+			if (createAuthenticatedUsers) {
+				final ACUser acUser = AccesscontrolFactory.eINSTANCE.createACUser();
+				acUser.setName(username);
+				acUser.setDescription(StringUtils.EMPTY);
+				orgUnitProvider.addUser(acUser.toAPI());
+				return acUser;
+			}
+
+			throw new AccessControlException();
+		}
+	}
+
 }
diff --git a/bundles/org.eclipse.emf.emfstore.server/src/org/eclipse/emf/emfstore/internal/server/accesscontrol/authentication/verifiers/UserVerifier.java b/bundles/org.eclipse.emf.emfstore.server/src/org/eclipse/emf/emfstore/internal/server/accesscontrol/authentication/verifiers/UserVerifier.java
index a234e77..d536c74 100644
--- a/bundles/org.eclipse.emf.emfstore.server/src/org/eclipse/emf/emfstore/internal/server/accesscontrol/authentication/verifiers/UserVerifier.java
+++ b/bundles/org.eclipse.emf.emfstore.server/src/org/eclipse/emf/emfstore/internal/server/accesscontrol/authentication/verifiers/UserVerifier.java
@@ -13,7 +13,6 @@
 
 import java.util.Set;
 
-import org.apache.commons.lang.StringUtils;
 import org.eclipse.emf.emfstore.internal.common.APIUtil;
 import org.eclipse.emf.emfstore.internal.common.model.util.ModelUtil;
 import org.eclipse.emf.emfstore.internal.server.ServerConfiguration;
@@ -21,12 +20,13 @@
 import org.eclipse.emf.emfstore.internal.server.exceptions.AccessControlException;
 import org.eclipse.emf.emfstore.internal.server.model.AuthenticationInformation;
 import org.eclipse.emf.emfstore.internal.server.model.accesscontrol.ACUser;
-import org.eclipse.emf.emfstore.internal.server.model.accesscontrol.AccesscontrolFactory;
 import org.eclipse.emf.emfstore.server.model.ESAuthenticationInformation;
 import org.eclipse.emf.emfstore.server.model.ESClientVersionInfo;
 import org.eclipse.emf.emfstore.server.model.ESOrgUnitProvider;
 import org.eclipse.emf.emfstore.server.model.ESUser;
 
+import com.google.common.base.Optional;
+
 /**
  * @author emueller
  *
@@ -95,32 +95,40 @@
 		final Boolean ignoreCase = Boolean.parseBoolean(ServerConfiguration.getProperties().getProperty(
 			ServerConfiguration.AUTHENTICATION_MATCH_USERS_IGNORE_CASE, Boolean.FALSE.toString()));
 
-		final Boolean createAuthenticatedUsers = Boolean.parseBoolean(ServerConfiguration.getProperties().getProperty(
-			ServerConfiguration.AUTHENTICATION_CREATE_AUTHENTICATED_USERS, Boolean.FALSE.toString()));
-
 		synchronized (MonitorProvider.getInstance().getMonitor()) {
-			final Set<ESUser> users = orgUnitProvider.getUsers();
-			final Set<ACUser> internal = APIUtil.toInternal(users);
-			for (final ACUser user : internal) {
-				if (ignoreCase) {
-					if (user.getName().equalsIgnoreCase(username)) {
-						return user;
-					}
-				} else {
-					if (user.getName().equals(username)) {
-						return user;
-					}
-				}
-			}
-			if (createAuthenticatedUsers) {
-				final ACUser acUser = AccesscontrolFactory.eINSTANCE.createACUser();
-				acUser.setName(username);
-				acUser.setDescription(StringUtils.EMPTY);
-				orgUnitProvider.addUser(acUser.toAPI());
-				return acUser;
+			final Optional<ACUser> user = findExistingUser(orgUnitProvider, username, ignoreCase);
+			if (user.isPresent()) {
+				return user.get();
 			}
 			throw new AccessControlException();
 		}
 	}
 
+	/**
+	 * Checks the given {@link ESOrgUnitProvider} to find a user with the given username.
+	 *
+	 * @param orgUnitProvider the provider
+	 * @param username the username to find
+	 * @param ignoreCase <code>true</code> if the username is not case-sensitive, <code>false</code> otherwise
+	 * @return the user, if found
+	 * @since 1.8.1
+	 */
+	protected static final Optional<ACUser> findExistingUser(ESOrgUnitProvider orgUnitProvider, String username,
+		final Boolean ignoreCase) {
+		final Set<ESUser> users = orgUnitProvider.getUsers();
+		final Set<ACUser> internal = APIUtil.toInternal(users);
+		for (final ACUser user : internal) {
+			if (ignoreCase) {
+				if (user.getName().equalsIgnoreCase(username)) {
+					return Optional.of(user);
+				}
+			} else {
+				if (user.getName().equals(username)) {
+					return Optional.of(user);
+				}
+			}
+		}
+		return Optional.absent();
+	}
+
 }
diff --git a/tests/org.eclipse.emf.emfstore.server.test/src/org/eclipse/emf/emfstore/server/accesscontrol/test/AutoCreateACUserTestTest.java b/tests/org.eclipse.emf.emfstore.server.test/src/org/eclipse/emf/emfstore/server/accesscontrol/test/AutoCreateACUserTestTest.java
index d8a5a64..4cbfc67 100644
--- a/tests/org.eclipse.emf.emfstore.server.test/src/org/eclipse/emf/emfstore/server/accesscontrol/test/AutoCreateACUserTestTest.java
+++ b/tests/org.eclipse.emf.emfstore.server.test/src/org/eclipse/emf/emfstore/server/accesscontrol/test/AutoCreateACUserTestTest.java
@@ -11,20 +11,19 @@
  ******************************************************************************/
 package org.eclipse.emf.emfstore.server.accesscontrol.test;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-
 import java.util.LinkedHashMap;
 import java.util.Map;
 
 import org.eclipse.emf.emfstore.client.test.common.cases.ESTestWithLoggedInUserMock;
-import org.eclipse.emf.emfstore.client.test.common.util.ServerUtil;
 import org.eclipse.emf.emfstore.internal.server.ServerConfiguration;
-import org.eclipse.emf.emfstore.internal.server.model.accesscontrol.ACUser;
 import org.eclipse.emf.emfstore.server.exceptions.ESException;
 import org.junit.BeforeClass;
 import org.junit.Test;
 
+/**
+ * Assert that it is not possible to log in without password when auto-create authenticated users is set to true outside
+ * of LDAP auth.
+ */
 public class AutoCreateACUserTestTest extends ESTestWithLoggedInUserMock {
 
 	private static final String NOT_EXISTING_USER_NAME = "FOO_USER"; //$NON-NLS-1$
@@ -40,13 +39,9 @@
 		startEMFStoreWithAutoCreateProperty();
 	}
 
-	@Test
+	@Test(expected = ESException.class)
 	public void testAutoCreateACUser() throws ESException {
 		/* act */
 		getServer().login(NOT_EXISTING_USER_NAME, ""); //$NON-NLS-1$
-		/* assert */
-		final ACUser user = ServerUtil.getUser(getUsersession(), NOT_EXISTING_USER_NAME);
-		assertNotNull(user);
-		assertEquals(NOT_EXISTING_USER_NAME, user.getName());
 	}
 }