forked from External/mage
Added new client-server incompatible checks:
* added strict mode (client and server versions must be same, see MAGE_VERSION_MINOR_PATCH_MUST_BE_SAME); * you must enable string mode after github code changes in serializeable classes (see #4459); * added client-side version checks; * added error message on wrong version disconnects.
This commit is contained in:
parent
fa0e295932
commit
f223bdab31
6 changed files with 52 additions and 13 deletions
|
|
@ -61,6 +61,7 @@ public class SessionImpl implements Session {
|
|||
|
||||
private boolean canceled = false;
|
||||
private boolean jsonLogActive = false;
|
||||
private String lastError = "";
|
||||
|
||||
static {
|
||||
debugMode = System.getProperty("debug.mage") != null;
|
||||
|
|
@ -195,20 +196,29 @@ public class SessionImpl implements Session {
|
|||
&& handleRemotingTaskExceptions(new RemotingTask() {
|
||||
@Override
|
||||
public boolean run() throws Throwable {
|
||||
setLastError("");
|
||||
logger.info("Trying to log-in as " + getUserName() + " to XMAGE server at " + connection.getHost() + ':' + connection.getPort());
|
||||
boolean registerResult;
|
||||
if (connection.getAdminPassword() == null) {
|
||||
// for backward compatibility. don't remove twice call - first one does nothing but for version checking
|
||||
registerResult = server.connectUser(connection.getUsername(), connection.getPassword(), sessionId, client.getVersion(), connection.getUserIdStr());
|
||||
if (registerResult) {
|
||||
server.setUserData(connection.getUsername(), sessionId, connection.getUserData(), client.getVersion().toString(), connection.getUserIdStr());
|
||||
}
|
||||
} else {
|
||||
registerResult = server.connectAdmin(connection.getAdminPassword(), sessionId, client.getVersion());
|
||||
}
|
||||
if (registerResult) {
|
||||
serverState = server.getServerState();
|
||||
|
||||
// client side check for incompatible versions
|
||||
if (client.getVersion().compareTo(serverState.getVersion()) != 0) {
|
||||
String err = "Client and server versions are incompatible.";
|
||||
setLastError(err);
|
||||
logger.info(err);
|
||||
disconnect(false);
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!connection.getUsername().equals("Admin")) {
|
||||
server.setUserData(connection.getUsername(), sessionId, connection.getUserData(), client.getVersion().toString(), connection.getUserIdStr());
|
||||
updateDatabase(connection.isForceDBComparison(), serverState);
|
||||
}
|
||||
logger.info("Logged-in as " + getUserName() + " to MAGE server at " + connection.getHost() + ':' + connection.getPort());
|
||||
|
|
@ -1621,6 +1631,15 @@ public class SessionImpl implements Session {
|
|||
this.jsonLogActive = jsonLogActive;
|
||||
}
|
||||
|
||||
private void setLastError(String error) {
|
||||
lastError = error;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getLastError() {
|
||||
return lastError;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
class MageAuthenticator extends Authenticator {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue