Author: bago
Date: Sat May 20 04:22:03 2006
New Revision: 407988

URL: http://svn.apache.org/viewvc?rev=407988&view=rev
Log:
Backported fix for ClassCastException and NullPointerException while storing 
mail for localusers and file users repository (JAMES-505)
Merged commits: r407935, r407976, r407980, r407986

Modified:
    
james/server/branches/v2.3/src/java/org/apache/james/core/LocalUsersRepository.java
    
james/server/branches/v2.3/src/java/org/apache/james/mailrepository/AvalonMailRepository.java
    
james/server/branches/v2.3/src/java/org/apache/james/remotemanager/RemoteManagerHandler.java
    
james/server/branches/v2.3/src/java/org/apache/james/services/UsersRepository.java
    
james/server/branches/v2.3/src/java/org/apache/james/transport/mailets/ToMultiRepository.java
    
james/server/branches/v2.3/src/java/org/apache/james/transport/mailets/UsersRepositoryAliasingForwarding.java
    
james/server/branches/v2.3/src/java/org/apache/james/userrepository/AbstractUsersRepository.java
    
james/server/branches/v2.3/src/java/org/apache/james/userrepository/DefaultUsersJdbcRepository.java
    
james/server/branches/v2.3/src/java/org/apache/james/userrepository/JamesUsersJdbcRepository.java
    
james/server/branches/v2.3/src/java/org/apache/james/userrepository/ListUsersJdbcRepository.java
    
james/server/branches/v2.3/src/java/org/apache/james/userrepository/UsersFileRepository.java
    
james/server/branches/v2.3/src/java/org/apache/james/userrepository/UsersLDAPRepository.java
    
james/server/branches/v2.3/src/test/org/apache/james/userrepository/MockUsersRepository.java

Modified: 
james/server/branches/v2.3/src/java/org/apache/james/core/LocalUsersRepository.java
URL: 
http://svn.apache.org/viewvc/james/server/branches/v2.3/src/java/org/apache/james/core/LocalUsersRepository.java?rev=407988&r1=407987&r2=407988&view=diff
==============================================================================
--- 
james/server/branches/v2.3/src/java/org/apache/james/core/LocalUsersRepository.java
 (original)
+++ 
james/server/branches/v2.3/src/java/org/apache/james/core/LocalUsersRepository.java
 Sat May 20 04:22:03 2006
@@ -52,6 +52,10 @@
         users.addUser(name,attributes);
     }
 
+    public boolean addUser(String username, String password) {
+        return users.addUser(username, password);
+    }
+
     public User getUserByName(String name) {
         return users.getUserByName(name);
     }

Modified: 
james/server/branches/v2.3/src/java/org/apache/james/mailrepository/AvalonMailRepository.java
URL: 
http://svn.apache.org/viewvc/james/server/branches/v2.3/src/java/org/apache/james/mailrepository/AvalonMailRepository.java?rev=407988&r1=407987&r2=407988&view=diff
==============================================================================
--- 
james/server/branches/v2.3/src/java/org/apache/james/mailrepository/AvalonMailRepository.java
 (original)
+++ 
james/server/branches/v2.3/src/java/org/apache/james/mailrepository/AvalonMailRepository.java
 Sat May 20 04:22:03 2006
@@ -286,7 +286,7 @@
                             .append(destination)
                             .append("/")
                             .append(mc.getName());
-                    if 
(wrapper.getSourceId().equals(destinationBuffer.toString()) && 
!wrapper.isModified()) {
+                    if 
(destinationBuffer.toString().equals(wrapper.getSourceId()) && 
!wrapper.isModified()) {
                         //We're trying to save to the same place, and it's not 
modified... we shouldn't save.
                         //More importantly, if we try to save, we will create 
a 0-byte file since we're
                         //retrying to retrieve from a file we'll be 
overwriting.
@@ -324,7 +324,7 @@
             }
 
         } catch (Exception e) {
-            getLogger().error("Exception storing mail: " + e);
+            getLogger().error("Exception storing mail: " + e, e);
             throw new MessagingException("Exception caught while storing 
Message Container: " + e);
         }
     }

Modified: 
james/server/branches/v2.3/src/java/org/apache/james/remotemanager/RemoteManagerHandler.java
URL: 
http://svn.apache.org/viewvc/james/server/branches/v2.3/src/java/org/apache/james/remotemanager/RemoteManagerHandler.java?rev=407988&r1=407987&r2=407988&view=diff
==============================================================================
--- 
james/server/branches/v2.3/src/java/org/apache/james/remotemanager/RemoteManagerHandler.java
 (original)
+++ 
james/server/branches/v2.3/src/java/org/apache/james/remotemanager/RemoteManagerHandler.java
 Sat May 20 04:22:03 2006
@@ -25,7 +25,6 @@
 import org.apache.james.services.JamesUser;
 import org.apache.james.services.User;
 import org.apache.james.services.UsersRepository;
-import org.apache.james.userrepository.DefaultUser;
 import org.apache.james.util.watchdog.Watchdog;
 import org.apache.james.util.watchdog.WatchdogTarget;
 import org.apache.mailet.MailAddress;
@@ -459,9 +458,7 @@
             String response = responseBuffer.toString();
             writeLoggedResponse(response);
         } else {
-            DefaultUser user = new DefaultUser(username, "SHA");
-            user.setPassword(passwd);
-            success = users.addUser(user);
+            success = users.addUser(username, passwd);
         }
         if ( success ) {
             StringBuffer responseBuffer =

Modified: 
james/server/branches/v2.3/src/java/org/apache/james/services/UsersRepository.java
URL: 
http://svn.apache.org/viewvc/james/server/branches/v2.3/src/java/org/apache/james/services/UsersRepository.java?rev=407988&r1=407987&r2=407988&view=diff
==============================================================================
--- 
james/server/branches/v2.3/src/java/org/apache/james/services/UsersRepository.java
 (original)
+++ 
james/server/branches/v2.3/src/java/org/apache/james/services/UsersRepository.java
 Sat May 20 04:22:03 2006
@@ -54,6 +54,17 @@
      * @param attributes see decription
      */
     void addUser(String name, Object attributes);
+    
+    /**
+     * Adds a user to the repository with the specified password
+     * 
+     * @param username the username of the user to be added
+     * @param password the password of the user to add
+     * @return true if succesful, false otherwise
+     * 
+     * @since James 2.3.0
+     */
+    boolean addUser(String username, String password);
 
     /**
      * Get the user object with the specified user name.  Return null if no

Modified: 
james/server/branches/v2.3/src/java/org/apache/james/transport/mailets/ToMultiRepository.java
URL: 
http://svn.apache.org/viewvc/james/server/branches/v2.3/src/java/org/apache/james/transport/mailets/ToMultiRepository.java?rev=407988&r1=407987&r2=407988&view=diff
==============================================================================
--- 
james/server/branches/v2.3/src/java/org/apache/james/transport/mailets/ToMultiRepository.java
 (original)
+++ 
james/server/branches/v2.3/src/java/org/apache/james/transport/mailets/ToMultiRepository.java
 Sat May 20 04:22:03 2006
@@ -177,7 +177,7 @@
             // the sender. Note that this email doesn't include any details
             // regarding the details of the failure(s).
             // In the future we may wish to address this.
-            getMailetContext().sendMail(mail.getSender(), errors, message,
+            getMailetContext().sendMail(mail.getSender(), errors, 
mail.getMessage(),
                     Mail.ERROR);
         }
         // We always consume this message

Modified: 
james/server/branches/v2.3/src/java/org/apache/james/transport/mailets/UsersRepositoryAliasingForwarding.java
URL: 
http://svn.apache.org/viewvc/james/server/branches/v2.3/src/java/org/apache/james/transport/mailets/UsersRepositoryAliasingForwarding.java?rev=407988&r1=407987&r2=407988&view=diff
==============================================================================
--- 
james/server/branches/v2.3/src/java/org/apache/james/transport/mailets/UsersRepositoryAliasingForwarding.java
 (original)
+++ 
james/server/branches/v2.3/src/java/org/apache/james/transport/mailets/UsersRepositoryAliasingForwarding.java
 Sat May 20 04:22:03 2006
@@ -21,6 +21,7 @@
 import org.apache.avalon.framework.service.ServiceManager;
 import org.apache.james.Constants;
 import org.apache.james.services.JamesUser;
+import org.apache.james.services.User;
 import org.apache.james.services.UsersRepository;
 import org.apache.james.services.UsersStore;
 import org.apache.mailet.RFC2822Headers;
@@ -188,39 +189,41 @@
         } else {
             username = recipient.getUser();
         }
-        JamesUser user;
+        User user;
         if (enableAliases || enableForwarding) {
-            user = (JamesUser) usersRepository.getUserByName(username);
-            if (enableAliases && user.getAliasing()) {
-                username = user.getAlias();
-            }
-            // Forwarding takes precedence over local aliases
-            if (enableForwarding && user.getForwarding()) {
-                MailAddress forwardTo = user.getForwardingDestination();
-                if (forwardTo == null) {
-                    StringBuffer errorBuffer = new StringBuffer(128)
-                            .append("Forwarding was enabled for ")
-                            .append(username)
-                            .append(
-                                    " but no forwarding address was set for 
this account.");
-                    throw new MessagingException(errorBuffer.toString());
+            user = usersRepository.getUserByName(username);
+            if (user instanceof JamesUser) {
+                if (enableAliases && ((JamesUser) user).getAliasing()) {
+                    username = ((JamesUser) user).getAlias();
                 }
-                Collection recipients = new HashSet();
-                recipients.add(forwardTo);
-                try {
-                    getMailetContext().sendMail(sender, recipients, message);
-                    StringBuffer logBuffer = new StringBuffer(128).append(
-                            "Mail for ").append(username).append(
-                            " forwarded to ").append(forwardTo.toString());
-                    getMailetContext().log(logBuffer.toString());
-                    return null;
-                } catch (MessagingException me) {
-                    StringBuffer logBuffer = new StringBuffer(128).append(
-                            "Error forwarding mail to ").append(
-                            forwardTo.toString()).append(
-                            "attempting local delivery");
-                    getMailetContext().log(logBuffer.toString());
-                    throw me;
+                // Forwarding takes precedence over local aliases
+                if (enableForwarding && ((JamesUser) user).getForwarding()) {
+                    MailAddress forwardTo = ((JamesUser) 
user).getForwardingDestination();
+                    if (forwardTo == null) {
+                        StringBuffer errorBuffer = new StringBuffer(128)
+                                .append("Forwarding was enabled for ")
+                                .append(username)
+                                .append(
+                                        " but no forwarding address was set 
for this account.");
+                        throw new MessagingException(errorBuffer.toString());
+                    }
+                    Collection recipients = new HashSet();
+                    recipients.add(forwardTo);
+                    try {
+                        getMailetContext().sendMail(sender, recipients, 
message);
+                        StringBuffer logBuffer = new StringBuffer(128).append(
+                                "Mail for ").append(username).append(
+                                " forwarded to ").append(forwardTo.toString());
+                        getMailetContext().log(logBuffer.toString());
+                        return null;
+                    } catch (MessagingException me) {
+                        StringBuffer logBuffer = new StringBuffer(128).append(
+                                "Error forwarding mail to ").append(
+                                forwardTo.toString()).append(
+                                "attempting local delivery");
+                        getMailetContext().log(logBuffer.toString());
+                        throw me;
+                    }
                 }
             }
         }

Modified: 
james/server/branches/v2.3/src/java/org/apache/james/userrepository/AbstractUsersRepository.java
URL: 
http://svn.apache.org/viewvc/james/server/branches/v2.3/src/java/org/apache/james/userrepository/AbstractUsersRepository.java?rev=407988&r1=407987&r2=407988&view=diff
==============================================================================
--- 
james/server/branches/v2.3/src/java/org/apache/james/userrepository/AbstractUsersRepository.java
 (original)
+++ 
james/server/branches/v2.3/src/java/org/apache/james/userrepository/AbstractUsersRepository.java
 Sat May 20 04:22:03 2006
@@ -151,6 +151,15 @@
     }
 
     /**
+     * @see 
org.apache.james.services.UsersRepository#addUser(java.lang.String, 
java.lang.String)
+     */
+    public boolean addUser(String username, String password)  {
+        User newbie = new DefaultJamesUser(username, "SHA");
+        newbie.setPassword(password);
+        return addUser(newbie);
+    }
+
+    /**
      * Update the repository with the specified user object. A user object
      * with this username must already exist.
      *

Modified: 
james/server/branches/v2.3/src/java/org/apache/james/userrepository/DefaultUsersJdbcRepository.java
URL: 
http://svn.apache.org/viewvc/james/server/branches/v2.3/src/java/org/apache/james/userrepository/DefaultUsersJdbcRepository.java?rev=407988&r1=407987&r2=407988&view=diff
==============================================================================
--- 
james/server/branches/v2.3/src/java/org/apache/james/userrepository/DefaultUsersJdbcRepository.java
 (original)
+++ 
james/server/branches/v2.3/src/java/org/apache/james/userrepository/DefaultUsersJdbcRepository.java
 Sat May 20 04:22:03 2006
@@ -94,5 +94,16 @@
         userUpdate.setString(1, defUser.getHashAlgorithm());
         userUpdate.setString(2, defUser.getHashedPassword());
     }
+    
+    /**
+     * @see 
org.apache.james.services.UsersRepository#addUser(java.lang.String, 
java.lang.String)
+     */
+    public boolean addUser(String username, String password)  {
+        User newbie = new DefaultUser(username, "SHA");
+        newbie.setPassword(password);
+        return addUser(newbie);
+    }
+
+
 }
 

Modified: 
james/server/branches/v2.3/src/java/org/apache/james/userrepository/JamesUsersJdbcRepository.java
URL: 
http://svn.apache.org/viewvc/james/server/branches/v2.3/src/java/org/apache/james/userrepository/JamesUsersJdbcRepository.java?rev=407988&r1=407987&r2=407988&view=diff
==============================================================================
--- 
james/server/branches/v2.3/src/java/org/apache/james/userrepository/JamesUsersJdbcRepository.java
 (original)
+++ 
james/server/branches/v2.3/src/java/org/apache/james/userrepository/JamesUsersJdbcRepository.java
 Sat May 20 04:22:03 2006
@@ -160,4 +160,16 @@
         stmt.setInt(5 + colOffset, (jamesUser.getAliasing() ? 1 : 0));
         stmt.setString(6 + colOffset, jamesUser.getAlias());
     }
+    
+    
+    
+    /**
+     * @see 
org.apache.james.services.UsersRepository#addUser(java.lang.String, 
java.lang.String)
+     */
+    public boolean addUser(String username, String password)  {
+        User newbie = new DefaultJamesUser(username, "SHA");
+        newbie.setPassword(password);
+        return addUser(newbie);
+    }
+
 }

Modified: 
james/server/branches/v2.3/src/java/org/apache/james/userrepository/ListUsersJdbcRepository.java
URL: 
http://svn.apache.org/viewvc/james/server/branches/v2.3/src/java/org/apache/james/userrepository/ListUsersJdbcRepository.java?rev=407988&r1=407987&r2=407988&view=diff
==============================================================================
--- 
james/server/branches/v2.3/src/java/org/apache/james/userrepository/ListUsersJdbcRepository.java
 (original)
+++ 
james/server/branches/v2.3/src/java/org/apache/james/userrepository/ListUsersJdbcRepository.java
 Sat May 20 04:22:03 2006
@@ -77,4 +77,15 @@
         throw new UnsupportedOperationException("Can't update a List User - " +
                                                 "only has a single 
attribute.");
     }
+
+    /**
+     * @see 
org.apache.james.services.UsersRepository#addUser(java.lang.String, 
java.lang.String)
+     */
+    public boolean addUser(String username, String password)  {
+        User newbie = new DefaultUser(username, "SHA");
+        newbie.setPassword(password);
+        return addUser(newbie);
+    }
+
+
 }

Modified: 
james/server/branches/v2.3/src/java/org/apache/james/userrepository/UsersFileRepository.java
URL: 
http://svn.apache.org/viewvc/james/server/branches/v2.3/src/java/org/apache/james/userrepository/UsersFileRepository.java?rev=407988&r1=407987&r2=407988&view=diff
==============================================================================
--- 
james/server/branches/v2.3/src/java/org/apache/james/userrepository/UsersFileRepository.java
 (original)
+++ 
james/server/branches/v2.3/src/java/org/apache/james/userrepository/UsersFileRepository.java
 Sat May 20 04:22:03 2006
@@ -167,6 +167,12 @@
         }
     }
 
+    public boolean addUser(String username, String password) {
+        User newbie = new DefaultJamesUser(username, "SHA");
+        newbie.setPassword(password);
+        return addUser(newbie);
+    }
+
     public synchronized User getUserByName(String name) {
         if (contains(name)) {
             try {

Modified: 
james/server/branches/v2.3/src/java/org/apache/james/userrepository/UsersLDAPRepository.java
URL: 
http://svn.apache.org/viewvc/james/server/branches/v2.3/src/java/org/apache/james/userrepository/UsersLDAPRepository.java?rev=407988&r1=407987&r2=407988&view=diff
==============================================================================
--- 
james/server/branches/v2.3/src/java/org/apache/james/userrepository/UsersLDAPRepository.java
 (original)
+++ 
james/server/branches/v2.3/src/java/org/apache/james/userrepository/UsersLDAPRepository.java
 Sat May 20 04:22:03 2006
@@ -344,6 +344,18 @@
 //            String userPassword = (String) attributes; // Not yet implemented
 //        }
     }
+    
+    /**
+     * @see 
org.apache.james.services.UsersRepository#addUser(java.lang.String, 
java.lang.String)
+     */
+    public boolean addUser(String username, String password) {
+        if (!contains(username)) {
+            addUser(username, password);
+            return contains(username);
+        } else {
+            return false;
+        }
+    }
 
     private void addGroupToUser(String userName) {
         String[] attrIDs = {membersAttr};

Modified: 
james/server/branches/v2.3/src/test/org/apache/james/userrepository/MockUsersRepository.java
URL: 
http://svn.apache.org/viewvc/james/server/branches/v2.3/src/test/org/apache/james/userrepository/MockUsersRepository.java?rev=407988&r1=407987&r2=407988&view=diff
==============================================================================
--- 
james/server/branches/v2.3/src/test/org/apache/james/userrepository/MockUsersRepository.java
 (original)
+++ 
james/server/branches/v2.3/src/test/org/apache/james/userrepository/MockUsersRepository.java
 Sat May 20 04:22:03 2006
@@ -74,6 +74,26 @@
         }
     }
 
+    public boolean addUser(String username, String password) {
+        if (m_users.containsKey(username)) return false;
+        try {
+            String passwordHash = DigestUtil.digestString((password), "SHA");
+
+            User user;
+
+            if (m_forceUseJamesUser) {
+                user = new DefaultJamesUser(username, passwordHash, "SHA");
+            } else {
+                user = new DefaultUser(username, passwordHash, "SHA");
+            }
+           
+            return addUser(user);
+        } catch (Exception e) {
+            e.printStackTrace();  // encoding failed
+        }
+        return false;
+    }
+
     public Object getAttributes(String name) {
         return null;  // trivial implementation
     }



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to