You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by ps...@apache.org on 2005/04/10 20:47:19 UTC

svn commit: r160795 - in directory/naming/trunk: naming-config/src/test/org/apache/naming/config/XmlConfiguratorTest.java naming-factory/src/java/org/apache/naming/factory/MailSessionFactory.java xdocs/changes.xml

Author: psteitz
Date: Sun Apr 10 11:47:18 2005
New Revision: 160795

URL: http://svn.apache.org/viewcvs?view=rev&rev=160795
Log:
Ported tomcat patch from BZ 31288, adding support for authenticated mail
sessions.

Added sample config and (deactivated) test cases for MailSession,
SendMail factories.

Modified:
    directory/naming/trunk/naming-config/src/test/org/apache/naming/config/XmlConfiguratorTest.java
    directory/naming/trunk/naming-factory/src/java/org/apache/naming/factory/MailSessionFactory.java
    directory/naming/trunk/xdocs/changes.xml

Modified: directory/naming/trunk/naming-config/src/test/org/apache/naming/config/XmlConfiguratorTest.java
URL: http://svn.apache.org/viewcvs/directory/naming/trunk/naming-config/src/test/org/apache/naming/config/XmlConfiguratorTest.java?view=diff&r1=160794&r2=160795
==============================================================================
--- directory/naming/trunk/naming-config/src/test/org/apache/naming/config/XmlConfiguratorTest.java (original)
+++ directory/naming/trunk/naming-config/src/test/org/apache/naming/config/XmlConfiguratorTest.java Sun Apr 10 11:47:18 2005
@@ -24,7 +24,15 @@
 import java.util.Hashtable;
 
 import javax.naming.Context;
-import javax.naming.InitialContext;
+import javax.naming.InitialContext;
+
+import javax.mail.Session;
+import javax.mail.Message;
+import javax.mail.internet.MimePartDataSource;
+import javax.mail.internet.InternetAddress;
+import javax.mail.internet.MimeMessage;
+import javax.mail.Transport;
+
 import javax.sql.DataSource;
 
 import junit.framework.TestCase;
@@ -222,6 +230,85 @@
                 con.close(); 
             }
         }      
+    }
+    
+    /**
+     * Mail factory configuration tests.  Currently disabled, as the tests
+     * and associated configs require Javamail libraries and access to outbound
+     * smpt servers and send email messages. 
+     * 
+     * For these test cases to work, both javamail.jar and activation.jar must be
+     * available and "touser@todomain.com" needs to be a real email address.
+     * NB: These test cases will send actual email messages to the to address.
+     * 
+     * To activate these tests, change the names from "tstXxx" to "testXxx".
+     */
+
+    /**
+     * Test for correctly configured and operational mail 
+     * session factory.  Does not use authorization config.
+     * 
+     * @throws Exception as tests do
+     */
+    public void tstMailSession() throws Exception {
+        XmlConfigurator.loadConfiguration(getClass().getResourceAsStream("/mail.xml"));
+        Context ctx = new InitialContext();
+        Context env = (Context) ctx.lookup("java:comp/env");
+        Session session = (Session) env.lookup("mail/smtp");
+        Message msg = new MimeMessage(session);
+        msg.setFrom(new InternetAddress("fromuser@fromdomain.com"));
+        InternetAddress to[] = new InternetAddress[1];
+        to[0] = new InternetAddress("touser@todomain.com");
+        msg.setRecipients(Message.RecipientType.TO, to);
+        msg.setSubject("mail session test");
+        msg.setContent("this is a test", "text/plain");
+        Transport.send(msg);
+    }        
+    
+    /**
+     * Test for correctly configured and operational send mail 
+     * resource factory. 
+     * 
+     * @throws Exception as tests do
+     */
+    public void tstSendMail() throws Exception {
+        XmlConfigurator.loadConfiguration(getClass().getResourceAsStream("/mail.xml"));
+        Context ctx = new InitialContext();
+        Context env = (Context) ctx.lookup("java:comp/env");
+        MimePartDataSource ds = (MimePartDataSource) env.lookup("mail/send");
+        Message msg = ds.getMessageContext().getMessage();
+        msg.setFrom(new InternetAddress("fromuser@fromdomain.com"));
+        InternetAddress to[] = new InternetAddress[1];
+        to[0] = new InternetAddress("touser@todomain.com");
+        msg.setRecipients(Message.RecipientType.TO, to);
+        msg.setSubject("sendmail test");
+        msg.setContent("this is a test", "text/plain");
+        Transport.send(msg);
+    }
+    
+    /**
+     * Test for correctly configured and operational send mail 
+     * resource factory.  Uses auth config, passing mail.smpt.user
+     * and password from config to mail session factory.
+     * 
+     * @throws Exception as tests do
+     */
+    public void tstSendMailAuth() throws Exception {
+        XmlConfigurator.loadConfiguration(getClass().getResourceAsStream("/mail.xml"));
+        Context ctx = new InitialContext();
+        Context env = (Context) ctx.lookup("java:comp/env");
+        Session session = (Session) env.lookup("mail/smtp-auth");
+        Message msg = new MimeMessage(session);
+        /* fromuser@todomain.com must be allowed to send authenticated
+            mail from the configured smpt host.  Generally, that means that
+            mail.smpt.user = fromuser. */
+        msg.setFrom(new InternetAddress("fromuser@todomain.com"));
+        InternetAddress to[] = new InternetAddress[1];
+        to[0] = new InternetAddress("touser@todomain.com");
+        msg.setRecipients(Message.RecipientType.TO, to);
+        msg.setSubject("authenticated mail session test");
+        msg.setContent("this is a test", "text/plain");
+        Transport.send(msg);
     }
 }
 

