You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by no...@apache.org on 2006/12/20 13:18:45 UTC

svn commit: r489065 - in /james/server/trunk/src: conf/ java/org/apache/james/core/ java/org/apache/james/management/ java/org/apache/james/services/ java/org/apache/james/util/ java/org/apache/james/vut/ test/org/apache/james/test/mock/james/ test/org...

Author: norman
Date: Wed Dec 20 04:18:43 2006
New Revision: 489065

URL: http://svn.apache.org/viewvc?view=rev&rev=489065
Log:
Make it possible to add an aliasdomain to james. See JAMES-740
Throw ConfigurationException if an invalid mappingLimit was set.
Some code cleanup.

Modified:
    james/server/trunk/src/conf/james-config.xml
    james/server/trunk/src/java/org/apache/james/core/DefaultVirtualUserTable.java
    james/server/trunk/src/java/org/apache/james/management/VirtualUserTableManagement.java
    james/server/trunk/src/java/org/apache/james/services/VirtualUserTable.java
    james/server/trunk/src/java/org/apache/james/services/VirtualUserTableManagement.java
    james/server/trunk/src/java/org/apache/james/services/VirtualUserTableManagementService.java
    james/server/trunk/src/java/org/apache/james/util/VirtualUserTableUtil.java
    james/server/trunk/src/java/org/apache/james/vut/AbstractVirtualUserTable.java
    james/server/trunk/src/java/org/apache/james/vut/JDBCVirtualUserTable.java
    james/server/trunk/src/java/org/apache/james/vut/XMLVirtualUserTable.java
    james/server/trunk/src/test/org/apache/james/test/mock/james/MockVirtualUserTableManagementImpl.java
    james/server/trunk/src/test/org/apache/james/vut/AbstractVirtualUserTableTest.java
    james/server/trunk/src/test/org/apache/james/vut/JDBCVirtualUserTableTest.java
    james/server/trunk/src/test/org/apache/james/vut/XMLVirtualUserTableTest.java

Modified: james/server/trunk/src/conf/james-config.xml
URL: http://svn.apache.org/viewvc/james/server/trunk/src/conf/james-config.xml?view=diff&rev=489065&r1=489064&r2=489065
==============================================================================
--- james/server/trunk/src/conf/james-config.xml (original)
+++ james/server/trunk/src/conf/james-config.xml Wed Dec 20 04:18:43 2006
@@ -1504,10 +1504,19 @@
    
    <!-- The VirtualUserTable Store block -->
    <virtualusertable-store>
-   
+      <!-- Configure VirtualUserTable stores here. -->
+      <!-- -->
+      <!-- If set recursiveMapping false only the first mapping will get processed. -->
+      <!-- Default true. -->
+      <!-- By setting the mappingLimit you can specify how much mapping will get processed -->
+      <!-- before a bounce will send. This avoid infinity loops. Default 10.  -->
+      
       <!-- The DefaultVirtualUserTable  for storing James' VirtualUserTable mappings. -->
       <!--
       <table name="DefaultVirtualUserTable" class="org.apache.james.vut.XMLVirtualUserTable">
+         <recursiveMapping> true </recursiveMapping>
+         <mappingLimit> 10 </mappingLimit>
+         
          <mapping> some@domain=someuser </mapping>
       </table>
       -->
@@ -1521,6 +1530,8 @@
       <!-- The DefaultVirtualUserTable  for storing James' VirtualUserTable mappings. -->
       <!-- TEMPORARY DEFAULT: db using Derby  -->
       <table name="DefaultVirtualUserTable" class="org.apache.james.vut.JDBCVirtualUserTable" destinationURL="db://maildb/VirtualUserTable">
+         <recursiveMapping> true </recursiveMapping>
+         <mappingLimit> 10 </mappingLimit>
          <sqlFile>file://conf/sqlResources.xml</sqlFile>
       </table>
    </virtualusertable-store>

Modified: james/server/trunk/src/java/org/apache/james/core/DefaultVirtualUserTable.java
URL: http://svn.apache.org/viewvc/james/server/trunk/src/java/org/apache/james/core/DefaultVirtualUserTable.java?view=diff&rev=489065&r1=489064&r2=489065
==============================================================================
--- james/server/trunk/src/java/org/apache/james/core/DefaultVirtualUserTable.java (original)
+++ james/server/trunk/src/java/org/apache/james/core/DefaultVirtualUserTable.java Wed Dec 20 04:18:43 2006
@@ -135,4 +135,18 @@
     public Map getAllMappings() {
         return vut.getAllMappings();
     }
+
+    /**
+     * @see org.apache.james.services.VirtualUserTableManagement#addAliasDomain(java.lang.String, java.lang.String)
+     */
+    public boolean addAliasDomainMapping(String aliasDomain, String realDomain) throws InvalidMappingException {
+        return vut.addAliasDomainMapping(aliasDomain, realDomain);
+    }
+
+    /**
+     * @see org.apache.james.services.VirtualUserTableManagement#removeAliasDomain(java.lang.String, java.lang.String)
+     */
+    public boolean removeAliasDomainMapping(String aliasDomain, String realDomain) throws InvalidMappingException {
+        return vut.removeAliasDomainMapping(aliasDomain, realDomain);
+    }
 }

Modified: james/server/trunk/src/java/org/apache/james/management/VirtualUserTableManagement.java
URL: http://svn.apache.org/viewvc/james/server/trunk/src/java/org/apache/james/management/VirtualUserTableManagement.java?view=diff&rev=489065&r1=489064&r2=489065
==============================================================================
--- james/server/trunk/src/java/org/apache/james/management/VirtualUserTableManagement.java (original)
+++ james/server/trunk/src/java/org/apache/james/management/VirtualUserTableManagement.java Wed Dec 20 04:18:43 2006
@@ -189,4 +189,26 @@
     public Map getAllMappings(String virtualUserTable) throws VirtualUserTableManagementException{
         return getTable(virtualUserTable).getAllMappings();
     }
+
+    /**
+     * @see org.apache.james.services.VirtualUserTableManagementService#addAliasDomainMapping(java.lang.String, java.lang.String, java.lang.String)
+     */
+    public boolean addAliasDomainMapping(String virtualUserTable, String aliasDomain, String realDomain) throws VirtualUserTableManagementException {
+        try {
+            return getTable(virtualUserTable).addAliasDomainMapping(aliasDomain, realDomain);
+        } catch (InvalidMappingException e) {
+            throw new VirtualUserTableManagementException(e);
+        }
+    }
+
+    /**
+     * @see org.apache.james.services.VirtualUserTableManagementService#removeAliasDomainMapping(java.lang.String, java.lang.String, java.lang.String)
+     */
+    public boolean removeAliasDomainMapping(String virtualUserTable, String aliasDomain, String realDomain) throws VirtualUserTableManagementException {
+        try {
+            return getTable(virtualUserTable).removeAliasDomainMapping(aliasDomain, realDomain);
+        } catch (InvalidMappingException e) {
+            throw new VirtualUserTableManagementException(e);
+        }
+    }
 }

Modified: james/server/trunk/src/java/org/apache/james/services/VirtualUserTable.java
URL: http://svn.apache.org/viewvc/james/server/trunk/src/java/org/apache/james/services/VirtualUserTable.java?view=diff&rev=489065&r1=489064&r2=489065
==============================================================================
--- james/server/trunk/src/java/org/apache/james/services/VirtualUserTable.java (original)
+++ james/server/trunk/src/java/org/apache/james/services/VirtualUserTable.java Wed Dec 20 04:18:43 2006
@@ -42,9 +42,14 @@
     public static final String ERROR_PREFIX = "error:";
     
     /**
-     * The prefix which is used for regex prefix
+     * The prefix which is used for regex mappings
      */
     public static final String REGEX_PREFIX = "regex:";
+    
+    /**
+     * The prefix which is used for alias domain mappings
+     */
+    public static final String ALIASDOMAIN_PREFIX = "domain:";
     
     /**
      * Return the mapped MailAddress for the given address. Return null if no 

Modified: james/server/trunk/src/java/org/apache/james/services/VirtualUserTableManagement.java
URL: http://svn.apache.org/viewvc/james/server/trunk/src/java/org/apache/james/services/VirtualUserTableManagement.java?view=diff&rev=489065&r1=489064&r2=489065
==============================================================================
--- james/server/trunk/src/java/org/apache/james/services/VirtualUserTableManagement.java (original)
+++ james/server/trunk/src/java/org/apache/james/services/VirtualUserTableManagement.java Wed Dec 20 04:18:43 2006
@@ -140,4 +140,24 @@
      * @return Map which holds all mappings
      */
     public Map getAllMappings();
+    
+    /**
+     * Add aliasDomain mapping
+     * 
+     * @param aliasDomain the aliasdomain which should be mapped to the realDomain
+     * @param realDomain the realDomain
+     * @return true if successfilly
+     * @throws InvalidMappingException
+     */
+    public boolean addAliasDomainMapping(String aliasDomain, String realDomain) throws InvalidMappingException;
+    
+    /**
+     * Remove aliasDomain mapping
+     * 
+     * @param aliasDomain the aliasdomain which should be mapped to the realDomain
+     * @param realDomain the realDomain
+     * @return true if successfilly
+     * @throws InvalidMappingException
+     */
+    public boolean removeAliasDomainMapping(String aliasDomain, String realDomain) throws InvalidMappingException;
 }

