Author: norman
Date: Sun Nov 19 13:51:01 2006
New Revision: 476937
URL: http://svn.apache.org/viewvc?view=rev&rev=476937
Log:
Fix a bug on detecting duplicate mappings. See JAMES-706
Modified:
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/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
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=476937&r1=476936&r2=476937
==============================================================================
---
james/server/trunk/src/java/org/apache/james/management/VirtualUserTableManagement.java
(original)
+++
james/server/trunk/src/java/org/apache/james/management/VirtualUserTableManagement.java
Sun Nov 19 13:51:01 2006
@@ -36,7 +36,7 @@
* Management for VirtualUserTables
*
*/
-public class VirtualUserTableManagement implements Serviceable,
VirtualUserTableManagementService {
+public class VirtualUserTableManagement implements Serviceable,
VirtualUserTableManagementService, VirtualUserTableManagmentMBean {
VirtualUserTableStore store;
org.apache.james.services.VirtualUserTableManagement defaultVUT;
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=476937&r1=476936&r2=476937
==============================================================================
--- james/server/trunk/src/java/org/apache/james/services/VirtualUserTable.java
(original)
+++ james/server/trunk/src/java/org/apache/james/services/VirtualUserTable.java
Sun Nov 19 13:51:01 2006
@@ -37,6 +37,16 @@
public static final String ROLE =
"org.apache.james.services.VirtualUserTable";
/**
+ * The prefix which is used for error mappings
+ */
+ public static final String ERROR_PREFIX = "error:";
+
+ /**
+ * The prefix which is used for regex prefix
+ */
+ public static final String REGEX_PREFIX = "regex:";
+
+ /**
* Return the mapped MailAddress for the given address. Return null if no
* matched mapping was found
*
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=476937&r1=476936&r2=476937
==============================================================================
---
james/server/trunk/src/java/org/apache/james/vut/AbstractVirtualUserTable.java
(original)
+++
james/server/trunk/src/java/org/apache/james/vut/AbstractVirtualUserTable.java
Sun Nov 19 13:51:01 2006
@@ -73,8 +73,8 @@
// Only non-null mappings are translated
if (targetString != null) {
Collection mappings = new ArrayList();
- if (targetString.startsWith("error:")) {
- throw new
ErrorMappingException(targetString.substring("error:".length()));
+ if (targetString.startsWith(VirtualUserTable.ERROR_PREFIX)) {
+ throw new
ErrorMappingException(targetString.substring(VirtualUserTable.ERROR_PREFIX.length()));
} else {
Iterator map=
VirtualUserTableUtil.getMappings(targetString).iterator();
@@ -83,7 +83,7 @@
String target;
String targetAddress = map.next().toString();
- if (targetAddress.startsWith("regex:")) {
+ if
(targetAddress.startsWith(VirtualUserTable.REGEX_PREFIX)) {
try {
targetAddress = VirtualUserTableUtil.regexMap(new
MailAddress(user,domain), targetAddress);
} catch (MalformedPatternException e) {
@@ -129,7 +129,7 @@
if (checkMapping(user,domain,regex) == true) {
getLogger().info("Add regex mapping => " + regex + " for user: " +
user + " domain: " + domain);
- return addMappingInternal(user, domain, "regex:" + regex);
+ return addMappingInternal(user, domain,
VirtualUserTable.REGEX_PREFIX + regex);
} else {
return false;
}
@@ -142,7 +142,7 @@
*/
public synchronized boolean removeRegexMapping(String user, String domain,
String regex) throws InvalidMappingException {
getLogger().info("Remove regex mapping => " + regex + " for user: " +
user + " domain: " + domain);
- return removeMappingInternal(user,domain,"regex:" + regex);
+ return removeMappingInternal(user,domain,VirtualUserTable.REGEX_PREFIX
+ regex);
}
/**
@@ -182,7 +182,7 @@
public synchronized boolean addErrorMapping(String user, String domain,
String error) throws InvalidMappingException {
if (checkMapping(user,domain,error) == true) {
getLogger().info("Add error mapping => " + error + " for user: " +
user + " domain: " + domain);
- return addMappingInternal(user,domain, "error:" + error);
+ return addMappingInternal(user,domain,
VirtualUserTable.ERROR_PREFIX + error);
} else {
return false;
}
@@ -193,7 +193,7 @@
*/
public synchronized boolean removeErrorMapping(String user, String domain,
String error) throws InvalidMappingException {
getLogger().info("Remove error mapping => " + error + " for user: " +
user + " domain: " + domain);
- return removeMappingInternal(user,domain,"error:" + error);
+ return removeMappingInternal(user,domain,VirtualUserTable.ERROR_PREFIX
+ error);
}
@@ -202,13 +202,11 @@
*/
public boolean addMapping(String user, String domain, String mapping)
throws InvalidMappingException {
String map = mapping.toLowerCase();
- String errorPrefix = "error:";
- String regexPrefix = "regex:";
- if (map.startsWith(errorPrefix)) {
- return
addErrorMapping(user,domain,map.substring(errorPrefix.length()));
- } else if (map.startsWith(regexPrefix)) {
- return
addRegexMapping(user,domain,map.substring(regexPrefix.length()));
+ if (map.startsWith(VirtualUserTable.ERROR_PREFIX)) {
+ 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 {
return addAddressMapping(user,domain,map);
}
@@ -219,13 +217,11 @@
*/
public boolean removeMapping(String user, String domain, String mapping)
throws InvalidMappingException {
String map = mapping.toLowerCase();
- String errorPrefix = "error:";
- String regexPrefix = "regex:";
- if (map.startsWith(errorPrefix)) {
- return
removeErrorMapping(user,domain,map.substring(errorPrefix.length()));
- } else if (map.startsWith(regexPrefix)) {
- return
removeRegexMapping(user,domain,map.substring(regexPrefix.length()));
+ if (map.startsWith(VirtualUserTable.ERROR_PREFIX)) {
+ 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 {
return removeAddressMapping(user,domain,map);
}
@@ -272,12 +268,7 @@
}
private boolean checkMapping(String user,String domain, String mapping) {
- Collection mappings;
- try {
- mappings = getMappings(user,domain);
- } catch (ErrorMappingException e) {
- return false;
- }
+ Collection mappings = getUserDomainMappings(user,domain);
if (mappings != null && mappings.contains(mapping)) {
return false;
} else {
@@ -323,6 +314,13 @@
}
/**
+ * @see
org.apache.james.services.VirtualUserTableManagement#getUserDomainMappings(java.lang.String,
java.lang.String)
+ */
+ public Collection getUserDomainMappings(String user, String domain) {
+ return getUserDomainMappingsInternal(user, domain);
+ }
+
+ /**
* @see org.apache.james.services.DomainList#setAutoDetect(boolean)
*/
public synchronized void setAutoDetect(boolean autoDetect) {
@@ -381,4 +379,13 @@
* @return domains the domains
*/
protected abstract List getDomainsInternal();
+
+ /**
+ * Return Collection of all mappings for the given username and domain
+ *
+ * @param user the user
+ * @param domain the domain
+ * @return Collection which hold the mappings
+ */
+ protected abstract Collection getUserDomainMappingsInternal(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=476937&r1=476936&r2=476937
==============================================================================
--- james/server/trunk/src/java/org/apache/james/vut/JDBCVirtualUserTable.java
(original)
+++ james/server/trunk/src/java/org/apache/james/vut/JDBCVirtualUserTable.java
Sun Nov 19 13:51:01 2006
@@ -475,7 +475,7 @@
/**
* @see
org.apache.james.vut.AbstractVirtualUserTable#mapAddress(java.lang.String,
java.lang.String)
*/
- public Collection getUserDomainMappings(String user, String domain) throws
InvalidMappingException {
+ protected Collection getUserDomainMappingsInternal(String user, String
domain) {
Connection conn = null;
PreparedStatement mappingStmt = null;
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=476937&r1=476936&r2=476937
==============================================================================
--- james/server/trunk/src/java/org/apache/james/vut/XMLVirtualUserTable.java
(original)
+++ james/server/trunk/src/java/org/apache/james/vut/XMLVirtualUserTable.java
Sun Nov 19 13:51:01 2006
@@ -105,9 +105,9 @@
}
/**
- * @see
org.apache.james.services.VirtualUserTableManagement#getUserDomainMappings(java.lang.String,
java.lang.String)
+ * @see
org.apache.james.vut.AbstractVirtualUserTable#getUserDomainMappingsInternal(java.lang.String,
java.lang.String)
*/
- public Collection getUserDomainMappings(String user, String domain) {
+ public Collection getUserDomainMappingsInternal(String user, String
domain) {
Object maps = mappings.get(user + "@" + domain);
if (maps != null) {
return mappingToCollection(maps.toString());
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]