Author: bago Date: Thu Mar 31 15:12:10 2011 New Revision: 1087332 URL: http://svn.apache.org/viewvc?rev=1087332&view=rev Log: Added forceCRLF parameter (default to true) to DKIMSign and DKIMVerify mailets (JDKIM-28)
Modified: james/jdkim/trunk/mailets/src/main/java/org/apache/james/jdkim/mailets/DKIMSign.java james/jdkim/trunk/mailets/src/main/java/org/apache/james/jdkim/mailets/DKIMVerify.java james/jdkim/trunk/mailets/src/test/java/org/apache/james/jdkim/mailets/DKIMSignTest.java Modified: james/jdkim/trunk/mailets/src/main/java/org/apache/james/jdkim/mailets/DKIMSign.java URL: http://svn.apache.org/viewvc/james/jdkim/trunk/mailets/src/main/java/org/apache/james/jdkim/mailets/DKIMSign.java?rev=1087332&r1=1087331&r2=1087332&view=diff ============================================================================== --- james/jdkim/trunk/mailets/src/main/java/org/apache/james/jdkim/mailets/DKIMSign.java (original) +++ james/jdkim/trunk/mailets/src/main/java/org/apache/james/jdkim/mailets/DKIMSign.java Thu Mar 31 15:12:10 2011 @@ -21,6 +21,7 @@ package org.apache.james.jdkim.mailets; import java.io.ByteArrayInputStream; import java.io.IOException; +import java.io.OutputStream; import java.security.GeneralSecurityException; import java.security.NoSuchAlgorithmException; import java.security.PrivateKey; @@ -43,6 +44,8 @@ import org.apache.james.jdkim.exceptions import org.apache.mailet.Mail; import org.apache.mailet.base.GenericMailet; +import com.sun.mail.util.CRLFOutputStream; + /** * This mailet sign a message using the DKIM protocol * If the privateKey is encoded using a password then you can pass @@ -73,14 +76,15 @@ import org.apache.mailet.base.GenericMai * </mailet> * </code></pre> * - * @version CVS $Revision: 713949 $ $Date: 2008-11-14 08:40:21 +0100 (ven, 14 - * nov 2008) $ - * @since 2.2.0 + * By default the mailet assume that Javamail will convert LF to CRLF when sending + * so will compute the hash using converted newlines. If you don't want this + * behaviout then set forceCRLF attribute to false. */ public class DKIMSign extends GenericMailet { private String signatureTemplate; private PrivateKey privateKey; + private boolean forceCRLF; /** * @return the signatureTemplate @@ -100,6 +104,7 @@ public class DKIMSign extends GenericMai signatureTemplate = getInitParameter("signatureTemplate"); String privateKeyString = getInitParameter("privateKey"); String privateKeyPassword = getInitParameter("privateKeyPassword", null); + forceCRLF = getInitParameter("forceCRLF", true); try { PKCS8Key pkcs8 = new PKCS8Key(new ByteArrayInputStream( privateKeyString.getBytes()), @@ -129,8 +134,9 @@ public class DKIMSign extends GenericMai MimeMessage message = mail.getMessage(); Headers headers = new MimeMessageHeaders(message); try { - message.writeTo(new HeaderSkippingOutputStream(bhj - .getOutputStream())); + OutputStream os = new HeaderSkippingOutputStream(bhj.getOutputStream()); + if (forceCRLF) os = new CRLFOutputStream(os); + message.writeTo(os); bhj.getOutputStream().close(); } catch (IOException e) { throw new MessagingException("Exception calculating bodyhash: " Modified: james/jdkim/trunk/mailets/src/main/java/org/apache/james/jdkim/mailets/DKIMVerify.java URL: http://svn.apache.org/viewvc/james/jdkim/trunk/mailets/src/main/java/org/apache/james/jdkim/mailets/DKIMVerify.java?rev=1087332&r1=1087331&r2=1087332&view=diff ============================================================================== --- james/jdkim/trunk/mailets/src/main/java/org/apache/james/jdkim/mailets/DKIMVerify.java (original) +++ james/jdkim/trunk/mailets/src/main/java/org/apache/james/jdkim/mailets/DKIMVerify.java Thu Mar 31 15:12:10 2011 @@ -20,6 +20,7 @@ package org.apache.james.jdkim.mailets; import java.io.IOException; +import java.io.OutputStream; import java.util.List; import javax.mail.MessagingException; @@ -33,6 +34,8 @@ import org.apache.james.jdkim.exceptions import org.apache.mailet.Mail; import org.apache.mailet.base.GenericMailet; +import com.sun.mail.util.CRLFOutputStream; + /** * This mailet verify a message using the DKIM protocol * @@ -41,22 +44,28 @@ import org.apache.mailet.base.GenericMai * <mailet match="All" class="DKIMVerify"> * </mailet> * </code></pre> + * + * By default the mailet assume that Javamail will use LF instead of CRLF + * so it will verify the hash using converted newlines. If you don't want this + * behaviout then set forceCRLF attribute to false. */ public class DKIMVerify extends GenericMailet { public static final String DKIM_AUTH_RESULT_ATTRIBUTE = "jDKIM.AUTHRESULT"; protected DKIMVerifier verifier = null; + private boolean forceCRLF; @Override public void init() throws MessagingException { verifier = new DKIMVerifier(); + forceCRLF = getInitParameter("forceCRLF", true); } public void service(Mail mail) throws MessagingException { try { MimeMessage message = mail.getMessage(); - List<SignatureRecord> res = verify(verifier, message); + List<SignatureRecord> res = verify(verifier, message, forceCRLF); if (res == null || res.isEmpty()) { // neutral mail.setAttribute(DKIM_AUTH_RESULT_ATTRIBUTE, "neutral (no signatures)"); @@ -79,14 +88,16 @@ public class DKIMVerify extends GenericM } - protected static List<SignatureRecord> verify(DKIMVerifier verifier, MimeMessage message) + protected static List<SignatureRecord> verify(DKIMVerifier verifier, MimeMessage message, boolean forceCRLF) throws MessagingException, FailException { Headers headers = new MimeMessageHeaders(message); BodyHasher bh = verifier.newBodyHasher(headers); try { if (bh != null) { - message.writeTo(new HeaderSkippingOutputStream(bh - .getOutputStream())); + OutputStream os = new HeaderSkippingOutputStream(bh + .getOutputStream()); + if (forceCRLF) os = new CRLFOutputStream(os); + message.writeTo(os); bh.getOutputStream().close(); } Modified: james/jdkim/trunk/mailets/src/test/java/org/apache/james/jdkim/mailets/DKIMSignTest.java URL: http://svn.apache.org/viewvc/james/jdkim/trunk/mailets/src/test/java/org/apache/james/jdkim/mailets/DKIMSignTest.java?rev=1087332&r1=1087331&r2=1087332&view=diff ============================================================================== --- james/jdkim/trunk/mailets/src/test/java/org/apache/james/jdkim/mailets/DKIMSignTest.java (original) +++ james/jdkim/trunk/mailets/src/test/java/org/apache/james/jdkim/mailets/DKIMSignTest.java Thu Mar 31 15:12:10 2011 @@ -103,7 +103,7 @@ public class DKIMSignTest extends TestCa private List<SignatureRecord> verify(ByteArrayOutputStream rawMessage, MockPublicKeyRecordRetriever mockPublicKeyRecordRetriever) throws MessagingException, FailException { - List<SignatureRecord> signs = DKIMVerify.verify(new DKIMVerifier(mockPublicKeyRecordRetriever), new MimeMessage(Session.getDefaultInstance(new Properties()), new ByteArrayInputStream(rawMessage.toByteArray()))); + List<SignatureRecord> signs = DKIMVerify.verify(new DKIMVerifier(mockPublicKeyRecordRetriever), new MimeMessage(Session.getDefaultInstance(new Properties()), new ByteArrayInputStream(rawMessage.toByteArray())), true); assertNotNull(signs); assertEquals(1, signs.size()); return signs; --------------------------------------------------------------------- To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org