From b294bc403fe6acbadae8c43a531caec166eee9da Mon Sep 17 00:00:00 2001 From: lvca Date: Mon, 10 Aug 2015 17:31:29 +0200 Subject: [PATCH] Removed "replicator" user. --- .../server/hazelcast/ODistributedWorker.java | 21 ++-- .../server/distributed/OrientdbEdgeTest.java | 6 +- .../orient/server/OServer.java | 113 ++++++++++-------- .../ODistributedAbstractPlugin.java | 29 ++--- 4 files changed, 81 insertions(+), 88 deletions(-) diff --git a/distributed/src/main/java/com/orientechnologies/orient/server/hazelcast/ODistributedWorker.java b/distributed/src/main/java/com/orientechnologies/orient/server/hazelcast/ODistributedWorker.java index d66ae23d768..534f01ce5ba 100644 --- a/distributed/src/main/java/com/orientechnologies/orient/server/hazelcast/ODistributedWorker.java +++ b/distributed/src/main/java/com/orientechnologies/orient/server/hazelcast/ODistributedWorker.java @@ -19,11 +19,6 @@ */ package com.orientechnologies.orient.server.hazelcast; -import java.io.Serializable; -import java.util.Queue; -import java.util.concurrent.ArrayBlockingQueue; -import java.util.concurrent.TimeUnit; - import com.hazelcast.core.HazelcastInstanceNotActiveException; import com.hazelcast.core.IMap; import com.hazelcast.core.IQueue; @@ -38,7 +33,6 @@ import com.orientechnologies.orient.core.serialization.serializer.record.OSerializationSetThreadLocal; import com.orientechnologies.orient.server.config.OServerUserConfiguration; import com.orientechnologies.orient.server.distributed.ODiscardedResponse; -import com.orientechnologies.orient.server.distributed.ODistributedAbstractPlugin; import com.orientechnologies.orient.server.distributed.ODistributedException; import com.orientechnologies.orient.server.distributed.ODistributedRequest; import com.orientechnologies.orient.server.distributed.ODistributedServerLog; @@ -52,6 +46,11 @@ import com.orientechnologies.orient.server.distributed.task.OTxTask; import com.orientechnologies.orient.server.distributed.task.OUpdateRecordTask; +import java.io.Serializable; +import java.util.Queue; +import java.util.concurrent.ArrayBlockingQueue; +import java.util.concurrent.TimeUnit; + /** * Hazelcast implementation of distributed peer. There is one instance per database. Each node creates own instance to talk with * each others. @@ -154,19 +153,15 @@ public void run() { public void initDatabaseInstance() { if (database == null) { // OPEN IT - final OServerUserConfiguration replicatorUser = manager.getServerInstance().getUser( - ODistributedAbstractPlugin.REPLICATOR_USER); - database = (ODatabaseDocumentTx) manager.getServerInstance().openDatabase("document", databaseName, replicatorUser.name, - replicatorUser.password); + database = (ODatabaseDocumentTx) manager.getServerInstance().openDatabase("document", databaseName, "bypass", "bypass", null, + true); // AVOID RELOADING DB INFORMATION BECAUSE OF DEADLOCKS // database.reload(); } else if (database.isClosed()) { // DATABASE CLOSED, REOPEN IT - final OServerUserConfiguration replicatorUser = manager.getServerInstance().getUser( - ODistributedAbstractPlugin.REPLICATOR_USER); - database.open(replicatorUser.name, replicatorUser.password); + manager.getServerInstance().openDatabase(database, "bypass", "bypass", null, true); // AVOID RELOADING DB INFORMATION BECAUSE OF DEADLOCKS // database.reload(); diff --git a/distributed/src/test/java/com/orientechnologies/orient/server/distributed/OrientdbEdgeTest.java b/distributed/src/test/java/com/orientechnologies/orient/server/distributed/OrientdbEdgeTest.java index e2036200ad6..4fe610b922c 100644 --- a/distributed/src/test/java/com/orientechnologies/orient/server/distributed/OrientdbEdgeTest.java +++ b/distributed/src/test/java/com/orientechnologies/orient/server/distributed/OrientdbEdgeTest.java @@ -65,8 +65,8 @@ protected static OrientGraphFactory getGraphFactory() throws Exception { conf.put("storage.url", "remote:localhost/test"); conf.put("storage.pool-min", 1); conf.put("storage.pool-max", 10); - conf.put("storage.user", "admin"); - conf.put("storage.password", "admin"); + conf.put("storage.user", "root"); + conf.put("storage.password", "root"); OGlobalConfiguration.CLIENT_CONNECT_POOL_WAIT_TIMEOUT.setValue(15000); @@ -125,7 +125,7 @@ public static void setup() throws Exception { + " \n" + " \n" + " \n" - + " \n" + + " \n" + " \n" + " \n" + "\n" diff --git a/server/src/main/java/com/orientechnologies/orient/server/OServer.java b/server/src/main/java/com/orientechnologies/orient/server/OServer.java index 908307051fb..e43a46772e2 100755 --- a/server/src/main/java/com/orientechnologies/orient/server/OServer.java +++ b/server/src/main/java/com/orientechnologies/orient/server/OServer.java @@ -19,26 +19,6 @@ */ package com.orientechnologies.orient.server; -import java.io.ByteArrayInputStream; -import java.io.File; -import java.io.IOException; -import java.io.InputStream; -import java.lang.reflect.InvocationTargetException; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Random; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.CountDownLatch; -import java.util.concurrent.locks.ReentrantLock; - -import javax.management.InstanceAlreadyExistsException; -import javax.management.MBeanRegistrationException; -import javax.management.MalformedObjectNameException; -import javax.management.NotCompliantMBeanException; - import com.orientechnologies.common.console.DefaultConsoleReader; import com.orientechnologies.common.console.OConsoleReader; import com.orientechnologies.common.io.OFileUtils; @@ -70,7 +50,6 @@ import com.orientechnologies.orient.core.storage.impl.local.paginated.OLocalPaginatedStorage; import com.orientechnologies.orient.core.storage.impl.memory.ODirectMemoryStorage; import com.orientechnologies.orient.server.config.*; -import com.orientechnologies.orient.server.distributed.ODistributedAbstractPlugin; import com.orientechnologies.orient.server.distributed.ODistributedServerManager; import com.orientechnologies.orient.server.handler.OConfigurableHooksManager; import com.orientechnologies.orient.server.network.OServerNetworkListener; @@ -82,6 +61,25 @@ import com.orientechnologies.orient.server.plugin.OServerPluginManager; import com.orientechnologies.orient.server.security.OSecurityServerUser; +import javax.management.InstanceAlreadyExistsException; +import javax.management.MBeanRegistrationException; +import javax.management.MalformedObjectNameException; +import javax.management.NotCompliantMBeanException; +import java.io.ByteArrayInputStream; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.lang.reflect.InvocationTargetException; +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Random; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.locks.ReentrantLock; + public class OServer { private static final String ROOT_PASSWORD_VAR = "ORIENTDB_ROOT_PASSWORD"; private static ThreadGroup threadGroup; @@ -724,15 +722,25 @@ public ODatabase openDatabase(final String iDbType, final String iDbUrl, fina } public ODatabase openDatabase(final String iDbType, final String iDbUrl, final String user, final String password) { - return openDatabase(iDbType, iDbUrl, user, password, null); + return openDatabase(iDbType, iDbUrl, user, password, null, false); } public ODatabase openDatabase(final String iDbType, final String iDbUrl, final String user, final String password, ONetworkProtocolData data) { + return openDatabase(iDbType, iDbUrl, user, password, data, false); + } + + public ODatabase openDatabase(final String iDbType, final String iDbUrl, final String user, final String password, + ONetworkProtocolData data, final boolean iBypassAccess) { final String path = getStoragePath(iDbUrl); final ODatabaseInternal database = Orient.instance().getDatabaseFactory().createDatabase(iDbType, path); + return openDatabase(database, user, password, data, iBypassAccess); + } + + public ODatabase openDatabase(final ODatabaseInternal database, final String user, final String password, + final ONetworkProtocolData data, final boolean iBypassAccess) { final OStorage storage = database.getStorage(); if (database.isClosed()) { if (database.getStorage() instanceof ODirectMemoryStorage && !storage.exists()) { @@ -741,28 +749,27 @@ public ODatabase openDatabase(final String iDbType, final String iDbUrl, fina } catch (OStorageException e) { } } else { - try { - database.open(user, password); - if (data != null) { - data.serverUser = false; - data.serverUsername = null; - } - } catch (OSecurityException e) { - // TRY WITH SERVER'S USER + if (iBypassAccess) { + // BYPASS SECURITY + openDatabaseBypassingSecurity(database, data); + } else { try { - serverLogin(user, password, "database.passthrough"); - } catch (OSecurityException ex) { - throw e; - } + // TRY DATABASE AUTHENTICATION + database.open(user, password); + if (data != null) { + data.serverUser = false; + data.serverUsername = null; + } + } catch (OSecurityException e) { + // TRY WITH SERVER'S AUTHENTICATION + try { + serverLogin(user, password, "database.passthrough"); + } catch (OSecurityException ex) { + throw e; + } - // SERVER AUTHENTICATED, BYPASS SECURITY - database.activateOnCurrentThread(); - database.resetInitialization(); - database.setProperty(ODatabase.OPTIONS.SECURITY.toString(), OSecurityServerUser.class); - database.open(user, password); - if (data != null) { - data.serverUser = true; - data.serverUsername = user; + // SERVER AUTHENTICATED, BYPASS SECURITY + openDatabaseBypassingSecurity(database, data); } } } @@ -771,6 +778,17 @@ public ODatabase openDatabase(final String iDbType, final String iDbUrl, fina return database; } + protected void openDatabaseBypassingSecurity(final ODatabaseInternal database, final ONetworkProtocolData data) { + database.activateOnCurrentThread(); + database.resetInitialization(); + database.setProperty(ODatabase.OPTIONS.SECURITY.toString(), OSecurityServerUser.class); + database.open("internal", "internal"); + if (data != null) { + data.serverUser = true; + data.serverUsername = "internal"; + } + } + public ODatabaseInternal openDatabase(final ODatabaseInternal database) { database.activateOnCurrentThread(); @@ -778,17 +796,8 @@ public ODatabaseInternal openDatabase(final ODatabaseInternal database) { if (database.getStorage() instanceof ODirectMemoryStorage) database.create(); else { - final OServerUserConfiguration replicatorUser = getUser(ODistributedAbstractPlugin.REPLICATOR_USER); - try { - serverLogin(replicatorUser.name, replicatorUser.password, "database.passthrough"); - } catch (OSecurityException ex) { - throw ex; - } - // SERVER AUTHENTICATED, BYPASS SECURITY - database.resetInitialization(); - database.setProperty(ODatabase.OPTIONS.SECURITY.toString(), OSecurityServerUser.class); - database.open(replicatorUser.name, replicatorUser.password); + openDatabaseBypassingSecurity(database, null); } return database; diff --git a/server/src/main/java/com/orientechnologies/orient/server/distributed/ODistributedAbstractPlugin.java b/server/src/main/java/com/orientechnologies/orient/server/distributed/ODistributedAbstractPlugin.java index ddd1337b2eb..09d47f23e7e 100755 --- a/server/src/main/java/com/orientechnologies/orient/server/distributed/ODistributedAbstractPlugin.java +++ b/server/src/main/java/com/orientechnologies/orient/server/distributed/ODistributedAbstractPlugin.java @@ -19,15 +19,6 @@ */ package com.orientechnologies.orient.server.distributed; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.IOException; -import java.util.HashMap; -import java.util.Map; -import java.util.concurrent.Callable; -import java.util.concurrent.ConcurrentHashMap; - import com.orientechnologies.common.log.OLogManager; import com.orientechnologies.common.parser.OSystemVariableResolver; import com.orientechnologies.orient.core.Orient; @@ -45,6 +36,15 @@ import com.orientechnologies.orient.server.distributed.ODistributedServerLog.DIRECTION; import com.orientechnologies.orient.server.plugin.OServerPluginAbstract; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.Callable; +import java.util.concurrent.ConcurrentHashMap; + /** * Abstract plugin to manage the distributed environment. * @@ -53,9 +53,6 @@ */ public abstract class ODistributedAbstractPlugin extends OServerPluginAbstract implements ODistributedServerManager, ODatabaseLifecycleListener { - public static final String REPLICATOR_USER = "replicator"; - protected static final String MASTER_AUTO = "$auto"; - protected static final String PAR_DEF_DISTRIB_DB_CONFIG = "configuration.db.default"; protected static final String FILE_DISTRIBUTED_DB_CONFIG = "distributed-config.json"; @@ -121,14 +118,6 @@ public void config(OServer oServer, OServerParameterConfiguration[] iParams) { setDefaultDatabaseConfigFile(param.value); } } - - if (serverInstance.getUser(REPLICATOR_USER) == null) - // CREATE THE REPLICATOR USER - try { - serverInstance.addUser(REPLICATOR_USER, null, "database.passthrough"); - } catch (IOException e) { - throw new OConfigurationException("Error on creating 'replicator' user", e); - } } public void setDefaultDatabaseConfigFile(final String iFile) {