directory-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From elecha...@apache.org
Subject svn commit: r1235328 [12/12] - in /directory/apacheds/trunk: server-annotations/src/main/java/org/apache/directory/server/annotations/ server-annotations/src/main/java/org/apache/directory/server/factory/ server-annotations/src/test/java/org/apache/dir...
Date Tue, 24 Jan 2012 16:22:36 GMT
Modified: directory/apacheds/trunk/server-integ/src/test/java/org/apache/directory/server/ssl/LdapsIT.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/server-integ/src/test/java/org/apache/directory/server/ssl/LdapsIT.java?rev=1235328&r1=1235327&r2=1235328&view=diff
==============================================================================
--- directory/apacheds/trunk/server-integ/src/test/java/org/apache/directory/server/ssl/LdapsIT.java
(original)
+++ directory/apacheds/trunk/server-integ/src/test/java/org/apache/directory/server/ssl/LdapsIT.java
Tue Jan 24 16:22:33 2012
@@ -56,38 +56,37 @@ import org.junit.runner.RunWith;
  * 
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith ( FrameworkRunner.class ) 
-@CreateDS( allowAnonAccess=true, name="LdapsIT-class")
-@CreateLdapServer ( 
-    transports = 
-    {
-        @CreateTransport( protocol = "LDAP" ),
-        @CreateTransport( protocol = "LDAPS" )
+@RunWith(FrameworkRunner.class)
+@CreateDS(allowAnonAccess = true, name = "LdapsIT-class")
+@CreateLdapServer(
+    transports =
+        {
+            @CreateTransport(protocol = "LDAP"),
+            @CreateTransport(protocol = "LDAPS")
     },
-    saslHost="localhost",
-    saslMechanisms = 
-    {
-        @SaslMechanism( name=SupportedSaslMechanisms.PLAIN, implClass=PlainMechanismHandler.class
),
-        @SaslMechanism( name= SupportedSaslMechanisms.CRAM_MD5, implClass=CramMd5MechanismHandler.class),
-        @SaslMechanism( name=SupportedSaslMechanisms.DIGEST_MD5, implClass=DigestMd5MechanismHandler.class),
-        @SaslMechanism( name=SupportedSaslMechanisms.GSSAPI, implClass=GssapiMechanismHandler.class),
-        @SaslMechanism( name=SupportedSaslMechanisms.NTLM, implClass=NtlmMechanismHandler.class),
-        @SaslMechanism( name=SupportedSaslMechanisms.GSS_SPNEGO, implClass=NtlmMechanismHandler.class)
+    saslHost = "localhost",
+    saslMechanisms =
+        {
+            @SaslMechanism(name = SupportedSaslMechanisms.PLAIN, implClass = PlainMechanismHandler.class),
+            @SaslMechanism(name = SupportedSaslMechanisms.CRAM_MD5, implClass = CramMd5MechanismHandler.class),
+            @SaslMechanism(name = SupportedSaslMechanisms.DIGEST_MD5, implClass = DigestMd5MechanismHandler.class),
+            @SaslMechanism(name = SupportedSaslMechanisms.GSSAPI, implClass = GssapiMechanismHandler.class),
+            @SaslMechanism(name = SupportedSaslMechanisms.NTLM, implClass = NtlmMechanismHandler.class),
+            @SaslMechanism(name = SupportedSaslMechanisms.GSS_SPNEGO, implClass = NtlmMechanismHandler.class)
     },
-    extendedOpHandlers = 
-    {
-        StoredProcedureExtendedOperationHandler.class
+    extendedOpHandlers =
+        {
+            StoredProcedureExtendedOperationHandler.class
     },
-    ntlmProvider=BogusNtlmProvider.class
-    )
+    ntlmProvider = BogusNtlmProvider.class)
 public class LdapsIT extends AbstractLdapTestUnit
 {
     @Rule
     public MultiThreadedMultiInvoker i = new MultiThreadedMultiInvoker( MultiThreadedMultiInvoker.NOT_THREADSAFE
);
 
     private static final String RDN = "cn=The Person";
-    
-    
+
+
     /**
      * Create a secure connection on ou=system.
      */
@@ -114,11 +113,11 @@ public class LdapsIT extends AbstractLda
     {
         // Create a person
         Attributes attributes = LdifUtils.createJndiAttributes(
-                "objectClass: top",
-                "objectClass: person",
-                "cn: The Person",
-                "sn: Person",
-                "description: this is a person");
+            "objectClass: top",
+            "objectClass: person",
+            "cn: The Person",
+            "sn: Person",
+            "description: this is a person" );
         DirContext ctx = getSecureConnectionSystem();
         DirContext person = ctx.createSubcontext( RDN, attributes );
 

Modified: directory/apacheds/trunk/server-integ/src/test/java/org/apache/directory/server/ssl/LdapsUpdateCertificateIT.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/server-integ/src/test/java/org/apache/directory/server/ssl/LdapsUpdateCertificateIT.java?rev=1235328&r1=1235327&r2=1235328&view=diff
==============================================================================
--- directory/apacheds/trunk/server-integ/src/test/java/org/apache/directory/server/ssl/LdapsUpdateCertificateIT.java
(original)
+++ directory/apacheds/trunk/server-integ/src/test/java/org/apache/directory/server/ssl/LdapsUpdateCertificateIT.java
Tue Jan 24 16:22:33 2012
@@ -61,35 +61,35 @@ import org.junit.runner.RunWith;
  * 
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith ( FrameworkRunner.class ) 
-@CreateDS( allowAnonAccess=true, name="LdapsUpdateCertificateIT-class")
-@CreateLdapServer ( 
-    transports = 
-    {
-        @CreateTransport( protocol = "LDAP" ),
-        @CreateTransport( protocol = "LDAPS" )
+@RunWith(FrameworkRunner.class)
+@CreateDS(allowAnonAccess = true, name = "LdapsUpdateCertificateIT-class")
+@CreateLdapServer(
+    transports =
+        {
+            @CreateTransport(protocol = "LDAP"),
+            @CreateTransport(protocol = "LDAPS")
     },
-    saslHost="localhost",
-    saslMechanisms = 
-    {
-        @SaslMechanism( name=SupportedSaslMechanisms.PLAIN, implClass=PlainMechanismHandler.class
),
-        @SaslMechanism( name=SupportedSaslMechanisms.CRAM_MD5, implClass=CramMd5MechanismHandler.class),
-        @SaslMechanism( name=SupportedSaslMechanisms.DIGEST_MD5, implClass=DigestMd5MechanismHandler.class),
-        @SaslMechanism( name=SupportedSaslMechanisms.GSSAPI, implClass=GssapiMechanismHandler.class),
-        @SaslMechanism( name=SupportedSaslMechanisms.NTLM, implClass=NtlmMechanismHandler.class),
-        @SaslMechanism( name= SupportedSaslMechanisms.GSS_SPNEGO, implClass=NtlmMechanismHandler.class)
+    saslHost = "localhost",
+    saslMechanisms =
+        {
+            @SaslMechanism(name = SupportedSaslMechanisms.PLAIN, implClass = PlainMechanismHandler.class),
+            @SaslMechanism(name = SupportedSaslMechanisms.CRAM_MD5, implClass = CramMd5MechanismHandler.class),
+            @SaslMechanism(name = SupportedSaslMechanisms.DIGEST_MD5, implClass = DigestMd5MechanismHandler.class),
+            @SaslMechanism(name = SupportedSaslMechanisms.GSSAPI, implClass = GssapiMechanismHandler.class),
+            @SaslMechanism(name = SupportedSaslMechanisms.NTLM, implClass = NtlmMechanismHandler.class),
+            @SaslMechanism(name = SupportedSaslMechanisms.GSS_SPNEGO, implClass = NtlmMechanismHandler.class)
     },
-    extendedOpHandlers = 
-    {
-        StoredProcedureExtendedOperationHandler.class
+    extendedOpHandlers =
+        {
+            StoredProcedureExtendedOperationHandler.class
     },
-    ntlmProvider=BogusNtlmProvider.class
-    )
+    ntlmProvider = BogusNtlmProvider.class)
 public class LdapsUpdateCertificateIT extends AbstractLdapTestUnit
 {
     @Rule
     public MultiThreadedMultiInvoker i = new MultiThreadedMultiInvoker( MultiThreadedMultiInvoker.NOT_THREADSAFE
);
 
+
     /**
      * Create an entry for a person.
      */
@@ -141,7 +141,7 @@ public class LdapsUpdateCertificateIT ex
         ctx.close();
 
         getLdapServer().reloadSslContext();
-        
+
         // create a secure connection
         ctx = new InitialDirContext( env );
 
@@ -153,9 +153,9 @@ public class LdapsUpdateCertificateIT ex
         String subjectDN = lastReceivedServerCertificates[0].getSubjectDN().getName();
         // converting the values to lowercase is required cause the certificate is
         // having attribute names in capital letters e.c the above newIssuerDN will be present
as CN=new_issuer_dn
-        assertEquals( "Expected the new certificate with the new issuer", 
+        assertEquals( "Expected the new certificate with the new issuer",
             Strings.toLowerCase( newIssuerDN ), Strings.toLowerCase( issuerDN ) );
-        assertEquals( "Expected the new certificate with the new subject", 
+        assertEquals( "Expected the new certificate with the new subject",
             Strings.toLowerCase( newSubjectDN ), Strings.toLowerCase( subjectDN ) );
     }
 

Modified: directory/apacheds/trunk/server-integ/src/test/java/org/apache/directory/server/ssl/StartTlsConfidentialityIT.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/server-integ/src/test/java/org/apache/directory/server/ssl/StartTlsConfidentialityIT.java?rev=1235328&r1=1235327&r2=1235328&view=diff
==============================================================================
--- directory/apacheds/trunk/server-integ/src/test/java/org/apache/directory/server/ssl/StartTlsConfidentialityIT.java
(original)
+++ directory/apacheds/trunk/server-integ/src/test/java/org/apache/directory/server/ssl/StartTlsConfidentialityIT.java
Tue Jan 24 16:22:33 2012
@@ -82,29 +82,29 @@ import org.slf4j.LoggerFactory;
  * 
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith ( FrameworkRunner.class ) 
-@CreateDS( allowAnonAccess=true, name="StartTlsConfidentialityIT-class")
-@CreateLdapServer ( 
-    transports = 
-    {
-        @CreateTransport( protocol = "LDAP" ),
-        @CreateTransport( protocol = "LDAPS" )
+@RunWith(FrameworkRunner.class)
+@CreateDS(allowAnonAccess = true, name = "StartTlsConfidentialityIT-class")
+@CreateLdapServer(
+    transports =
+        {
+            @CreateTransport(protocol = "LDAP"),
+            @CreateTransport(protocol = "LDAPS")
     },
-    extendedOpHandlers={ StartTlsHandler.class }
-    )
+    extendedOpHandlers =
+        { StartTlsHandler.class })
 public class StartTlsConfidentialityIT extends AbstractLdapTestUnit
 {
     @Rule
     public MultiThreadedMultiInvoker i = new MultiThreadedMultiInvoker( MultiThreadedMultiInvoker.NOT_THREADSAFE
);
 
     private static final Logger LOG = LoggerFactory.getLogger( StartTlsConfidentialityIT.class
);
-    private static final String[] CERT_IDS = new String[] { "userCertificate" };
+    private static final String[] CERT_IDS = new String[]
+        { "userCertificate" };
     private File ksFile;
 
-    
     boolean oldConfidentialityRequiredValue;
-    
-    
+
+
     /**
      * Sets up the key store and installs the self signed certificate for the 
      * server (created on first startup) which is to be used by the StartTLS 
@@ -122,7 +122,7 @@ public class StartTlsConfidentialityIT e
         {
             ksFile.delete();
         }
-        
+
         ksFile = File.createTempFile( "testStore", "ks" );
         CoreSession session = getLdapServer().getDirectoryService().getAdminSession();
         Entry entry = session.lookup( new Dn( "uid=admin,ou=system" ), CERT_IDS );
@@ -137,11 +137,11 @@ public class StartTlsConfidentialityIT e
         ks.setCertificateEntry( "apacheds", cert );
         ks.store( new FileOutputStream( ksFile ), "changeit".toCharArray() );
         LOG.debug( "Keystore file installed: {}", ksFile.getAbsolutePath() );
-        
+
         oldConfidentialityRequiredValue = getLdapServer().isConfidentialityRequired();
     }
-    
-    
+
+
     /**
      * Just deletes the generated key store file.
      */
@@ -152,23 +152,23 @@ public class StartTlsConfidentialityIT e
         {
             ksFile.delete();
         }
-        
+
         LOG.debug( "Keystore file deleted: {}", ksFile.getAbsolutePath() );
         getLdapServer().setConfidentialityRequired( oldConfidentialityRequiredValue );
     }
-    
+
 
     private LdapContext getSecuredContext() throws Exception
     {
-        System.setProperty ( "javax.net.ssl.trustStore", ksFile.getAbsolutePath() );
-        System.setProperty ( "javax.net.ssl.keyStore", ksFile.getAbsolutePath() );
-        System.setProperty ( "javax.net.ssl.keyStorePassword", "changeit" );
+        System.setProperty( "javax.net.ssl.trustStore", ksFile.getAbsolutePath() );
+        System.setProperty( "javax.net.ssl.keyStore", ksFile.getAbsolutePath() );
+        System.setProperty( "javax.net.ssl.keyStorePassword", "changeit" );
         LOG.debug( "testStartTls() test starting ... " );
-        
+
         // Set up environment for creating initial context
-        Hashtable<String, Object> env = new Hashtable<String,Object>();
+        Hashtable<String, Object> env = new Hashtable<String, Object>();
         env.put( Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory" );
-        
+
         // Must use the name of the server that is found in its certificate?
         env.put( Context.PROVIDER_URL, "ldap://localhost:" + getLdapServer().getPort() );
 
@@ -180,17 +180,18 @@ public class StartTlsConfidentialityIT e
         LOG.debug( "About send startTls extended operation" );
         StartTlsResponse tls = ( StartTlsResponse ) ctx.extendedOperation( new StartTlsRequest()
);
         LOG.debug( "Extended operation issued" );
-        tls.setHostnameVerifier( new HostnameVerifier() {
+        tls.setHostnameVerifier( new HostnameVerifier()
+        {
             public boolean verify( String hostname, SSLSession session )
             {
                 return true;
-            } 
+            }
         } );
         LOG.debug( "TLS negotion about to begin" );
         tls.negotiate( ReloadableSSLSocketFactory.getDefault() );
         return ctx;
     }
-    
+
 
     /**
      * Checks to make sure insecure binds fail while secure binds succeed.
@@ -209,17 +210,17 @@ public class StartTlsConfidentialityIT e
             ServerIntegrationUtils.getWiredContext( getLdapServer() );
             fail( "Should not get here due to violation of confidentiality requirements"
);
         }
-        catch( AuthenticationNotSupportedException e )
+        catch ( AuthenticationNotSupportedException e )
         {
         }
-        
+
         // -------------------------------------------------------------------
         // get anonymous connection with StartTLS (no bind request sent)
         // -------------------------------------------------------------------
 
         LdapContext ctx = getSecuredContext();
         assertNotNull( ctx );
-        
+
         // -------------------------------------------------------------------
         // upgrade connection via bind request (same physical connection - TLS)
         // -------------------------------------------------------------------
@@ -228,14 +229,14 @@ public class StartTlsConfidentialityIT e
         ctx.addToEnvironment( Context.SECURITY_CREDENTIALS, "secret" );
         ctx.addToEnvironment( Context.SECURITY_AUTHENTICATION, "simple" );
         ctx.reconnect( null );
-        
+
         // -------------------------------------------------------------------
         // do a search and confirm
         // -------------------------------------------------------------------
 
         NamingEnumeration<SearchResult> results = ctx.search( "ou=system", "(objectClass=*)",
new SearchControls() );
         Set<String> names = new HashSet<String>();
-        while( results.hasMore() )
+        while ( results.hasMore() )
         {
             names.add( results.next().getName() );
         }
@@ -245,7 +246,7 @@ public class StartTlsConfidentialityIT e
         assertTrue( names.contains( "ou=configuration" ) );
         assertTrue( names.contains( "uid=admin" ) );
         assertTrue( names.contains( "ou=groups" ) );
-        
+
         // -------------------------------------------------------------------
         // do add and confirm
         // -------------------------------------------------------------------
@@ -255,18 +256,19 @@ public class StartTlsConfidentialityIT e
         attrs.put( "cn", "foo bar" );
         ctx.createSubcontext( "cn=foo bar,ou=system", attrs );
         assertNotNull( ctx.lookup( "cn=foo bar,ou=system" ) );
-        
+
         // -------------------------------------------------------------------
         // do modify and confirm
         // -------------------------------------------------------------------
 
-        ModificationItem[] mods = new ModificationItem[] {
+        ModificationItem[] mods = new ModificationItem[]
+            {
                 new ModificationItem( DirContext.ADD_ATTRIBUTE, new BasicAttribute( "cn",
"fbar" ) )
         };
         ctx.modifyAttributes( "cn=foo bar,ou=system", mods );
         Attributes reread = ( Attributes ) ctx.getAttributes( "cn=foo bar,ou=system" );
         assertTrue( reread.get( "cn" ).contains( "fbar" ) );
-        
+
         // -------------------------------------------------------------------
         // do rename and confirm 
         // -------------------------------------------------------------------
@@ -282,7 +284,7 @@ public class StartTlsConfidentialityIT e
         }
         reread = ( Attributes ) ctx.getAttributes( "cn=fbar,ou=system" );
         assertTrue( reread.get( "cn" ).contains( "fbar" ) );
-        
+
         // -------------------------------------------------------------------
         // do delete and confirm
         // -------------------------------------------------------------------
@@ -296,7 +298,7 @@ public class StartTlsConfidentialityIT e
         catch ( NameNotFoundException e )
         {
         }
-        
+
         ctx.close();
     }
 }

Modified: directory/apacheds/trunk/server-integ/src/test/java/org/apache/directory/server/ssl/StartTlsIT.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/server-integ/src/test/java/org/apache/directory/server/ssl/StartTlsIT.java?rev=1235328&r1=1235327&r2=1235328&view=diff
==============================================================================
--- directory/apacheds/trunk/server-integ/src/test/java/org/apache/directory/server/ssl/StartTlsIT.java
(original)
+++ directory/apacheds/trunk/server-integ/src/test/java/org/apache/directory/server/ssl/StartTlsIT.java
Tue Jan 24 16:22:33 2012
@@ -74,31 +74,31 @@ import org.slf4j.LoggerFactory;
  * 
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith ( FrameworkRunner.class ) 
-@CreateDS( allowAnonAccess=true, name="StartTlsIT-class")
-@CreateLdapServer ( 
-    transports = 
-    {
-        @CreateTransport( protocol = "LDAP" ),
-        @CreateTransport( protocol = "LDAPS" )
+@RunWith(FrameworkRunner.class)
+@CreateDS(allowAnonAccess = true, name = "StartTlsIT-class")
+@CreateLdapServer(
+    transports =
+        {
+            @CreateTransport(protocol = "LDAP"),
+            @CreateTransport(protocol = "LDAPS")
     },
-    extendedOpHandlers={ StartTlsHandler.class }
-    )
+    extendedOpHandlers =
+        { StartTlsHandler.class })
 public class StartTlsIT extends AbstractLdapTestUnit
 {
     @Rule
     public MultiThreadedMultiInvoker i = new MultiThreadedMultiInvoker( MultiThreadedMultiInvoker.NOT_THREADSAFE
);
 
     private static final Logger LOG = LoggerFactory.getLogger( StartTlsIT.class );
-    private static final String[] CERT_IDS = new String[] { "userCertificate" };
+    private static final String[] CERT_IDS = new String[]
+        { "userCertificate" };
     private static final int CONNECT_ITERATIONS = 10;
     private static final boolean VERBOSE = false;
     private File ksFile;
 
-    
     boolean oldConfidentialityRequiredValue;
-    
-    
+
+
     /**
      * Sets up the key store and installs the self signed certificate for the 
      * server (created on first startup) which is to be used by the StartTLS 
@@ -116,7 +116,7 @@ public class StartTlsIT extends Abstract
         {
             ksFile.delete();
         }
-        
+
         ksFile = File.createTempFile( "testStore", "ks" );
         CoreSession session = getLdapServer().getDirectoryService().getAdminSession();
         Entry entry = session.lookup( new Dn( "uid=admin,ou=system" ), CERT_IDS );
@@ -131,11 +131,11 @@ public class StartTlsIT extends Abstract
         ks.setCertificateEntry( "apacheds", cert );
         ks.store( new FileOutputStream( ksFile ), "changeit".toCharArray() );
         LOG.debug( "Keystore file installed: {}", ksFile.getAbsolutePath() );
-        
+
         oldConfidentialityRequiredValue = getLdapServer().isConfidentialityRequired();
     }
-    
-    
+
+
     /**
      * Just deletes the generated key store file.
      */
@@ -146,29 +146,29 @@ public class StartTlsIT extends Abstract
         {
             ksFile.delete();
         }
-        
+
         LOG.debug( "Keystore file deleted: {}", ksFile.getAbsolutePath() );
         getLdapServer().setConfidentialityRequired( oldConfidentialityRequiredValue );
     }
-    
+
 
     private void search( int ii, LdapContext securedContext ) throws Exception
     {
         SearchControls controls = new SearchControls();
         controls.setSearchScope( SearchControls.SUBTREE_SCOPE );
-        
+
         if ( VERBOSE )
         {
             System.out.println( "Searching on " + ii + "-th iteration:" );
         }
-        
+
         List<String> results = new ArrayList<String>();
         NamingEnumeration<SearchResult> ne = securedContext.search( "ou=system", "(objectClass=*)",
controls );
         while ( ne.hasMore() )
         {
             String dn = ne.next().getNameInNamespace();
             results.add( dn );
-            
+
             if ( VERBOSE )
             {
                 System.out.println( "\tSearch Result = " + dn );
@@ -181,15 +181,20 @@ public class StartTlsIT extends Abstract
         assertTrue( "Results must contain uid=admin,ou=system", results.contains( "uid=admin,ou=system"
) );
         assertTrue( "Results must contain ou=users,ou=system", results.contains( "ou=users,ou=system"
) );
         assertTrue( "Results must contain ou=groups,ou=system", results.contains( "ou=groups,ou=system"
) );
-        assertTrue( "Results must contain cn=Administrators,ou=groups,ou=system", results.contains(
"cn=Administrators,ou=groups,ou=system" ) );
+        assertTrue( "Results must contain cn=Administrators,ou=groups,ou=system",
+            results.contains( "cn=Administrators,ou=groups,ou=system" ) );
         assertTrue( "Results must contain ou=configuration,ou=system", results.contains(
"ou=configuration,ou=system" ) );
-        assertTrue( "Results must contain ou=partitions,ou=configuration,ou=system", results.contains(
"ou=partitions,ou=configuration,ou=system" ) );
-        assertTrue( "Results must contain ou=services,ou=configuration,ou=system", results.contains(
"ou=services,ou=configuration,ou=system" ) );
-        assertTrue( "Results must contain ou=interceptors,ou=configuration,ou=system", results.contains(
"ou=interceptors,ou=configuration,ou=system" ) );
-        assertTrue( "Results must contain prefNodeName=sysPrefRoot,ou=system", results.contains(
"prefNodeName=sysPrefRoot,ou=system" ) );
+        assertTrue( "Results must contain ou=partitions,ou=configuration,ou=system",
+            results.contains( "ou=partitions,ou=configuration,ou=system" ) );
+        assertTrue( "Results must contain ou=services,ou=configuration,ou=system",
+            results.contains( "ou=services,ou=configuration,ou=system" ) );
+        assertTrue( "Results must contain ou=interceptors,ou=configuration,ou=system",
+            results.contains( "ou=interceptors,ou=configuration,ou=system" ) );
+        assertTrue( "Results must contain prefNodeName=sysPrefRoot,ou=system",
+            results.contains( "prefNodeName=sysPrefRoot,ou=system" ) );
     }
-    
-    
+
+
     /**
      * Tests StartTLS by creating a JNDI connection using the generated key 
      * store with the installed self signed certificate.  It then searches 
@@ -209,34 +214,35 @@ public class StartTlsIT extends Abstract
                 System.out.println( "Performing " + ii + "-th iteration to connect via StartTLS."
);
             }
 
-            System.setProperty ( "javax.net.ssl.trustStore", ksFile.getAbsolutePath() );
-            System.setProperty ( "javax.net.ssl.keyStore", ksFile.getAbsolutePath() );
-            System.setProperty ( "javax.net.ssl.keyStorePassword", "changeit" );
+            System.setProperty( "javax.net.ssl.trustStore", ksFile.getAbsolutePath() );
+            System.setProperty( "javax.net.ssl.keyStore", ksFile.getAbsolutePath() );
+            System.setProperty( "javax.net.ssl.keyStorePassword", "changeit" );
             LOG.debug( "testStartTls() test starting ... " );
-            
+
             // Set up environment for creating initial context
-            Hashtable<String, Object> env = new Hashtable<String,Object>();
+            Hashtable<String, Object> env = new Hashtable<String, Object>();
             env.put( Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory"
);
             env.put( "java.naming.security.principal", "uid=admin,ou=system" );
             env.put( "java.naming.security.credentials", "secret" );
             env.put( "java.naming.security.authentication", "simple" );
-            
+
             // Must use the name of the server that is found in its certificate?
             env.put( Context.PROVIDER_URL, "ldap://localhost:" + getLdapServer().getPort()
);
-    
+
             // Create initial context
             LOG.debug( "About to get initial context" );
             LdapContext ctx = new InitialLdapContext( env, null );
-    
+
             // Start TLS
             LOG.debug( "About send startTls extended operation" );
             StartTlsResponse tls = ( StartTlsResponse ) ctx.extendedOperation( new StartTlsRequest()
);
             LOG.debug( "Extended operation issued" );
-            tls.setHostnameVerifier( new HostnameVerifier() {
+            tls.setHostnameVerifier( new HostnameVerifier()
+            {
                 public boolean verify( String hostname, SSLSession session )
                 {
                     return true;
-                } 
+                }
             } );
             LOG.debug( "TLS negotion about to begin" );
             tls.negotiate( ReloadableSSLSocketFactory.getDefault() );

Modified: directory/apacheds/trunk/server-integ/src/test/java/org/apache/directory/server/ssl/StartTlsUpdateCertificateIT.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/server-integ/src/test/java/org/apache/directory/server/ssl/StartTlsUpdateCertificateIT.java?rev=1235328&r1=1235327&r2=1235328&view=diff
==============================================================================
--- directory/apacheds/trunk/server-integ/src/test/java/org/apache/directory/server/ssl/StartTlsUpdateCertificateIT.java
(original)
+++ directory/apacheds/trunk/server-integ/src/test/java/org/apache/directory/server/ssl/StartTlsUpdateCertificateIT.java
Tue Jan 24 16:22:33 2012
@@ -73,29 +73,29 @@ import org.slf4j.LoggerFactory;
  * 
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith ( FrameworkRunner.class ) 
-@CreateDS( allowAnonAccess=true, name="StartTlsUpdateCertificateIT-class")
-@CreateLdapServer ( 
-    transports = 
-    {
-        @CreateTransport( protocol = "LDAP" ),
-        @CreateTransport( protocol = "LDAPS" )
+@RunWith(FrameworkRunner.class)
+@CreateDS(allowAnonAccess = true, name = "StartTlsUpdateCertificateIT-class")
+@CreateLdapServer(
+    transports =
+        {
+            @CreateTransport(protocol = "LDAP"),
+            @CreateTransport(protocol = "LDAPS")
     },
-    extendedOpHandlers={ StartTlsHandler.class }
-    )
+    extendedOpHandlers =
+        { StartTlsHandler.class })
 public class StartTlsUpdateCertificateIT extends AbstractLdapTestUnit
 {
     @Rule
     public MultiThreadedMultiInvoker i = new MultiThreadedMultiInvoker( MultiThreadedMultiInvoker.NOT_THREADSAFE
);
 
     private static final Logger LOG = LoggerFactory.getLogger( StartTlsUpdateCertificateIT.class
);
-    private static final String[] CERT_IDS = new String[] { "userCertificate" };
+    private static final String[] CERT_IDS = new String[]
+        { "userCertificate" };
     private File ksFile;
 
-    
     boolean oldConfidentialityRequiredValue;
-    
-    
+
+
     /**
      * Sets up the key store and installs the self signed certificate for the 
      * server (created on first startup) which is to be used by the StartTLS 
@@ -113,7 +113,7 @@ public class StartTlsUpdateCertificateIT
         {
             ksFile.delete();
         }
-        
+
         ksFile = File.createTempFile( "testStore", "ks" );
         CoreSession session = getLdapServer().getDirectoryService().getAdminSession();
         Entry entry = session.lookup( new Dn( "uid=admin,ou=system" ), CERT_IDS );
@@ -128,11 +128,11 @@ public class StartTlsUpdateCertificateIT
         ks.setCertificateEntry( "apacheds", cert );
         ks.store( new FileOutputStream( ksFile ), "changeit".toCharArray() );
         LOG.debug( "Keystore file installed: {}", ksFile.getAbsolutePath() );
-        
+
         oldConfidentialityRequiredValue = getLdapServer().isConfidentialityRequired();
     }
-    
-    
+
+
     /**
      * Just deletes the generated key store file.
      */
@@ -143,11 +143,11 @@ public class StartTlsUpdateCertificateIT
         {
             ksFile.delete();
         }
-        
+
         LOG.debug( "Keystore file deleted: {}", ksFile.getAbsolutePath() );
         getLdapServer().setConfidentialityRequired( oldConfidentialityRequiredValue );
     }
-    
+
 
     /**
      * Test for DIRSERVER-1373.
@@ -164,11 +164,12 @@ public class StartTlsUpdateCertificateIT
         env.put( "java.naming.security.authentication", "simple" );
         LdapContext ctx = new InitialLdapContext( env, null );
         StartTlsResponse tls = ( StartTlsResponse ) ctx.extendedOperation( new StartTlsRequest()
);
-        tls.setHostnameVerifier( new HostnameVerifier() {
+        tls.setHostnameVerifier( new HostnameVerifier()
+        {
             public boolean verify( String hostname, SSLSession session )
             {
                 return true;
-            } 
+            }
         } );
         tls.negotiate( BogusSSLContextFactory.getInstance( false ).getSocketFactory() );
 
@@ -191,15 +192,16 @@ public class StartTlsUpdateCertificateIT
         ctx.close();
 
         getLdapServer().reloadSslContext();
-        
+
         // create a new secure connection
         ctx = new InitialLdapContext( env, null );
         tls = ( StartTlsResponse ) ctx.extendedOperation( new StartTlsRequest() );
-        tls.setHostnameVerifier( new HostnameVerifier() {
+        tls.setHostnameVerifier( new HostnameVerifier()
+        {
             public boolean verify( String hostname, SSLSession session )
             {
                 return true;
-            } 
+            }
         } );
         tls.negotiate( BogusSSLContextFactory.getInstance( false ).getSocketFactory() );
 
@@ -209,7 +211,9 @@ public class StartTlsUpdateCertificateIT
         assertEquals( 1, lastReceivedServerCertificates.length );
         String issuerDN = lastReceivedServerCertificates[0].getIssuerDN().getName();
         String subjectDN = lastReceivedServerCertificates[0].getSubjectDN().getName();
-        assertEquals( "Expected the new certificate with the new issuer", Strings.toLowerCase(
newIssuerDN ), Strings.toLowerCase( issuerDN ) );
-        assertEquals( "Expected the new certificate with the new subject", Strings.toLowerCase(
newSubjectDN ), Strings.toLowerCase( subjectDN ) );
+        assertEquals( "Expected the new certificate with the new issuer", Strings.toLowerCase(
newIssuerDN ),
+            Strings.toLowerCase( issuerDN ) );
+        assertEquals( "Expected the new certificate with the new subject", Strings.toLowerCase(
newSubjectDN ),
+            Strings.toLowerCase( subjectDN ) );
     }
 }

Modified: directory/apacheds/trunk/server-integ/src/test/java/org/apache/directory/server/suites/StockServerISuite.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/server-integ/src/test/java/org/apache/directory/server/suites/StockServerISuite.java?rev=1235328&r1=1235327&r2=1235328&view=diff
==============================================================================
--- directory/apacheds/trunk/server-integ/src/test/java/org/apache/directory/server/suites/StockServerISuite.java
(original)
+++ directory/apacheds/trunk/server-integ/src/test/java/org/apache/directory/server/suites/StockServerISuite.java
Tue Jan 24 16:22:33 2012
@@ -73,8 +73,9 @@ import org.junit.runners.Suite;
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith ( FrameworkSuite.class )
-@Suite.SuiteClasses ( {
+@RunWith(FrameworkSuite.class)
+@Suite.SuiteClasses(
+    {
         // kerberos
         KeyDerivationServiceIT.class,
         PasswordPolicyServiceIT.class,
@@ -136,33 +137,33 @@ import org.junit.runners.Suite;
         StartTlsConfidentialityIT.class,
         StartTlsIT.class,
         StartTlsUpdateCertificateIT.class
-        } )
-@CreateDS( 
-    name = "SuiteDS",
-    partitions =
+})
+@CreateDS(
+name = "SuiteDS",
+partitions =
     {
         @CreatePartition(
             name = "example",
             suffix = "dc=example,dc=com",
-            contextEntry = @ContextEntry( 
+            contextEntry = @ContextEntry(
                 entryLdif =
-                    "dn: dc=example,dc=com\n" +
+                "dn: dc=example,dc=com\n" +
                     "dc: example\n" +
                     "objectClass: top\n" +
-                    "objectClass: domain\n\n" ),
-            indexes = 
-            {
-                @CreateIndex( attribute = "objectClass" ),
-                @CreateIndex( attribute = "dc" ),
-                @CreateIndex( attribute = "ou" )
-            } )
-    } )
-@CreateLdapServer ( 
-    transports = 
+                    "objectClass: domain\n\n"),
+            indexes =
+                {
+                    @CreateIndex(attribute = "objectClass"),
+                    @CreateIndex(attribute = "dc"),
+                    @CreateIndex(attribute = "ou")
+            })
+})
+@CreateLdapServer(
+transports =
     {
-        @CreateTransport( protocol = "LDAP" ), 
-        @CreateTransport( protocol = "LDAPS" ) 
-    })
+        @CreateTransport(protocol = "LDAP"),
+        @CreateTransport(protocol = "LDAPS")
+})
 public class StockServerISuite
 {
 }

Modified: directory/apacheds/trunk/server-jndi/src/main/java/org/apache/directory/server/configuration/ApacheDS.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/server-jndi/src/main/java/org/apache/directory/server/configuration/ApacheDS.java?rev=1235328&r1=1235327&r2=1235328&view=diff
==============================================================================
--- directory/apacheds/trunk/server-jndi/src/main/java/org/apache/directory/server/configuration/ApacheDS.java
(original)
+++ directory/apacheds/trunk/server-jndi/src/main/java/org/apache/directory/server/configuration/ApacheDS.java
Tue Jan 24 16:22:33 2012
@@ -68,7 +68,7 @@ import org.slf4j.LoggerFactory;
 public class ApacheDS
 {
     private static final Logger LOG = LoggerFactory.getLogger( ApacheDS.class.getName() );
-    
+
     /** Default delay between two flushes to the backend */
     private static final long DEFAULT_SYNC_PERIOD_MILLIS = 20000;
 
@@ -77,12 +77,12 @@ public class ApacheDS
 
     /** Directory where are stored the LDIF files to be loaded at startup */
     private File ldifDirectory;
-    
+
     private final List<LdifLoadFilter> ldifFilters = new ArrayList<LdifLoadFilter>();
 
     /** The LDAP server protocol handler */
     private final LdapServer ldapServer;
-    
+
     /** The directory service */
     private DirectoryService directoryService;
 
@@ -97,9 +97,9 @@ public class ApacheDS
         LOG.info( "Starting the Apache Directory Server" );
 
         this.ldapServer = ldapServer;
-        
+
         directoryService = ldapServer.getDirectoryService();
-        
+
         if ( directoryService == null )
         {
             directoryService = new DefaultDirectoryService();
@@ -119,46 +119,48 @@ public class ApacheDS
     public void startup() throws Exception
     {
         LOG.debug( "Starting the server" );
-        
+
         initSchema();
-        
+
         SchemaManager schemaManager = directoryService.getSchemaManager();
-        
-        if ( ! directoryService.isStarted() )
+
+        if ( !directoryService.isStarted() )
         {
             // inject the schema manager and set the partition directory
             // once the CiDIT gets done we need not do this kind of dirty hack
             Set<? extends Partition> partitions = directoryService.getPartitions();
-         
-            for( Partition p : partitions )
+
+            for ( Partition p : partitions )
             {
-                if( p instanceof AbstractBTreePartition )
+                if ( p instanceof AbstractBTreePartition )
                 {
-                    File partitionPath = new File( directoryService.getInstanceLayout().getPartitionsDirectory(),
p.getId() );
+                    File partitionPath = new File( directoryService.getInstanceLayout().getPartitionsDirectory(),
+                        p.getId() );
                     ( ( AbstractBTreePartition ) p ).setPartitionPath( partitionPath.toURI()
);
                 }
-                
-                if( p.getSchemaManager() == null )
+
+                if ( p.getSchemaManager() == null )
                 {
                     LOG.info( "setting the schema manager for partition {}", p.getSuffixDn()
);
                     p.setSchemaManager( schemaManager );
                 }
             }
-            
+
             Partition sysPartition = directoryService.getSystemPartition();
-            
-            if( sysPartition instanceof AbstractBTreePartition )
+
+            if ( sysPartition instanceof AbstractBTreePartition )
             {
-                File partitionPath = new File( directoryService.getInstanceLayout().getPartitionsDirectory(),
sysPartition.getId() );
+                File partitionPath = new File( directoryService.getInstanceLayout().getPartitionsDirectory(),
+                    sysPartition.getId() );
                 ( ( AbstractBTreePartition ) sysPartition ).setPartitionPath( partitionPath.toURI()
);
             }
 
-            if( sysPartition.getSchemaManager() == null )
+            if ( sysPartition.getSchemaManager() == null )
             {
                 LOG.info( "setting the schema manager for partition {}", sysPartition.getSuffixDn()
);
                 sysPartition.setSchemaManager( schemaManager );
             }
-            
+
             // Start the directory service if not started yet
             LOG.debug( "1. Starting the DirectoryService" );
             directoryService.startup();
@@ -168,7 +170,7 @@ public class ApacheDS
         loadLdifs();
 
         // Start the LDAP server
-        if ( ldapServer != null && ! ldapServer.isStarted() )
+        if ( ldapServer != null && !ldapServer.isStarted() )
         {
             LOG.debug( "3. Starting the LDAP server" );
             ldapServer.start();
@@ -182,12 +184,12 @@ public class ApacheDS
     {
         if ( ldapServer != null )
         {
-             return ( ldapServer.isStarted() );
+            return ( ldapServer.isStarted() );
         }
-        
+
         return directoryService.isStarted();
     }
-    
+
 
     public void shutdown() throws Exception
     {
@@ -224,7 +226,7 @@ public class ApacheDS
         this.synchPeriodMillis = synchPeriodMillis;
     }
 
-    
+
     /**
      * Get the directory where the LDIF files are stored
      * 
@@ -241,8 +243,8 @@ public class ApacheDS
         LOG.info( "The LDIF directory file is {}", ldifDirectory.getAbsolutePath() );
         this.ldifDirectory = ldifDirectory;
     }
-    
-    
+
+
     // ----------------------------------------------------------------------
     // From CoreContextFactory: presently in intermediate step but these
     // methods will be moved to the appropriate protocol service eventually.
@@ -250,7 +252,6 @@ public class ApacheDS
     // refactoring will be needed to place these where they belong.
     // ----------------------------------------------------------------------
 
-
     /**
      * Check that the entry where are stored the loaded Ldif files is created.
      * 
@@ -262,12 +263,12 @@ public class ApacheDS
     {
         Dn dn = new Dn( ServerDNConstants.LDIF_FILES_DN );
         Entry entry = null;
-        
+
         try
         {
             entry = directoryService.getAdminSession().lookup( dn );
         }
-        catch( Exception e )
+        catch ( Exception e )
         {
             LOG.info( "Failure while looking up {}. The entry will be created now.", ServerDNConstants.LDIF_FILES_DN,
e );
         }
@@ -277,7 +278,7 @@ public class ApacheDS
             entry = directoryService.newEntry( new Dn( ServerDNConstants.LDIF_FILES_DN )
);
             entry.add( SchemaConstants.OU_AT, "loadedLdifFiles" );
             entry.add( SchemaConstants.OBJECT_CLASS_AT, SchemaConstants.TOP_OC, SchemaConstants.ORGANIZATIONAL_UNIT_OC
);
-    
+
             directoryService.getAdminSession().add( entry );
         }
     }
@@ -290,24 +291,25 @@ public class ApacheDS
      */
     private Dn buildProtectedFileEntryDn( File ldif ) throws Exception
     {
-        String fileSep = File.separatorChar == '\\' ? 
-                ApacheSchemaConstants.WINDOWS_FILE_AT : 
-                ApacheSchemaConstants.UNIX_FILE_AT;
-
-        return  new Dn( fileSep +
-                "=" + 
-                Strings.dumpHexPairs( Strings.getBytesUtf8(getCanonical(ldif)) ) +
-                "," + 
-                ServerDNConstants.LDIF_FILES_DN ); 
+        String fileSep = File.separatorChar == '\\' ?
+            ApacheSchemaConstants.WINDOWS_FILE_AT :
+            ApacheSchemaConstants.UNIX_FILE_AT;
+
+        return new Dn( fileSep +
+            "=" +
+            Strings.dumpHexPairs( Strings.getBytesUtf8( getCanonical( ldif ) ) ) +
+            "," +
+            ServerDNConstants.LDIF_FILES_DN );
     }
 
-    
+
     private void addFileEntry( File ldif ) throws Exception
     {
-        String rdnAttr = File.separatorChar == '\\' ? 
-            ApacheSchemaConstants.WINDOWS_FILE_AT : 
+        String rdnAttr = File.separatorChar == '\\' ?
+            ApacheSchemaConstants.WINDOWS_FILE_AT :
             ApacheSchemaConstants.UNIX_FILE_AT;
-        String oc = File.separatorChar == '\\' ? ApacheSchemaConstants.WINDOWS_FILE_OC :
ApacheSchemaConstants.UNIX_FILE_OC;
+        String oc = File.separatorChar == '\\' ? ApacheSchemaConstants.WINDOWS_FILE_OC
+            : ApacheSchemaConstants.UNIX_FILE_OC;
 
         Entry entry = directoryService.newEntry( buildProtectedFileEntryDn( ldif ) );
         entry.add( rdnAttr, getCanonical( ldif ) );
@@ -346,21 +348,22 @@ public class ApacheDS
     private void loadLdif( File ldifFile ) throws Exception
     {
         Entry fileEntry = null;
-        
+
         try
         {
             fileEntry = directoryService.getAdminSession().lookup( buildProtectedFileEntryDn(
ldifFile ) );
         }
-        catch( Exception e )
+        catch ( Exception e )
         {
             // if does not exist
         }
-        
+
         if ( fileEntry != null )
         {
-            String time = ((ClonedServerEntry)fileEntry).getOriginalEntry().get( SchemaConstants.CREATE_TIMESTAMP_AT
).getString();
+            String time = ( ( ClonedServerEntry ) fileEntry ).getOriginalEntry()
+                .get( SchemaConstants.CREATE_TIMESTAMP_AT ).getString();
             LOG.info( "Load of LDIF file '" + getCanonical( ldifFile )
-                    + "' skipped.  It has already been loaded on " + time + "." );
+                + "' skipped.  It has already been loaded on " + time + "." );
         }
         else
         {
@@ -370,8 +373,8 @@ public class ApacheDS
             addFileEntry( ldifFile );
         }
     }
-    
-    
+
+
     /**
      * Load the existing LDIF files in alphabetic order
      */
@@ -385,16 +388,15 @@ public class ApacheDS
         }
 
         // LOG and bail if LDIF directory does not exists
-        if ( ! ldifDirectory.exists() )
+        if ( !ldifDirectory.exists() )
         {
             LOG.warn( "LDIF load directory '{}' does not exist.  No LDIF files will be loaded.",
                 getCanonical( ldifDirectory ) );
             return;
         }
 
-
         Dn dn = new Dn( directoryService.getSchemaManager(), ServerDNConstants.ADMIN_SYSTEM_DN
);
-        
+
         ensureLdifFileBase();
 
         // if ldif directory is a file try to load it
@@ -429,11 +431,11 @@ public class ApacheDS
                     return pathname.isFile() && pathname.canRead() && isLdif;
                 }
             } );
-    
+
             // LOG and bail if we could not find any LDIF files
             if ( ( ldifFiles == null ) || ( ldifFiles.length == 0 ) )
             {
-                LOG.warn( "LDIF load directory '{}' does not contain any LDIF files. No LDIF
files will be loaded.", 
+                LOG.warn( "LDIF load directory '{}' does not contain any LDIF files. No LDIF
files will be loaded.",
                     getCanonical( ldifDirectory ) );
                 return;
             }
@@ -441,18 +443,18 @@ public class ApacheDS
             // Sort ldifFiles in alphabetic order
             Arrays.sort( ldifFiles, new Comparator<File>()
             {
-                public int compare( File f1, File f2)
+                public int compare( File f1, File f2 )
                 {
-                    return f1.getName().compareTo( f2 .getName() );
+                    return f1.getName().compareTo( f2.getName() );
                 }
-            });
-            
+            } );
+
             // load all the ldif files and load each one that is loaded
             for ( File ldifFile : ldifFiles )
             {
                 try
                 {
-                    LOG.info(  "Loading LDIF file '{}'", ldifFile.getName() );
+                    LOG.info( "Loading LDIF file '{}'", ldifFile.getName() );
                     loadLdif( ldifFile );
                 }
                 catch ( Exception ne )
@@ -465,8 +467,8 @@ public class ApacheDS
             }
         }
     }
-    
-    
+
+
     /**
      * initialize the schema partition by loading the schema LDIF files
      * 
@@ -479,8 +481,8 @@ public class ApacheDS
 
         // Extract the schema on disk (a brand new one) and load the registries
         File schemaRepository = new File( workingDirectory, "schema" );
-        
-        if( schemaRepository.exists() )
+
+        if ( schemaRepository.exists() )
         {
             LOG.info( "schema partition already exists, skipping schema extraction" );
         }
@@ -504,14 +506,14 @@ public class ApacheDS
         // to initialize the Partitions, as we won't be able to parse 
         // and normalize their suffix Dn
         schemaManager.loadAllEnabled();
-        
+
         schemaPartition.setSchemaManager( schemaManager );
 
         List<Throwable> errors = schemaManager.getErrors();
 
         if ( errors.size() != 0 )
         {
-            throw new Exception( I18n.err( I18n.ERR_317, Exceptions.printErrors(errors) )
);
+            throw new Exception( I18n.err( I18n.ERR_317, Exceptions.printErrors( errors )
) );
         }
     }
 }

Modified: directory/apacheds/trunk/server-jndi/src/test/java/org/apache/directory/server/configuration/ApacheDSTest.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/server-jndi/src/test/java/org/apache/directory/server/configuration/ApacheDSTest.java?rev=1235328&r1=1235327&r2=1235328&view=diff
==============================================================================
--- directory/apacheds/trunk/server-jndi/src/test/java/org/apache/directory/server/configuration/ApacheDSTest.java
(original)
+++ directory/apacheds/trunk/server-jndi/src/test/java/org/apache/directory/server/configuration/ApacheDSTest.java
Tue Jan 24 16:22:33 2012
@@ -34,14 +34,13 @@ public class ApacheDSTest
 {
     private static final Logger LOG = LoggerFactory.getLogger( ApacheDSTest.class );
 
-   
+
     @Test
     public void testBogus()
     {
         System.out.println( "TODO: Fix this the real test case and delete me!" );
     }
 
-    
     /* 
     public void testLdifLoading() throws Exception
     {



Mime
View raw message