Modified: directory/naming/trunk/naming-factory/src/java/org/apache/naming/factory/MailSessionFactory.java
URL: http://svn.apache.org/viewcvs/directory/naming/trunk/naming-factory/src/java/org/apache/naming/factory/MailSessionFactory.java?view=diff&r1=160794&r2=160795
==============================================================================
--- directory/naming/trunk/naming-factory/src/java/org/apache/naming/factory/MailSessionFactory.java (original)
+++ directory/naming/trunk/naming-factory/src/java/org/apache/naming/factory/MailSessionFactory.java Sun Apr 10 11:47:18 2005
@@ -21,6 +21,9 @@
 import java.util.Enumeration;
 import java.util.Hashtable;
 import java.util.Properties;
+
+import javax.mail.Authenticator;
+import javax.mail.PasswordAuthentication;
 import javax.mail.Session;
 import javax.naming.Name;
 import javax.naming.Context;
@@ -92,7 +95,8 @@
         // can read its default properties without throwing Security
         // exceptions
         return AccessController.doPrivileged( new PrivilegedAction() {
-		public Object run() {
+        public Object run() {
+                    String password = null;
 
                     // Create the JavaMail properties we will use
                     Properties props = new Properties();
@@ -103,15 +107,37 @@
                         RefAddr attr = (RefAddr) attrs.nextElement();
                         if ("factory".equals(attr.getType()))
                             continue;
+                        if ("password".equals(attr.getType())) {
+                            password = (String)attr.getContent();
+                            continue;
+                        }
                         props.put(attr.getType(), (String) attr.getContent());
                     }
-
+                    
+                    Authenticator auth = null;
+                    
+                    // Check for authentication
+                    if (password != null) {
+                        String user = props.getProperty("mail.smtp.user");
+                        if (user == null)
+                            user = props.getProperty("mail.user");
+                        if (user != null) {
+                            final PasswordAuthentication pa = new PasswordAuthentication(user, password);
+                            
+                            auth = new Authenticator(){
+                                protected PasswordAuthentication getPasswordAuthentication()
+                                {
+                                    return pa;
+                                }
+                            };
+                        }
+                    }
                     // Create and return the new Session object
-                    Session session = Session.getInstance(props, null);
+                    Session session = Session.getInstance(props, auth);
                     return (session);
 
-		}
-	    } );
+        }
+        } );
 
     }
 

Modified: directory/naming/trunk/xdocs/changes.xml
URL: http://svn.apache.org/viewcvs/directory/naming/trunk/xdocs/changes.xml?view=diff&r1=160794&r2=160795
==============================================================================
--- directory/naming/trunk/xdocs/changes.xml (original)
+++ directory/naming/trunk/xdocs/changes.xml Sun Apr 10 11:47:18 2005
@@ -39,7 +39,7 @@
   <body>
     <release version="0.9" date="TBD"  
        description="Apache Directory Naming 0.9 - General Availability Release">
-       <action dev="psteitz" type="update" issue="DIRNAMING-11">
+      <action dev="psteitz" type="update" issue="DIRNAMING-11">
           Modified NamingContextFactory to persist contexts in ContextBindings.
           When using NamingContextFactory, a NAME property may be specified to 
           retrieve or create a named context. 
@@ -57,6 +57,10 @@
           jndiURLContextFactory to handle jndi URL scheme and 
           SelectorJNDIContext to manage jndi: namespace, stripping headers and
           delegating JNDI operation to named contexts.
+      </action>
+      <action dev="psteitz" type="update">
+          Ported tomcat patch from BZ 31288, adding support for authenticated
+          mail sessions.
       </action>
     </release>     
     <release version="0.8" date="2005-01-15"