Modified: james/server/trunk/src/java/org/apache/james/services/VirtualUserTableManagementService.java
URL: http://svn.apache.org/viewvc/james/server/trunk/src/java/org/apache/james/services/VirtualUserTableManagementService.java?view=diff&rev=489065&r1=489064&r2=489065
==============================================================================
--- james/server/trunk/src/java/org/apache/james/services/VirtualUserTableManagementService.java (original)
+++ james/server/trunk/src/java/org/apache/james/services/VirtualUserTableManagementService.java Wed Dec 20 04:18:43 2006
@@ -150,4 +150,26 @@
      * @throws VirtualUserTableManagementException 
      */
     public Map getAllMappings(String virtualUserTable) throws VirtualUserTableManagementException;
+    
+    /**
+     * Add aliasDomain mapping
+     * 
+     * @param virtualUserTable The virtualUserTable 
+     * @param aliasDomain the aliasdomain which should be mapped to the realDomain
+     * @param realDomain the realDomain
+     * @return true if successfilly
+     * @throws InvalidMappingException
+     */
+    public boolean addAliasDomainMapping(String virtualUserTable, String aliasDomain, String realDomain) throws VirtualUserTableManagementException;
+    
+    /**
+     * Remove aliasDomain mapping
+     * 
+     * @param virtualUserTable The virtualUserTable 
+     * @param aliasDomain the aliasdomain which should be mapped to the realDomain
+     * @param realDomain the realDomain
+     * @return true if successfilly
+     * @throws InvalidMappingException
+     */
+    public boolean removeAliasDomainMapping(String virtualUserTable, String aliasDomain, String realDomain) throws VirtualUserTableManagementException;
 }

Modified: james/server/trunk/src/java/org/apache/james/util/VirtualUserTableUtil.java
URL: http://svn.apache.org/viewvc/james/server/trunk/src/java/org/apache/james/util/VirtualUserTableUtil.java?view=diff&rev=489065&r1=489064&r2=489065
==============================================================================
--- james/server/trunk/src/java/org/apache/james/util/VirtualUserTableUtil.java (original)
+++ james/server/trunk/src/java/org/apache/james/util/VirtualUserTableUtil.java Wed Dec 20 04:18:43 2006
@@ -129,7 +129,8 @@
       */
      public static String getSeparator(String targetString) {
         return (targetString.indexOf(',') > -1 ? "," : (targetString
-        .indexOf(';') > -1 ? ";" : ((targetString.indexOf(VirtualUserTable.ERROR_PREFIX) > -1 || targetString.indexOf(VirtualUserTable.REGEX_PREFIX) > -1)? "" : ":")));
+        .indexOf(';') > -1 ? ";" : ((targetString.indexOf(VirtualUserTable.ERROR_PREFIX) > -1 
+            || targetString.indexOf(VirtualUserTable.REGEX_PREFIX) > -1 || targetString.indexOf(VirtualUserTable.ALIASDOMAIN_PREFIX) > -1)? "" : ":")));
      }
      
      /**
@@ -156,16 +157,10 @@
      * Return a Collection which holds the extracted mappings of the given String
      * 
      * @param rawMapping
+     * @deprecated Use mappingToCollection(String rawMapping)
      */
      public static Collection getMappings(String rawMapping) {
-        ArrayList map = new ArrayList();
-        StringTokenizer tokenizer = new StringTokenizer(rawMapping,
-        VirtualUserTableUtil.getSeparator(rawMapping));
-
-        while (tokenizer.hasMoreTokens()) {
-            map.add(tokenizer.nextToken().trim());
-        }
-        return map;
+        return mappingToCollection(rawMapping);
     }
      
      /**

Modified: james/server/trunk/src/java/org/apache/james/vut/AbstractVirtualUserTable.java
URL: http://svn.apache.org/viewvc/james/server/trunk/src/java/org/apache/james/vut/AbstractVirtualUserTable.java?view=diff&rev=489065&r1=489064&r2=489065
==============================================================================
--- james/server/trunk/src/java/org/apache/james/vut/AbstractVirtualUserTable.java (original)
+++ james/server/trunk/src/java/org/apache/james/vut/AbstractVirtualUserTable.java Wed Dec 20 04:18:43 2006
@@ -85,7 +85,11 @@
         Configuration mappingLimitConf = arg0.getChild("mappingLimit", false);
         
         if (mappingLimitConf != null )  {
-            setMappingLimit(mappingLimitConf.getValueAsInteger(10));
+            try {
+                setMappingLimit(mappingLimitConf.getValueAsInteger(10));
+            } catch (IllegalArgumentException e) {
+                throw new ConfigurationException(e.getMessage());
+            }
         }
     }
     
@@ -93,7 +97,14 @@
         this.recursive = recursive;
     }
     
-    public void setMappingLimit(int mappingLimit) {
+    /**
+     * Set the mappingLimit
+     * 
+     * @param mappingLimit the mappingLimit
+     * @throws IllegalArgumentException get thrown if mappingLimit smaller then 1 is used
+     */
+    public void setMappingLimit(int mappingLimit) throws IllegalArgumentException {
+        if (mappingLimit < 1) throw new IllegalArgumentException("The minimum mappingLimit is 1");
         this.mappingLimit = mappingLimit;
     }
     
