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();