You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@james.apache.org by rc...@apache.org on 2024/01/19 03:42:04 UTC
(james-project) branch master updated (92b34b89da -> 47577d5cd0)
This is an automated email from the ASF dual-hosted git repository.
rcordier pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git
from 92b34b89da Fix for NoSuchElement in SPFHandler (#1931)
new 8efc69f0bd [RSpamD] AuditTrail for RspamdScanner
new b3d5e4e1d0 [RSpamD] Audit trail for ClamAV
new 47577d5cd0 [SpamAssassin] Audit trail for SpamAssassin
The 3 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
Summary of changes:
.../java/org/apache/james/clamav/ClamAVScan.java | 25 +++++++++++++
.../org/apache/james/rspamd/RspamdScanner.java | 42 ++++++++++++++++------
.../apache/james/spamassassin/SpamAssassin.java | 17 +++++++++
.../james/spamassassin/SpamAssassinResult.java | 4 +++
4 files changed, 77 insertions(+), 11 deletions(-)
---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@james.apache.org
For additional commands, e-mail: notifications-help@james.apache.org
(james-project) 02/03: [RSpamD] Audit trail for ClamAV
Posted by rc...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
rcordier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git
commit b3d5e4e1d09e0ce3f9ceef6e9abafb6325906da3
Author: Benoit TELLIER <bt...@linagora.com>
AuthorDate: Wed Jan 17 10:23:47 2024 +0100
[RSpamD] Audit trail for ClamAV
---
.../java/org/apache/james/clamav/ClamAVScan.java | 25 ++++++++++++++++++++++
1 file changed, 25 insertions(+)
diff --git a/third-party/clamav/src/main/java/org/apache/james/clamav/ClamAVScan.java b/third-party/clamav/src/main/java/org/apache/james/clamav/ClamAVScan.java
index 2d639e3ef2..998a7fdb45 100644
--- a/third-party/clamav/src/main/java/org/apache/james/clamav/ClamAVScan.java
+++ b/third-party/clamav/src/main/java/org/apache/james/clamav/ClamAVScan.java
@@ -36,12 +36,14 @@ import java.net.UnknownHostException;
import java.nio.ByteBuffer;
import java.nio.charset.StandardCharsets;
import java.util.HashSet;
+import java.util.Optional;
import java.util.Set;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import org.apache.james.server.core.MimeMessageInputStream;
+import org.apache.james.util.AuditTrail;
import org.apache.mailet.Attribute;
import org.apache.mailet.AttributeName;
import org.apache.mailet.AttributeValue;
@@ -51,6 +53,8 @@ import org.apache.mailet.base.RFC2822Headers;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import com.github.fge.lambdas.Throwing;
+import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
@@ -587,6 +591,17 @@ public class ClamAVScan extends GenericMailet {
try {
if (hasVirus(new MimeMessageInputStream(mimeMessage))) {
+ AuditTrail.entry()
+ .protocol("mailetcontainer")
+ .action("ClamAVScan")
+ .parameters(Throwing.supplier(() -> ImmutableMap.of("mailId", mail.getName(),
+ "mimeMessageId", Optional.ofNullable(mail.getMessage())
+ .map(Throwing.function(MimeMessage::getMessageID))
+ .orElse(""),
+ "sender", mail.getMaybeSender().asString(),
+ "infected", "true")))
+ .log("Mail scanned with ClamAV.");
+
LOGGER.info("Detected mail {} containing virus, adding infected header/attribute.", mail);
// mark the mail with a mail attribute to check later on by other matchers/mailets
@@ -595,6 +610,16 @@ public class ClamAVScan extends GenericMailet {
// mark the message with a header string
mimeMessage.setHeader(INFECTED_HEADER_NAME, "true");
} else {
+ AuditTrail.entry()
+ .protocol("mailetcontainer")
+ .action("ClamAVScan")
+ .parameters(Throwing.supplier(() -> ImmutableMap.of("mailId", mail.getName(),
+ "mimeMessageId", Optional.ofNullable(mail.getMessage())
+ .map(Throwing.function(MimeMessage::getMessageID))
+ .orElse(""),
+ "sender", mail.getMaybeSender().asString(),
+ "infected", "false")))
+ .log("Mail scanned with ClamAV.");
mail.setAttribute(makeInfectedAttribute(false));
// mark the message with a header string
mimeMessage.setHeader(INFECTED_HEADER_NAME, "false");
---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@james.apache.org
For additional commands, e-mail: notifications-help@james.apache.org
(james-project) 03/03: [SpamAssassin] Audit trail for SpamAssassin
Posted by rc...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
rcordier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git
commit 47577d5cd06e1b1a12b4b1cbc641cd74e7b51af1
Author: Benoit TELLIER <bt...@linagora.com>
AuthorDate: Wed Jan 17 10:32:53 2024 +0100
[SpamAssassin] Audit trail for SpamAssassin
---
.../org/apache/james/spamassassin/SpamAssassin.java | 17 +++++++++++++++++
.../apache/james/spamassassin/SpamAssassinResult.java | 4 ++++
2 files changed, 21 insertions(+)
diff --git a/third-party/spamassassin/src/main/java/org/apache/james/spamassassin/SpamAssassin.java b/third-party/spamassassin/src/main/java/org/apache/james/spamassassin/SpamAssassin.java
index 892edbe18b..2cebd59165 100644
--- a/third-party/spamassassin/src/main/java/org/apache/james/spamassassin/SpamAssassin.java
+++ b/third-party/spamassassin/src/main/java/org/apache/james/spamassassin/SpamAssassin.java
@@ -19,6 +19,8 @@
package org.apache.james.spamassassin;
+import java.util.Optional;
+
import javax.inject.Inject;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
@@ -27,6 +29,7 @@ import org.apache.james.core.MailAddress;
import org.apache.james.metrics.api.MetricFactory;
import org.apache.james.user.api.UsersRepository;
import org.apache.james.user.api.UsersRepositoryException;
+import org.apache.james.util.AuditTrail;
import org.apache.james.util.Host;
import org.apache.mailet.Attribute;
import org.apache.mailet.Mail;
@@ -34,6 +37,7 @@ import org.apache.mailet.PerRecipientHeaders;
import org.apache.mailet.base.GenericMailet;
import com.github.fge.lambdas.Throwing;
+import com.google.common.collect.ImmutableMap;
/**
@@ -86,6 +90,19 @@ public class SpamAssassin extends GenericMailet {
private void querySpamAssassin(Mail mail, MimeMessage message, SpamAssassinInvoker sa, MailAddress recipient) throws MessagingException, UsersRepositoryException {
SpamAssassinResult result = sa.scanMail(message, usersRepository.getUsername(recipient));
+ AuditTrail.entry()
+ .protocol("mailetcontainer")
+ .action("SpamAssassin")
+ .parameters(Throwing.supplier(() -> ImmutableMap.of("mailId", mail.getName(),
+ "mimeMessageId", Optional.ofNullable(mail.getMessage())
+ .map(Throwing.function(MimeMessage::getMessageID))
+ .orElse(""),
+ "sender", mail.getMaybeSender().asString(),
+ "recipient", recipient.asString(),
+ "spamAssassinHits", result.getHits(),
+ "status", result.getStatus().name())))
+ .log("Mail scanned with SpamAssassin.");
+
// Add headers per recipient to mail object
for (Attribute attribute : result.getHeadersAsAttributes()) {
mail.addSpecificHeaderForRecipient(PerRecipientHeaders.Header.builder()
diff --git a/third-party/spamassassin/src/main/java/org/apache/james/spamassassin/SpamAssassinResult.java b/third-party/spamassassin/src/main/java/org/apache/james/spamassassin/SpamAssassinResult.java
index e01464cad1..c9e351f08a 100644
--- a/third-party/spamassassin/src/main/java/org/apache/james/spamassassin/SpamAssassinResult.java
+++ b/third-party/spamassassin/src/main/java/org/apache/james/spamassassin/SpamAssassinResult.java
@@ -116,6 +116,10 @@ public class SpamAssassinResult {
return requiredHits;
}
+ public SpamStatus getStatus() {
+ return status;
+ }
+
public List<Attribute> getHeadersAsAttributes() {
return headersAsAttributes;
}
---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@james.apache.org
For additional commands, e-mail: notifications-help@james.apache.org
(james-project) 01/03: [RSpamD] AuditTrail for RspamdScanner
Posted by rc...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
rcordier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git
commit 8efc69f0bdf1b653bb39097e94ba1968f75c750d
Author: Benoit TELLIER <bt...@linagora.com>
AuthorDate: Wed Jan 17 10:16:46 2024 +0100
[RSpamD] AuditTrail for RspamdScanner
---
.../org/apache/james/rspamd/RspamdScanner.java | 42 ++++++++++++++++------
1 file changed, 31 insertions(+), 11 deletions(-)
diff --git a/third-party/rspamd/src/main/java/org/apache/james/rspamd/RspamdScanner.java b/third-party/rspamd/src/main/java/org/apache/james/rspamd/RspamdScanner.java
index 1724fabe73..76f18cd531 100644
--- a/third-party/rspamd/src/main/java/org/apache/james/rspamd/RspamdScanner.java
+++ b/third-party/rspamd/src/main/java/org/apache/james/rspamd/RspamdScanner.java
@@ -27,6 +27,7 @@ import java.util.stream.Stream;
import javax.inject.Inject;
import javax.mail.MessagingException;
+import javax.mail.internet.MimeMessage;
import org.apache.commons.lang3.tuple.Pair;
import org.apache.james.core.MailAddress;
@@ -34,6 +35,7 @@ import org.apache.james.lifecycle.api.LifecycleUtil;
import org.apache.james.rspamd.client.RspamdClientConfiguration;
import org.apache.james.rspamd.client.RspamdHttpClient;
import org.apache.james.rspamd.model.AnalysisResult;
+import org.apache.james.util.AuditTrail;
import org.apache.james.util.ReactorUtils;
import org.apache.mailet.Attribute;
import org.apache.mailet.AttributeName;
@@ -48,6 +50,7 @@ import org.slf4j.LoggerFactory;
import com.github.fge.lambdas.Throwing;
import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Sets;
@@ -92,18 +95,36 @@ public class RspamdScanner extends GenericMailet {
Flux.fromIterable(mail.getRecipients())
.flatMap(Throwing.function(rcpt -> rspamdHttpClient.checkV2(mail, RspamdHttpClient.Options.forMailAddress(rcpt))
.map(result -> Pair.of(rcpt, result))), ReactorUtils.DEFAULT_CONCURRENCY)
- .concatMap(rcptAndResult -> Mono.fromRunnable(Throwing.runnable(() -> {
- if (AnalysisResult.Action.REJECT == rcptAndResult.getValue().getAction()) {
- rejectSpamProcessor.ifPresent(processor -> processorPerUser(mail, rcptAndResult.getKey(), processor));
- }
+ .concatMap(rcptAndResult -> Mono.fromRunnable(() -> handleScanResult(mail, rcptAndResult))
+ .subscribeOn(ReactorUtils.BLOCKING_CALL_WRAPPER))
+ .blockLast();
+ }
- appendRspamdResultHeader(mail, rcptAndResult.getKey(), rcptAndResult.getRight());
+ private void handleScanResult(Mail mail, Pair<MailAddress, AnalysisResult> rcptAndResult) {
+ AuditTrail.entry()
+ .protocol("mailetcontainer")
+ .action("RspamdScanner")
+ .parameters(Throwing.supplier(() -> ImmutableMap.of("mailId", mail.getName(),
+ "mimeMessageId", Optional.ofNullable(mail.getMessage())
+ .map(Throwing.function(MimeMessage::getMessageID))
+ .orElse(""),
+ "sender", mail.getMaybeSender().asString(),
+ "recipient", rcptAndResult.getKey().asString(),
+ "rspamDAction", rcptAndResult.getValue().getAction().name(),
+ "rspamDRequiredScore", Float.toString(rcptAndResult.getValue().getRequiredScore()),
+ "rspamRewrittenSubject", rcptAndResult.getValue().getDesiredRewriteSubject().orElse(""),
+ "rspamDScore", Float.toString(rcptAndResult.getValue().getScore()))))
+ .log("Mail scanned with RSpamD.");
+
+ if (AnalysisResult.Action.REJECT == rcptAndResult.getValue().getAction()) {
+ rejectSpamProcessor.ifPresent(processor -> processorPerUser(mail, rcptAndResult.getKey(), processor));
+ }
- if (rcptAndResult.getRight().hasVirus()) {
- virusProcessor.ifPresent(processor -> processorPerUser(mail, rcptAndResult.getKey(), processor));
- }
- })).subscribeOn(ReactorUtils.BLOCKING_CALL_WRAPPER))
- .blockLast();
+ appendRspamdResultHeader(mail, rcptAndResult.getKey(), rcptAndResult.getRight());
+
+ if (rcptAndResult.getRight().hasVirus()) {
+ virusProcessor.ifPresent(processor -> processorPerUser(mail, rcptAndResult.getKey(), processor));
+ }
}
private void processorPerUser(Mail mail, MailAddress rcpt, String processor) {
@@ -128,7 +149,6 @@ public class RspamdScanner extends GenericMailet {
}
}
-
private void scanAll(Mail mail) throws MessagingException {
AnalysisResult rspamdResult = rspamdHttpClient.checkV2(mail).block();
Preconditions.checkNotNull(rspamdResult);
---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@james.apache.org
For additional commands, e-mail: notifications-help@james.apache.org