@@ -119,7 +130,7 @@
                 throw new ErrorMappingException(targetString.substring(VirtualUserTable.ERROR_PREFIX.length()));
 
             } else {
-                Iterator map = VirtualUserTableUtil.getMappings(targetString).iterator();
+                Iterator map = VirtualUserTableUtil.mappingToCollection(targetString).iterator();
 
                 while (map.hasNext()) {
                     String target = map.next().toString();
@@ -133,10 +144,12 @@
                             // should never happen
                             getLogger().error("Exception during regexMap processing: ", e);
                         } 
-
-                        if (target == null) continue;
+                    } else if (target.startsWith(VirtualUserTable.ALIASDOMAIN_PREFIX)) {
+                        target = user + "@" + target.substring(VirtualUserTable.ALIASDOMAIN_PREFIX.length());
                     }
 
+                    if (target == null) continue;
+                    
                     StringBuffer buf = new StringBuffer().append("Valid virtual user mapping ")
                                                          .append(user).append("@").append(domain)
                                                          .append(" to ").append(target);
@@ -176,9 +189,7 @@
                     } else {
                         mappings.add(target);
                     }
-               
-                }
-                
+                } 
             }
             return mappings;
         }
@@ -274,6 +285,9 @@
             return addErrorMapping(user,domain,map.substring(VirtualUserTable.ERROR_PREFIX.length()));
         } else if (map.startsWith(VirtualUserTable.REGEX_PREFIX)) {
             return addRegexMapping(user,domain,map.substring(VirtualUserTable.REGEX_PREFIX.length()));
+        } else if (map.startsWith(VirtualUserTable.ALIASDOMAIN_PREFIX)) {
+            if (user != null) throw new InvalidMappingException("User must be null for aliasDomain mappings");
+            return addAliasDomainMapping(domain,map.substring(VirtualUserTable.ALIASDOMAIN_PREFIX.length()));
         } else {
             return addAddressMapping(user,domain,map);
         }
@@ -289,6 +303,9 @@
             return removeErrorMapping(user,domain,map.substring(VirtualUserTable.ERROR_PREFIX.length()));
         } else if (map.startsWith(VirtualUserTable.REGEX_PREFIX)) {
             return removeRegexMapping(user,domain,map.substring(VirtualUserTable.REGEX_PREFIX.length()));
+        } else if (map.startsWith(VirtualUserTable.ALIASDOMAIN_PREFIX)) {
+            if (user != null) throw new InvalidMappingException("User must be null for aliasDomain mappings");
+            return removeAliasDomainMapping(domain,map.substring(VirtualUserTable.ALIASDOMAIN_PREFIX.length()));
         } else {
             return removeAddressMapping(user,domain,map);
         }
@@ -340,8 +357,7 @@
             if (autoDetect == true && hostName.equals("localhost") == false && domains.contains(hostName) == false) {
                 domains.add(hostName);
             }
