You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mina.apache.org by be...@apache.org on 2013/07/08 17:09:40 UTC
git commit: VYSPER-346: domain check in JIDs is now considering
different casings. perform sanity checks on XMPPServer instantiation.
Updated Branches:
refs/heads/master 9ffe7f302 -> 10eee408a
VYSPER-346: domain check in JIDs is now considering different casings.
perform sanity checks on XMPPServer instantiation.
Project: http://git-wip-us.apache.org/repos/asf/mina-vysper/repo
Commit: http://git-wip-us.apache.org/repos/asf/mina-vysper/commit/10eee408
Tree: http://git-wip-us.apache.org/repos/asf/mina-vysper/tree/10eee408
Diff: http://git-wip-us.apache.org/repos/asf/mina-vysper/diff/10eee408
Branch: refs/heads/master
Commit: 10eee408ace00c05d5059031fe80672f635c6ebd
Parents: 9ffe7f3
Author: Bernd Fondermann <be...@brainlounge.de>
Authored: Mon Jul 8 16:49:15 2013 +0200
Committer: Bernd Fondermann <be...@brainlounge.de>
Committed: Mon Jul 8 16:49:15 2013 +0200
----------------------------------------------------------------------
.../vysper/xmpp/addressing/EntityImpl.java | 7 +++++-
.../vysper/xmpp/addressing/EntityUtils.java | 2 +-
.../InBandRegistrationHandler.java | 3 ++-
.../vysper/xmpp/protocol/ProtocolWorker.java | 5 ++--
.../apache/vysper/xmpp/server/XMPPServer.java | 12 ++++++++++
.../xmpp/addressing/EntityUtilsTestCase.java | 16 +++++++++++++
.../vysper/xmpp/server/XMPPServerTestCase.java | 24 ++++++++++++++++++++
.../extension/xep0045_muc/MUCModule.java | 4 ++--
.../xep0060_pubsub/PublishSubscribeModule.java | 2 +-
9 files changed, 67 insertions(+), 8 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/mina-vysper/blob/10eee408/server/core/src/main/java/org/apache/vysper/xmpp/addressing/EntityImpl.java
----------------------------------------------------------------------
diff --git a/server/core/src/main/java/org/apache/vysper/xmpp/addressing/EntityImpl.java b/server/core/src/main/java/org/apache/vysper/xmpp/addressing/EntityImpl.java
index 7c3227b..0c6e05a 100644
--- a/server/core/src/main/java/org/apache/vysper/xmpp/addressing/EntityImpl.java
+++ b/server/core/src/main/java/org/apache/vysper/xmpp/addressing/EntityImpl.java
@@ -159,7 +159,7 @@ public class EntityImpl implements Entity {
final Entity that = (Entity) o;
- if (domain != null ? !domain.equals(that.getDomain()) : that.getDomain() != null)
+ if (!checkDomainsEqual(that))
return false;
if (isNodeSet() != that.isNodeSet())
return false;
@@ -177,6 +177,11 @@ public class EntityImpl implements Entity {
return true;
}
+ public boolean checkDomainsEqual(Entity that) {
+ if (domain == null) return that.getDomain() == null;
+ return domain.toLowerCase().equals(that.getDomain().toLowerCase());
+ }
+
@Override
public int hashCode() {
int result;
http://git-wip-us.apache.org/repos/asf/mina-vysper/blob/10eee408/server/core/src/main/java/org/apache/vysper/xmpp/addressing/EntityUtils.java
----------------------------------------------------------------------
diff --git a/server/core/src/main/java/org/apache/vysper/xmpp/addressing/EntityUtils.java b/server/core/src/main/java/org/apache/vysper/xmpp/addressing/EntityUtils.java
index 0a9f128..92cd722 100644
--- a/server/core/src/main/java/org/apache/vysper/xmpp/addressing/EntityUtils.java
+++ b/server/core/src/main/java/org/apache/vysper/xmpp/addressing/EntityUtils.java
@@ -33,7 +33,7 @@ public class EntityUtils {
* @return TRUE iff toVerify JID equals the server's JID
*/
public static boolean isAddressingServer(Entity toVerify, Entity serverJID) {
- return toVerify.getDomain().equals(serverJID.getDomain());
+ return toVerify.getDomain().toLowerCase().equals(serverJID.getDomain().toLowerCase());
}
/**
http://git-wip-us.apache.org/repos/asf/mina-vysper/blob/10eee408/server/core/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0077_inbandreg/InBandRegistrationHandler.java
----------------------------------------------------------------------
diff --git a/server/core/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0077_inbandreg/InBandRegistrationHandler.java b/server/core/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0077_inbandreg/InBandRegistrationHandler.java
index a0f74ed..189f260 100644
--- a/server/core/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0077_inbandreg/InBandRegistrationHandler.java
+++ b/server/core/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0077_inbandreg/InBandRegistrationHandler.java
@@ -25,6 +25,7 @@ import org.apache.vysper.xml.fragment.XMLSemanticError;
import org.apache.vysper.xmpp.addressing.Entity;
import org.apache.vysper.xmpp.addressing.EntityFormatException;
import org.apache.vysper.xmpp.addressing.EntityImpl;
+import org.apache.vysper.xmpp.addressing.EntityUtils;
import org.apache.vysper.xmpp.authentication.AccountCreationException;
import org.apache.vysper.xmpp.authentication.AccountManagement;
import org.apache.vysper.xmpp.modules.core.base.handler.DefaultIQHandler;
@@ -128,7 +129,7 @@ public class InBandRegistrationHandler extends DefaultIQHandler {
Entity user;
if(username.contains("@")) {
user = EntityImpl.parse(username);
- if(!serverRuntimeContext.getServerEnitity().getDomain().equals(user.getDomain())) {
+ if(!EntityUtils.isAddressingServer(serverRuntimeContext.getServerEnitity(), user)) {
throw new XMLSemanticError("Username must be in the same domain as the server");
}
} else {
http://git-wip-us.apache.org/repos/asf/mina-vysper/blob/10eee408/server/core/src/main/java/org/apache/vysper/xmpp/protocol/ProtocolWorker.java
----------------------------------------------------------------------
diff --git a/server/core/src/main/java/org/apache/vysper/xmpp/protocol/ProtocolWorker.java b/server/core/src/main/java/org/apache/vysper/xmpp/protocol/ProtocolWorker.java
index 1f4c20d..9f98c12 100644
--- a/server/core/src/main/java/org/apache/vysper/xmpp/protocol/ProtocolWorker.java
+++ b/server/core/src/main/java/org/apache/vysper/xmpp/protocol/ProtocolWorker.java
@@ -24,6 +24,7 @@ import java.util.List;
import java.util.Map;
import org.apache.vysper.xmpp.addressing.Entity;
+import org.apache.vysper.xmpp.addressing.EntityUtils;
import org.apache.vysper.xmpp.modules.extension.xep0077_inbandreg.InBandRegistrationHandler;
import org.apache.vysper.xmpp.protocol.exception.TLSException;
import org.apache.vysper.xmpp.protocol.worker.AuthenticatedProtocolWorker;
@@ -125,7 +126,7 @@ public class ProtocolWorker implements StanzaProcessor {
coreStanza, StanzaErrorType.MODIFY, "Missing from attribute", null, null);
ResponseWriter.writeResponse(sessionContext, errorStanza);
return;
- } else if(!from.getDomain().equals(sessionContext.getInitiatingEntity().getDomain())) {
+ } else if(!EntityUtils.isAddressingServer(sessionContext.getInitiatingEntity(), from)) {
// make sure the from attribute refers to the correct remote server
Stanza errorStanza = ServerErrorResponses.getStanzaError(StanzaErrorCondition.UNKNOWN_SENDER,
@@ -141,7 +142,7 @@ public class ProtocolWorker implements StanzaProcessor {
coreStanza, StanzaErrorType.MODIFY, "Missing to attribute", null, null);
ResponseWriter.writeResponse(sessionContext, errorStanza);
return;
- } else if(!to.getDomain().equals(serverRuntimeContext.getServerEnitity().getDomain())) {
+ } else if(!EntityUtils.isAddressingServer(serverRuntimeContext.getServerEnitity(), to)) {
// TODO what's the appropriate error? StreamErrorCondition.IMPROPER_ADDRESSING?
Stanza errorStanza = ServerErrorResponses.getStanzaError(StanzaErrorCondition.BAD_REQUEST,
coreStanza, StanzaErrorType.MODIFY, "Invalid to attribute", null, null);
http://git-wip-us.apache.org/repos/asf/mina-vysper/blob/10eee408/server/core/src/main/java/org/apache/vysper/xmpp/server/XMPPServer.java
----------------------------------------------------------------------
diff --git a/server/core/src/main/java/org/apache/vysper/xmpp/server/XMPPServer.java b/server/core/src/main/java/org/apache/vysper/xmpp/server/XMPPServer.java
index 72e25e6..01baafb 100644
--- a/server/core/src/main/java/org/apache/vysper/xmpp/server/XMPPServer.java
+++ b/server/core/src/main/java/org/apache/vysper/xmpp/server/XMPPServer.java
@@ -29,6 +29,7 @@ import java.util.List;
import org.apache.commons.lang.StringUtils;
import org.apache.vysper.storage.StorageProviderRegistry;
import org.apache.vysper.storage.logstanzas.LogStorageProvider;
+import org.apache.vysper.xmpp.addressing.EntityFormatException;
import org.apache.vysper.xmpp.addressing.EntityImpl;
import org.apache.vysper.xmpp.authentication.AccountManagement;
import org.apache.vysper.xmpp.authentication.Plain;
@@ -88,6 +89,17 @@ public class XMPPServer {
private int maxExternalRelayThreads = -1;
public XMPPServer(String domain) {
+ if (StringUtils.isBlank(domain)) {
+ throw new IllegalArgumentException("server domain cannot be blank, empty or NULL");
+ }
+ if (!domain.equals(domain.toLowerCase())) {
+ throw new IllegalArgumentException("server domain must be given in all lower-case letters, but was: " + domain);
+ }
+ try {
+ EntityImpl.parse(domain);
+ } catch (EntityFormatException e) {
+ throw new IllegalArgumentException("server domain must be a valid domain name, but was: " + domain);
+ }
this.serverDomain = domain;
// default list of SASL mechanisms
http://git-wip-us.apache.org/repos/asf/mina-vysper/blob/10eee408/server/core/src/test/java/org/apache/vysper/xmpp/addressing/EntityUtilsTestCase.java
----------------------------------------------------------------------
diff --git a/server/core/src/test/java/org/apache/vysper/xmpp/addressing/EntityUtilsTestCase.java b/server/core/src/test/java/org/apache/vysper/xmpp/addressing/EntityUtilsTestCase.java
index 5c36b35..d9f1454 100644
--- a/server/core/src/test/java/org/apache/vysper/xmpp/addressing/EntityUtilsTestCase.java
+++ b/server/core/src/test/java/org/apache/vysper/xmpp/addressing/EntityUtilsTestCase.java
@@ -42,6 +42,22 @@ public class EntityUtilsTestCase extends TestCase {
assertAddressingServer("bar@vysper.org/xyz");
assertNotAddressingServer("foovysper.org");
assertNotAddressingServer("foo.org");
+
+ }
+
+ public void testIsMixedCasing() {
+ assertAddressingServer("vYsper.org");
+ assertAddressingServer("VYSPER.ORG");
+ assertAddressingServer("vysper.org");
+ assertAddressingServer("vysper.ORG");
+ assertAddressingServer("Vysper.ORG");
+ assertAddressingServer("Vysper.Org");
+ assertNotAddressingServer("foo.vYsper.org");
+ assertAddressingServer("bar@vYsper.oRg");
+ assertAddressingServer("bar@vYsper.ORG/xyz");
+ assertNotAddressingServer("foovYsper.org");
+ assertNotAddressingServer("foo.org");
+ assertNotAddressingServer("fOO.org");
}
http://git-wip-us.apache.org/repos/asf/mina-vysper/blob/10eee408/server/core/src/test/java/org/apache/vysper/xmpp/server/XMPPServerTestCase.java
----------------------------------------------------------------------
diff --git a/server/core/src/test/java/org/apache/vysper/xmpp/server/XMPPServerTestCase.java b/server/core/src/test/java/org/apache/vysper/xmpp/server/XMPPServerTestCase.java
new file mode 100644
index 0000000..4a02ca1
--- /dev/null
+++ b/server/core/src/test/java/org/apache/vysper/xmpp/server/XMPPServerTestCase.java
@@ -0,0 +1,24 @@
+package org.apache.vysper.xmpp.server;
+
+import junit.framework.TestCase;
+
+/**
+ */
+public class XMPPServerTestCase extends TestCase {
+
+ public void testDomainName() {
+ expectConstructorIAE("");
+ expectConstructorIAE(null);
+ expectConstructorIAE(" ");
+ expectConstructorIAE("vYsper.org");
+ }
+
+ private void expectConstructorIAE(String domain) {
+ try {
+ new XMPPServer(domain);
+ fail("expected IllegalArgumentException");
+ } catch (IllegalArgumentException e) {
+ // success, fail through
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/mina-vysper/blob/10eee408/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/MUCModule.java
----------------------------------------------------------------------
diff --git a/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/MUCModule.java b/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/MUCModule.java
index f25960d..71f4422 100644
--- a/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/MUCModule.java
+++ b/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/MUCModule.java
@@ -148,7 +148,7 @@ public class MUCModule extends DefaultDiscoAwareModule implements Component, Com
}
public List<InfoElement> getComponentInfosFor(InfoRequest request) throws ServiceDiscoveryRequestException {
- if (!fullDomain.getDomain().equals(request.getTo().getDomain()))
+ if (!EntityUtils.isAddressingServer(fullDomain, request.getTo()))
return null;
if (request.getTo().getNode() == null) {
@@ -198,7 +198,7 @@ public class MUCModule extends DefaultDiscoAwareModule implements Component, Com
return componentItem;
}
return null;
- } else if (fullDomain.getDomain().equals(to.getDomain())) {
+ } else if (EntityUtils.isAddressingServer(fullDomain, to)) {
// might be an items request on a room
Room room = conference.findRoom(to.getBareJID());
if (room != null) {
http://git-wip-us.apache.org/repos/asf/mina-vysper/blob/10eee408/server/extensions/xep0060-pubsub/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/PublishSubscribeModule.java
----------------------------------------------------------------------
diff --git a/server/extensions/xep0060-pubsub/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/PublishSubscribeModule.java b/server/extensions/xep0060-pubsub/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/PublishSubscribeModule.java
index c79850c..fca334c 100644
--- a/server/extensions/xep0060-pubsub/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/PublishSubscribeModule.java
+++ b/server/extensions/xep0060-pubsub/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/PublishSubscribeModule.java
@@ -171,7 +171,7 @@ public class PublishSubscribeModule extends DefaultDiscoAwareModule implements C
* @see ComponentInfoRequestListener#getComponentInfosFor(org.apache.vysper.xmpp.modules.servicediscovery.management.InfoRequest)
*/
public List<InfoElement> getComponentInfosFor(InfoRequest request) throws ServiceDiscoveryRequestException {
- if (!fullDomain.getDomain().equals(request.getTo().getDomain()))
+ if (!EntityUtils.isAddressingServer(fullDomain, request.getTo()))
return null;
CollectionNode root = serviceConfiguration.getRootNode();