You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by bt...@apache.org on 2019/03/26 04:39:38 UTC
[james-project] 07/10: JAMES-2682 Prevent infinite loop with Sieve
error notifications
This is an automated email from the ASF dual-hosted git repository.
btellier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git
commit 3183f7f9be683e765ca34702156313943c3880df
Author: Pablo Pita <pa...@gmail.com>
AuthorDate: Sat Mar 16 15:10:47 2019 +0100
JAMES-2682 Prevent infinite loop with Sieve error notifications
---
.../transport/mailets/jsieve/delivery/SieveExecutor.java | 15 ++++++++++++++-
.../transport/mailets/delivery/SieveIntegrationTest.java | 10 ++++++++++
2 files changed, 24 insertions(+), 1 deletion(-)
diff --git a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/delivery/SieveExecutor.java b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/delivery/SieveExecutor.java
index bd50190..ebb78ce 100644
--- a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/delivery/SieveExecutor.java
+++ b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/delivery/SieveExecutor.java
@@ -21,6 +21,7 @@
package org.apache.james.transport.mailets.jsieve.delivery;
import java.io.IOException;
+import java.util.Optional;
import javax.mail.MessagingException;
@@ -36,6 +37,9 @@ import org.apache.jsieve.SieveFactory;
import org.apache.jsieve.exception.SieveException;
import org.apache.jsieve.parser.generated.ParseException;
import org.apache.jsieve.parser.generated.TokenMgrError;
+import org.apache.mailet.Attribute;
+import org.apache.mailet.AttributeName;
+import org.apache.mailet.AttributeValue;
import org.apache.mailet.Mail;
import org.apache.mailet.MailetContext;
import org.slf4j.Logger;
@@ -46,6 +50,7 @@ import com.google.common.collect.ImmutableList;
public class SieveExecutor {
private static final Logger LOGGER = LoggerFactory.getLogger(SieveExecutor.class);
+ public static final AttributeName SIEVE_NOTIFICATION = AttributeName.of("SieveNotification");
public static Builder builder() {
return new Builder();
@@ -114,7 +119,14 @@ public class SieveExecutor {
public boolean execute(MailAddress recipient, Mail mail) throws MessagingException {
Preconditions.checkNotNull(recipient, "Recipient for mail to be spooled cannot be null.");
Preconditions.checkNotNull(mail.getMessage(), "Mail message to be spooled cannot be null.");
-
+ Optional<Attribute> oSieveNotification = mail.getAttribute(SIEVE_NOTIFICATION);
+ if (oSieveNotification.isPresent()) {
+ AttributeValue<Boolean> attrValue = (AttributeValue<Boolean>) oSieveNotification.get().getValue();
+ if (attrValue.value()) {
+ throw new MessagingException("Do not process Sieve error notification emails");
+ }
+ }
+
return sieveMessage(recipient, mail);
}
@@ -150,6 +162,7 @@ public class SieveExecutor {
}
protected void handleFailure(MailAddress recipient, Mail aMail, Exception ex) throws MessagingException, IOException {
+ aMail.setAttribute(new Attribute(SIEVE_NOTIFICATION, AttributeValue.of(true)));
mailetContext.sendMail(recipient, ImmutableList.of(recipient), SieveFailureMessageComposer.composeMessage(aMail, ex, recipient.toString()));
}
}
diff --git a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/SieveIntegrationTest.java b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/SieveIntegrationTest.java
index 9c5ea36..a287734 100644
--- a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/SieveIntegrationTest.java
+++ b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/SieveIntegrationTest.java
@@ -36,6 +36,7 @@ import org.apache.james.mailbox.model.MailboxPath;
import org.apache.james.sieverepository.api.exception.ScriptNotFoundException;
import org.apache.james.transport.mailets.Sieve;
import org.apache.james.transport.mailets.jsieve.ResourceLocator;
+import org.apache.james.transport.mailets.jsieve.delivery.SieveExecutor;
import org.apache.james.user.api.UsersRepository;
import org.apache.james.util.MimeMessageUtil;
import org.apache.mailet.Attribute;
@@ -937,6 +938,15 @@ public class SieveIntegrationTest {
.build();
assertThat(fakeMailContext.getSentMails()).containsExactly(expectedSentMail);
}
+
+ @Test(expected = MessagingException.class)
+ public void sieveErrorNotificationEmailsShouldNotBeProcessed() throws Exception {
+ prepareTestUsingScript("org/apache/james/transport/mailets/delivery/keep.script");
+
+ FakeMail mail = createMail();
+ mail.setAttribute(new Attribute(SieveExecutor.SIEVE_NOTIFICATION, AttributeValue.of(true)));
+ testee.service(mail);
+ }
private void prepareTestUsingScript(final String script) throws Exception {
prepareTestUsingScriptAndDates(script, DATE_DEFAULT, DATE_DEFAULT);
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org