-
-            
+           
             if (autoDetectIP == true) {
                 List ipList = DomainListUtil.getDomainsIP(domains,dns,getLogger());
                 for(int i = 0; i < ipList.size(); i++) {
@@ -386,19 +402,56 @@
     }
 
     /**
-     * Override to map virtual recipients to real recipients, both local and non-local.
-     * Each key in the provided map corresponds to a potential virtual recipient, stored as
-     * a <code>MailAddress</code> object.
-     * 
-     * Translate virtual recipients to real recipients by mapping a string containing the
-     * address of the real recipient as a value to a key. Leave the value <code>null<code>
-     * if no mapping should be performed. Multiple recipients may be specified by delineating
-     * the mapped string with commas, semi-colons or colons.
+     * @see org.apache.james.services.VirtualUserTableManagement#addAliasDomainMapping(java.lang.String, java.lang.String)
+     */
+    public boolean addAliasDomainMapping(String aliasDomain, String realDomain) throws InvalidMappingException {
+        getLogger().info("Add domain mapping: " + aliasDomain  + " => " + realDomain);
+        return addMappingInternal(null, aliasDomain, VirtualUserTable.ALIASDOMAIN_PREFIX + realDomain);
+    }
+    
+    /**
+     * @see org.apache.james.services.VirtualUserTableManagement#removeAliasDomainMapping(java.lang.String, java.lang.String)
+     */
+    public boolean removeAliasDomainMapping(String aliasDomain, String realDomain) throws InvalidMappingException {
+        getLogger().info("Remove domain mapping: " + aliasDomain  + " => " + realDomain);
+        return removeMappingInternal(null, aliasDomain, VirtualUserTable.ALIASDOMAIN_PREFIX + realDomain);
+    }
+    
+    /**
+     * Get all mappings for the given user and domain. If a aliasdomain mapping was found get sure it is in the map as first mapping. 
      * 
-     * @param user the mapping of virtual to real recipients, as 
-     *    <code>MailAddress</code>es to <code>String</code>s.
+     * @param user the username
+     * @param domain the domain
+     * @return the mappings
      */
-    protected abstract String mapAddress(String user, String domain);
+    private String mapAddress(String user,String domain) {
+       String mappings = mapAddressInternal(user, domain);
+
+        // check if we need to sort
+        // TODO: Maybe we should just return the aliasdomain mapping
+        if (mappings != null && mappings.indexOf(VirtualUserTable.ALIASDOMAIN_PREFIX) > -1) {
+            Collection mapCol = VirtualUserTableUtil.mappingToCollection(mappings);
+            Iterator mapIt = mapCol.iterator();
+        
+            List col = new ArrayList(mapCol.size());
+        
+            while (mapIt.hasNext()) {
+                int i = 0;
+                String mapping = mapIt.next().toString();
+        
+                if (mapping.startsWith(VirtualUserTable.ALIASDOMAIN_PREFIX)) {
+                    col.add(i,mapping);
+                    i++;
+                } else {
+                    col.add(mapping);
+                }
+            }
+            return VirtualUserTableUtil.CollectionToMapping(col);
+        } else {  
+            return mappings;
+        }
+    }
+      
     
     /**
      * Add new mapping
@@ -444,4 +497,19 @@
      * @return Map
      */
     protected abstract Map getAllMappingsInternal();
+    
+    /**
+     * Override to map virtual recipients to real recipients, both local and non-local.
+     * Each key in the provided map corresponds to a potential virtual recipient, stored as
+     * a <code>MailAddress</code> object.
+     * 
+     * Translate virtual recipients to real recipients by mapping a string containing the
+     * address of the real recipient as a value to a key. Leave the value <code>null<code>
+     * if no mapping should be performed. Multiple recipients may be specified by delineating
+     * the mapped string with commas, semi-colons or colons.
+     * 
+     * @param user the mapping of virtual to real recipients, as 
+     *    <code>MailAddress</code>es to <code>String</code>s.
+     */
+    protected abstract String mapAddressInternal(String user, String domain);
 }

Modified: james/server/trunk/src/java/org/apache/james/vut/JDBCVirtualUserTable.java
URL: http://svn.apache.org/viewvc/james/server/trunk/src/java/org/apache/james/vut/JDBCVirtualUserTable.java?view=diff&rev=489065&r1=489064&r2=489065
==============================================================================
--- james/server/trunk/src/java/org/apache/james/vut/JDBCVirtualUserTable.java (original)
+++ james/server/trunk/src/java/org/apache/james/vut/JDBCVirtualUserTable.java Wed Dec 20 04:18:43 2006
@@ -254,9 +254,9 @@
     }
     
     /**
-     * @see org.apache.james.vut.AbstractVirtualUserTable#mapAddress(java.lang.String, java.lang.String)
+     * @see org.apache.james.vut.AbstractVirtualUserTable#mapAddressInternal(java.lang.String, java.lang.String)
      */
-    public String mapAddress(String user, String domain) {
+    public String mapAddressInternal(String user, String domain) {
         Connection conn = null;
         PreparedStatement mappingStmt = null;
         try {

Modified: james/server/trunk/src/java/org/apache/james/vut/XMLVirtualUserTable.java
URL: http://svn.apache.org/viewvc/james/server/trunk/src/java/org/apache/james/vut/XMLVirtualUserTable.java?view=diff&rev=489065&r1=489064&r2=489065
==============================================================================
--- james/server/trunk/src/java/org/apache/james/vut/XMLVirtualUserTable.java (original)
+++ james/server/trunk/src/java/org/apache/james/vut/XMLVirtualUserTable.java Wed Dec 20 04:18:43 2006
@@ -53,7 +53,7 @@
         mappings = new HashMap();
         domains = new ArrayList();
         
-        if (mapConf != null) {
+        if (mapConf != null && mapConf.length > 0) {
             for (int i = 0; i < mapConf.length; i ++) {       
                 mappings.putAll(VirtualUserTableUtil.getXMLMappings(mapConf[i].getValue()));
             }
@@ -96,10 +96,15 @@
     }
 
     /**
-     * @see org.apache.james.vut.AbstractVirtualUserTable#mapAddress(java.lang.String, java.lang.String)
+     * @see org.apache.james.vut.AbstractVirtualUserTable#mapAddressInternal(java.lang.String, java.lang.String)
      */
-    protected String mapAddress(String user, String domain) {
-        return VirtualUserTableUtil.getTargetString(user, domain, mappings);
+    protected String mapAddressInternal(String user, String domain) {
+        if (mappings == null) {
+            return null;
+        } else {
+            return VirtualUserTableUtil.getTargetString(user, domain, mappings);
+    
+        }
     }
 
     /**
@@ -114,11 +119,15 @@
      * @see org.apache.james.vut.AbstractVirtualUserTable#getUserDomainMappingsInternal(java.lang.String, java.lang.String)
      */
     public Collection getUserDomainMappingsInternal(String user, String domain) {
-        Object maps = mappings.get(user + "@" + domain);
-        if (maps != null) {
-            return VirtualUserTableUtil.mappingToCollection(maps.toString());
-        } else {
+        if (mappings == null) {
             return null;
+        } else {
+            String maps = (String) mappings.get(user + "@" + domain);
+            if (maps != null) {
+                return VirtualUserTableUtil.mappingToCollection(maps);
+            } else {
+                return null;
+            }
         }
     }
 
@@ -133,14 +142,18 @@
      * @see org.apache.james.services.DomainList#containsDomain(java.lang.String)
      */
     public boolean containsDomain(String domain) {
-        return domains.contains(domain);
+        if (domains == null) {
+            return false;
+        } else {
+            return domains.contains(domain);
+        }
     }
 
     /**
      * @see org.apache.james.vut.AbstractVirtualUserTable#getAllMappingsInternal()
      */
     public Map getAllMappingsInternal() {
-        if (mappings.size() > 0) {
+        if ( mappings != null && mappings.size() > 0) {
             Map mappingsNew = new HashMap();
             Iterator maps = mappings.keySet().iterator();
                 

Modified: james/server/trunk/src/test/org/apache/james/test/mock/james/MockVirtualUserTableManagementImpl.java
URL: http://svn.apache.org/viewvc/james/server/trunk/src/test/org/apache/james/test/mock/james/MockVirtualUserTableManagementImpl.java?view=diff&rev=489065&r1=489064&r2=489065
==============================================================================
--- james/server/trunk/src/test/org/apache/james/test/mock/james/MockVirtualUserTableManagementImpl.java (original)
+++ james/server/trunk/src/test/org/apache/james/test/mock/james/MockVirtualUserTableManagementImpl.java Wed Dec 20 04:18:43 2006
@@ -134,4 +134,12 @@
         return false;
     }
 
+    public boolean addAliasDomainMapping(String aliasDomain, String realDomain) throws InvalidMappingException {
+    return addRawMapping(null,aliasDomain,VirtualUserTable.ALIASDOMAIN_PREFIX + realDomain);
+    }
+
+    public boolean removeAliasDomainMapping(String aliasDomain, String realDomain) throws InvalidMappingException {
+        return removeRawMapping(null,aliasDomain,VirtualUserTable.ALIASDOMAIN_PREFIX + realDomain);
+    }
+
 }

Modified: james/server/trunk/src/test/org/apache/james/vut/AbstractVirtualUserTableTest.java
URL: http://svn.apache.org/viewvc/james/server/trunk/src/test/org/apache/james/vut/AbstractVirtualUserTableTest.java?view=diff&rev=489065&r1=489064&r2=489065
==============================================================================
--- james/server/trunk/src/test/org/apache/james/vut/AbstractVirtualUserTableTest.java (original)
+++ james/server/trunk/src/test/org/apache/james/vut/AbstractVirtualUserTableTest.java Wed Dec 20 04:18:43 2006
@@ -23,12 +23,16 @@
 
 import java.net.InetAddress;
 import java.net.UnknownHostException;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.Map;
 
 import org.apache.avalon.framework.configuration.ConfigurationException;
 import org.apache.avalon.framework.container.ContainerUtil;
 import org.apache.avalon.framework.service.ServiceException;
 import org.apache.james.services.AbstractDNSServer;
 import org.apache.james.services.DNSServer;
+import org.apache.james.services.VirtualUserTable;
 
 import junit.framework.TestCase;
 
@@ -38,16 +42,51 @@
     protected final static int REGEX_TYPE = 0;
     protected final static int ERROR_TYPE = 1;
     protected final static int ADDRESS_TYPE = 2;
+    protected final static int ALIASDOMAIN_TYPE = 3;
     
     protected void setUp() throws Exception {
         virtualUserTable = getVirtalUserTable();
     }
     
     protected void tearDown() throws Exception {
-        super.tearDown();
+        Map mappings = virtualUserTable.getAllMappings();
+        
+        if (mappings != null) {
+            Iterator mappingsIt = virtualUserTable.getAllMappings().keySet().iterator();
+    
+    
+            while(mappingsIt.hasNext()) {
+                String key = mappingsIt.next().toString();
+                String args[] = key.split("@");
+        
+                Collection map = (Collection) mappings.get(key);
+        
+                Iterator mapIt = map.iterator();
+        
+                while (mapIt.hasNext()) {
+                    try {
+                        removeMapping(args[0], args[1], mapIt.next().toString());
+                    } catch (InvalidMappingException e) {
+                        e.printStackTrace();
+                    }
+                }
+            }
+        }
         ContainerUtil.dispose(virtualUserTable);
     }
     
+    private void removeMapping(String user, String domain, String rawMapping) throws InvalidMappingException {
+        if (rawMapping.startsWith(VirtualUserTable.ERROR_PREFIX)) {
+            removeMapping(user, domain, rawMapping.substring(VirtualUserTable.ERROR_PREFIX.length()), ERROR_TYPE);
+        } else if (rawMapping.startsWith(VirtualUserTable.REGEX_PREFIX)) {
+            removeMapping(user, domain, rawMapping.substring(VirtualUserTable.REGEX_PREFIX.length()), REGEX_TYPE);
+        } else if (rawMapping.startsWith(VirtualUserTable.ALIASDOMAIN_PREFIX)) {
+            removeMapping(user, domain, rawMapping.substring(VirtualUserTable.ALIASDOMAIN_PREFIX.length()), ALIASDOMAIN_TYPE);
+        } else {
+            removeMapping(user, domain, rawMapping, ADDRESS_TYPE);
+        }
+    }
+    
     protected abstract AbstractVirtualUserTable getVirtalUserTable() throws ServiceException, ConfigurationException, Exception;
     
     protected abstract boolean addMapping(String user , String domain, String mapping,int type)throws InvalidMappingException;
@@ -88,8 +127,6 @@
 
             assertEquals("Two mappings",virtualUserTable.getMappings(user, domain).size(), 2);           
             assertEquals("One mappingline",virtualUserTable.getAllMappings().size(),1);
-            
-            System.err.println("MAPPINGS:" + virtualUserTable.getAllMappings() + " domains:" + virtualUserTable.getDomains().size()); 
            
             // Test DomainList implementations!
             assertEquals("Three domains",virtualUserTable.getDomains().size(), 3);
@@ -251,4 +288,29 @@
             fail("Storing failed");
         }
     }
+   
+    
+    public void testAliasDomainMapping() throws ErrorMappingException {
+        String domain = "realdomain";
+        String aliasDomain = "aliasdomain";
+        String user = "user";
+        String user2 = "user2";
+    
+        assertNull("No mappings",virtualUserTable.getAllMappings());
+        try {
+            assertTrue("Add mapping",addMapping(null, aliasDomain, user2 + "@" + domain, ADDRESS_TYPE));
+            assertTrue("Add aliasDomain mapping", addMapping(null, aliasDomain, domain, ALIASDOMAIN_TYPE));
+        
+            Iterator mappings = virtualUserTable.getMappings(user, aliasDomain).iterator();
+            assertEquals("Domain mapped as first ", mappings.next(), user + "@" + domain);
+            assertEquals("Address mapped as second ", mappings.next(), user2 + "@" + domain);
+            
+            assertTrue("Remove mapping", removeMapping(null, aliasDomain, user2 + "@" + domain, ADDRESS_TYPE));
+            assertTrue("Remove aliasDomain mapping", removeMapping(null, aliasDomain, domain, ALIASDOMAIN_TYPE));
+        
+        } catch (InvalidMappingException e) {
+            fail("Storing failed");
+        }
+    }
+    
 }

Modified: james/server/trunk/src/test/org/apache/james/vut/JDBCVirtualUserTableTest.java
URL: http://svn.apache.org/viewvc/james/server/trunk/src/test/org/apache/james/vut/JDBCVirtualUserTableTest.java?view=diff&rev=489065&r1=489064&r2=489065
==============================================================================
--- james/server/trunk/src/test/org/apache/james/vut/JDBCVirtualUserTableTest.java (original)
+++ james/server/trunk/src/test/org/apache/james/vut/JDBCVirtualUserTableTest.java Wed Dec 20 04:18:43 2006
@@ -21,10 +21,6 @@
 
 package org.apache.james.vut;
 
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.Map;
-
 import org.apache.avalon.cornerstone.services.datasources.DataSourceSelector;
 import org.apache.avalon.framework.configuration.ConfigurationException;
 import org.apache.avalon.framework.configuration.DefaultConfiguration;
@@ -42,33 +38,6 @@
 
 public class JDBCVirtualUserTableTest extends AbstractVirtualUserTableTest {
     
-    public void tearDown() throws Exception {
-        Map mappings = virtualUserTable.getAllMappings();
-    
-        if (mappings != null) {
-            Iterator mappingsIt = virtualUserTable.getAllMappings().keySet().iterator();
-    
-    
-            while(mappingsIt.hasNext()) {
-                String key = mappingsIt.next().toString();
-                String args[] = key.split("@");
-        
-                Collection map = (Collection) mappings.get(key);
-        
-                Iterator mapIt = map.iterator();
-        
-                while (mapIt.hasNext()) {
-                    try {
-                        virtualUserTable.removeMapping(args[0], args[1], mapIt.next().toString());
-                    } catch (InvalidMappingException e) {
-                        e.printStackTrace();
-                    }
-                }
-            }
-        }
-        super.tearDown();
-    }
-    
     /**
      * @see org.apache.james.vut.AbstractVirtualUserTableTest#getVirtalUserTable()
      */
@@ -100,6 +69,8 @@
             return virtualUserTable.addRegexMapping(user, domain, mapping);
         } else if (type == ADDRESS_TYPE) {
             return virtualUserTable.addAddressMapping(user, domain, mapping);
+        } else if (type == ALIASDOMAIN_TYPE) {
+            return virtualUserTable.addAliasDomainMapping(domain, mapping);
         } else {
             return false;
         }
@@ -115,6 +86,8 @@
             return virtualUserTable.removeRegexMapping(user, domain, mapping);
         } else if (type == ADDRESS_TYPE) {
             return virtualUserTable.removeAddressMapping(user, domain, mapping);
+        } else if (type == ALIASDOMAIN_TYPE) {
+            return virtualUserTable.removeAliasDomainMapping(domain, mapping);
         } else {
             return false;
         }

Modified: james/server/trunk/src/test/org/apache/james/vut/XMLVirtualUserTableTest.java
URL: http://svn.apache.org/viewvc/james/server/trunk/src/test/org/apache/james/vut/XMLVirtualUserTableTest.java?view=diff&rev=489065&r1=489064&r2=489065
==============================================================================
--- james/server/trunk/src/test/org/apache/james/vut/XMLVirtualUserTableTest.java (original)
+++ james/server/trunk/src/test/org/apache/james/vut/XMLVirtualUserTableTest.java Wed Dec 20 04:18:43 2006
@@ -30,7 +30,6 @@
 import org.apache.avalon.framework.configuration.DefaultConfiguration;
 import org.apache.avalon.framework.container.ContainerUtil;
 import org.apache.avalon.framework.service.DefaultServiceManager;
-import org.apache.avalon.framework.service.ServiceException;
 
 import org.apache.james.services.DNSServer;
 import org.apache.james.services.FileSystem;
@@ -47,7 +46,7 @@
 public class XMLVirtualUserTableTest extends AbstractVirtualUserTableTest {
     DefaultConfiguration defaultConfiguration = new DefaultConfiguration("conf");
     
-    protected AbstractVirtualUserTable getVirtalUserTable() throws ServiceException, ConfigurationException, Exception {
+    protected AbstractVirtualUserTable getVirtalUserTable() throws Exception {
         DefaultServiceManager serviceManager = new DefaultServiceManager();
         serviceManager.put(FileSystem.ROLE, new MockFileSystem());
         serviceManager.put(DataSourceSelector.ROLE, Util.getDataSourceSelector());
@@ -56,7 +55,6 @@
         ContainerUtil.enableLogging(mr, new MockLogger());
 
         ContainerUtil.service(mr, serviceManager);
-        ContainerUtil.configure(mr, defaultConfiguration);
         return mr;
     }
     
@@ -83,7 +81,10 @@
             mappings.add(VirtualUserTable.REGEX_PREFIX + mapping);
         } else if (type == ADDRESS_TYPE) {
             mappings.add(mapping);
+        }  else if (type == ALIASDOMAIN_TYPE) {
+            mappings.add(VirtualUserTable.ALIASDOMAIN_PREFIX + mapping);
         }
+        
         if (mappings.size() > 0) { 
             defaultConfiguration.addChild(new AttrValConfiguration("mapping",user + "@" + domain +"=" + VirtualUserTableUtil.CollectionToMapping(mappings)));
         }
@@ -91,8 +92,11 @@
         try {
             ContainerUtil.configure(((XMLVirtualUserTable) virtualUserTable),defaultConfiguration);
         } catch (ConfigurationException e) {
-            e.printStackTrace();
-            return false;
+            if (mappings.size() > 0) {
+                return false;
+            } else {
+                return true;
+            }
         }
         return true;
     }
@@ -118,7 +122,9 @@
             mappings.remove(VirtualUserTable.REGEX_PREFIX + mapping);
         } else if (type == ADDRESS_TYPE) {
             mappings.remove(mapping);    
-        } 
+        }  else if (type == ALIASDOMAIN_TYPE) {
+            mappings.remove(VirtualUserTable.ALIASDOMAIN_PREFIX + mapping);
+        }
 
         if (mappings.size() > 0) {
             defaultConfiguration.addChild(new AttrValConfiguration("mapping",user + "@" + domain +"=" + VirtualUserTableUtil.CollectionToMapping(mappings)));
@@ -127,8 +133,11 @@
         try {
             ContainerUtil.configure(((XMLVirtualUserTable) virtualUserTable),defaultConfiguration);
         } catch (ConfigurationException e) {
-            e.printStackTrace();
-           return false;
+           if (mappings.size() > 0) {
+               return false;
+           } else {
+               return true;
+           }
         }
         return true;
     }



---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org