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 2018/07/31 02:32:25 UTC
[08/24] james-project git commit: JAMES-2501 Create a SpamAssassin
backend project
JAMES-2501 Create a SpamAssassin backend project
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/1fd63a7f
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/1fd63a7f
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/1fd63a7f
Branch: refs/heads/master
Commit: 1fd63a7fb42283549ff987ad5fd9deb6136400fe
Parents: a80003a
Author: benwa <bt...@linagora.com>
Authored: Thu Jul 26 11:31:53 2018 +0700
Committer: benwa <bt...@linagora.com>
Committed: Tue Jul 31 09:24:17 2018 +0700
----------------------------------------------------------------------
mailbox/plugin/spamassassin/pom.xml | 10 +
.../mailbox/spamassassin/SpamAssassin.java | 2 +-
mailbox/store/pom.xml | 4 +
pom.xml | 12 +
server/container/util/pom.xml | 23 -
.../james/util/scanner/SpamAssassinInvoker.java | 251 -----------
.../james/util/scanner/SpamAssassinResult.java | 109 -----
.../util/scanner/SpamAssassinExtension.java | 148 -------
.../util/scanner/SpamAssassinInvokerTest.java | 147 -------
.../util/scanner/SpamAssassinResultTest.java | 96 -----
.../util/scanner/SpamAssassinWaitStrategy.java | 67 ---
.../resources/docker/spamassassin/Dockerfile | 43 --
.../resources/docker/spamassassin/bayes_pg.sql | 119 ------
.../test/resources/docker/spamassassin/local.cf | 97 -----
.../docker/spamassassin/rule-update.sh | 7 -
.../test/resources/docker/spamassassin/run.sh | 9 -
.../test/resources/docker/spamassassin/spamd.sh | 15 -
.../util/src/test/resources/eml/spam.eml | 152 -------
.../src/test/resources/spamassassin_db/ham/ham1 | 113 -----
.../src/test/resources/spamassassin_db/ham/ham2 | 73 ----
.../src/test/resources/spamassassin_db/ham/ham3 | 82 ----
.../src/test/resources/spamassassin_db/ham/ham4 | 78 ----
.../src/test/resources/spamassassin_db/ham/ham5 | 77 ----
.../src/test/resources/spamassassin_db/ham/ham6 | 74 ----
.../src/test/resources/spamassassin_db/ham/ham7 | 88 ----
.../src/test/resources/spamassassin_db/ham/ham8 | 85 ----
.../src/test/resources/spamassassin_db/ham/ham9 | 176 --------
.../test/resources/spamassassin_db/spam/spam1 | 108 -----
.../test/resources/spamassassin_db/spam/spam2 | 186 --------
.../test/resources/spamassassin_db/spam/spam3 | 211 ---------
.../test/resources/spamassassin_db/spam/spam4 | 213 ----------
.../test/resources/spamassassin_db/spam/spam5 | 161 -------
.../test/resources/spamassassin_db/spam/spam6 | 423 -------------------
.../test/resources/spamassassin_db/spam/spam7 | 71 ----
.../test/resources/spamassassin_db/spam/spam8 | 321 --------------
.../test/resources/spamassassin_db/spam/spam9 | 142 -------
.../transport/mailets/SpamAssassinTest.java | 2 +-
server/mailet/mailets/pom.xml | 10 +
.../james/transport/mailets/SpamAssassin.java | 4 +-
.../transport/matchers/IsMarkedAsSpam.java | 2 +-
.../transport/mailets/SpamAssassinTest.java | 6 +-
.../cassandra-jmap-integration-testing/pom.xml | 6 +
.../jmap/cassandra/CassandraJmapExtension.java | 2 +-
.../jmap-integration-testing-common/pom.xml | 6 +
.../integration/JamesWithSpamAssassin.java | 2 +-
.../methods/integration/SpamAssassinModule.java | 4 +-
.../memory-jmap-integration-testing/pom.xml | 6 +
.../james/jmap/memory/MemoryJmapExtension.java | 2 +-
server/protocols/protocols-smtp/pom.xml | 10 +
.../fastfail/SpamAssassinHandler.java | 4 +-
.../smtpserver/SpamAssassinHandlerTest.java | 6 +-
.../java/org/apache/james/utils/MockSpamd.java | 101 -----
.../apache/james/utils/MockSpamdTestRule.java | 46 --
third-party/pom.xml | 40 ++
third-party/spamassassin/pom.xml | 93 ++++
.../james/spamassassin/SpamAssassinInvoker.java | 251 +++++++++++
.../james/spamassassin/SpamAssassinResult.java | 109 +++++
.../spamassassin/SpamAssassinExtension.java | 148 +++++++
.../spamassassin/SpamAssassinInvokerTest.java | 147 +++++++
.../spamassassin/SpamAssassinResultTest.java | 96 +++++
.../spamassassin/SpamAssassinWaitStrategy.java | 67 +++
.../james/spamassassin/mock/MockSpamd.java | 101 +++++
.../spamassassin/mock/MockSpamdTestRule.java | 46 ++
.../resources/docker/spamassassin/Dockerfile | 43 ++
.../resources/docker/spamassassin/bayes_pg.sql | 119 ++++++
.../test/resources/docker/spamassassin/local.cf | 97 +++++
.../docker/spamassassin/rule-update.sh | 7 +
.../test/resources/docker/spamassassin/run.sh | 9 +
.../test/resources/docker/spamassassin/spamd.sh | 15 +
.../src/test/resources/eml/spam.eml | 152 +++++++
.../src/test/resources/spamassassin_db/ham/ham1 | 113 +++++
.../src/test/resources/spamassassin_db/ham/ham2 | 73 ++++
.../src/test/resources/spamassassin_db/ham/ham3 | 82 ++++
.../src/test/resources/spamassassin_db/ham/ham4 | 78 ++++
.../src/test/resources/spamassassin_db/ham/ham5 | 77 ++++
.../src/test/resources/spamassassin_db/ham/ham6 | 74 ++++
.../src/test/resources/spamassassin_db/ham/ham7 | 88 ++++
.../src/test/resources/spamassassin_db/ham/ham8 | 85 ++++
.../src/test/resources/spamassassin_db/ham/ham9 | 176 ++++++++
.../test/resources/spamassassin_db/spam/spam1 | 108 +++++
.../test/resources/spamassassin_db/spam/spam2 | 186 ++++++++
.../test/resources/spamassassin_db/spam/spam3 | 211 +++++++++
.../test/resources/spamassassin_db/spam/spam4 | 213 ++++++++++
.../test/resources/spamassassin_db/spam/spam5 | 161 +++++++
.../test/resources/spamassassin_db/spam/spam6 | 423 +++++++++++++++++++
.../test/resources/spamassassin_db/spam/spam7 | 71 ++++
.../test/resources/spamassassin_db/spam/spam8 | 321 ++++++++++++++
.../test/resources/spamassassin_db/spam/spam9 | 142 +++++++
88 files changed, 4304 insertions(+), 4130 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/1fd63a7f/mailbox/plugin/spamassassin/pom.xml
----------------------------------------------------------------------
diff --git a/mailbox/plugin/spamassassin/pom.xml b/mailbox/plugin/spamassassin/pom.xml
index ec8f1c5..830e22d 100644
--- a/mailbox/plugin/spamassassin/pom.xml
+++ b/mailbox/plugin/spamassassin/pom.xml
@@ -52,6 +52,16 @@
<scope>test</scope>
</dependency>
<dependency>
+ <groupId>${james.groupId}</groupId>
+ <artifactId>apache-james-spamassassin</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>${james.groupId}</groupId>
+ <artifactId>apache-james-spamassassin</artifactId>
+ <type>test-jar</type>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
http://git-wip-us.apache.org/repos/asf/james-project/blob/1fd63a7f/mailbox/plugin/spamassassin/src/main/java/org/apache/james/mailbox/spamassassin/SpamAssassin.java
----------------------------------------------------------------------
diff --git a/mailbox/plugin/spamassassin/src/main/java/org/apache/james/mailbox/spamassassin/SpamAssassin.java b/mailbox/plugin/spamassassin/src/main/java/org/apache/james/mailbox/spamassassin/SpamAssassin.java
index a2c19f0..b86fe28 100644
--- a/mailbox/plugin/spamassassin/src/main/java/org/apache/james/mailbox/spamassassin/SpamAssassin.java
+++ b/mailbox/plugin/spamassassin/src/main/java/org/apache/james/mailbox/spamassassin/SpamAssassin.java
@@ -24,8 +24,8 @@ import java.util.List;
import javax.inject.Inject;
import org.apache.james.metrics.api.MetricFactory;
+import org.apache.james.spamassassin.SpamAssassinInvoker;
import org.apache.james.util.Host;
-import org.apache.james.util.scanner.SpamAssassinInvoker;
import com.github.fge.lambdas.Throwing;
http://git-wip-us.apache.org/repos/asf/james-project/blob/1fd63a7f/mailbox/store/pom.xml
----------------------------------------------------------------------
diff --git a/mailbox/store/pom.xml b/mailbox/store/pom.xml
index 00b476e..d4f4e48 100644
--- a/mailbox/store/pom.xml
+++ b/mailbox/store/pom.xml
@@ -72,6 +72,10 @@
<artifactId>james-server-util-java8</artifactId>
</dependency>
<dependency>
+ <groupId>${james.groupId}</groupId>
+ <artifactId>metrics-api</artifactId>
+ </dependency>
+ <dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
http://git-wip-us.apache.org/repos/asf/james-project/blob/1fd63a7f/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 7d32655..29763a8 100644
--- a/pom.xml
+++ b/pom.xml
@@ -536,6 +536,7 @@
<module>mpt</module>
<module>protocols</module>
<module>server</module>
+ <module>third-party</module>
</modules>
<scm>
@@ -704,6 +705,17 @@
</dependency>
<dependency>
<groupId>${james.groupId}</groupId>
+ <artifactId>apache-james-spamassassin</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>${james.groupId}</groupId>
+ <artifactId>apache-james-spamassassin</artifactId>
+ <version>${project.version}</version>
+ <type>test-jar</type>
+ </dependency>
+ <dependency>
+ <groupId>${james.groupId}</groupId>
<artifactId>apache-james-mailbox-api</artifactId>
<version>${project.version}</version>
</dependency>
http://git-wip-us.apache.org/repos/asf/james-project/blob/1fd63a7f/server/container/util/pom.xml
----------------------------------------------------------------------
diff --git a/server/container/util/pom.xml b/server/container/util/pom.xml
index 8f2a94e..fadfca7 100644
--- a/server/container/util/pom.xml
+++ b/server/container/util/pom.xml
@@ -34,28 +34,10 @@
<dependencies>
<dependency>
- <groupId>${james.groupId}</groupId>
- <artifactId>javax-mail-extension</artifactId>
- <type>test-jar</type>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>${james.groupId}</groupId>
- <artifactId>metrics-api</artifactId>
- </dependency>
- <dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
</dependency>
<dependency>
- <groupId>com.github.fge</groupId>
- <artifactId>throwing-lambdas</artifactId>
- </dependency>
- <dependency>
- <groupId>com.sun.mail</groupId>
- <artifactId>javax.mail</artifactId>
- </dependency>
- <dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
</dependency>
@@ -87,11 +69,6 @@
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</dependency>
- <dependency>
- <groupId>org.testcontainers</groupId>
- <artifactId>testcontainers</artifactId>
- <scope>test</scope>
- </dependency>
</dependencies>
<build>
http://git-wip-us.apache.org/repos/asf/james-project/blob/1fd63a7f/server/container/util/src/main/java/org/apache/james/util/scanner/SpamAssassinInvoker.java
----------------------------------------------------------------------
diff --git a/server/container/util/src/main/java/org/apache/james/util/scanner/SpamAssassinInvoker.java b/server/container/util/src/main/java/org/apache/james/util/scanner/SpamAssassinInvoker.java
deleted file mode 100644
index fe825aa..0000000
--- a/server/container/util/src/main/java/org/apache/james/util/scanner/SpamAssassinInvoker.java
+++ /dev/null
@@ -1,251 +0,0 @@
-/****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one *
- * or more contributor license agreements. See the NOTICE file *
- * distributed with this work for additional information *
- * regarding copyright ownership. The ASF licenses this file *
- * to you under the Apache License, Version 2.0 (the *
- * "License"); you may not use this file except in compliance *
- * with the License. You may obtain a copy of the License at *
- * *
- * http://www.apache.org/licenses/LICENSE-2.0 *
- * *
- * Unless required by applicable law or agreed to in writing, *
- * software distributed under the License is distributed on an *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
- * KIND, either express or implied. See the License for the *
- * specific language governing permissions and limitations *
- * under the License. *
- ****************************************************************/
-
-package org.apache.james.util.scanner;
-
-import java.io.BufferedOutputStream;
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.OutputStream;
-import java.io.PrintWriter;
-import java.net.Socket;
-import java.net.UnknownHostException;
-import java.util.Arrays;
-import java.util.List;
-
-import javax.mail.MessagingException;
-import javax.mail.internet.MimeMessage;
-
-import org.apache.commons.io.IOUtils;
-import org.apache.james.metrics.api.MetricFactory;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import com.github.fge.lambdas.Throwing;
-import com.google.common.base.Splitter;
-import com.google.common.collect.Lists;
-
-/**
- * Sends the message through daemonized SpamAssassin (spamd), visit <a
- * href="SpamAssassin.org">SpamAssassin.org</a> for info on configuration.
- */
-public class SpamAssassinInvoker {
- private static final Logger LOGGER = LoggerFactory.getLogger(SpamAssassinInvoker.class);
-
- enum MessageClass {
- HAM("ham"),
- SPAM("spam");
-
- private final String value;
-
- MessageClass(String value) {
- this.value = value;
- }
- }
-
- private static final int SPAM_INDEX = 1;
- private static final int HITS_INDEX = 3;
- private static final int REQUIRED_HITS_INDEX = 5;
- private static final String CRLF = "\r\n";
-
- private final MetricFactory metricFactory;
- private final String spamdHost;
- private final int spamdPort;
-
- /**
- * Init the spamassassin invoker
- *
- * @param spamdHost
- * The host on which spamd runs
- * @param spamdPort
- */
- public SpamAssassinInvoker(MetricFactory metricFactory, String spamdHost, int spamdPort) {
- this.metricFactory = metricFactory;
- this.spamdHost = spamdHost;
- this.spamdPort = spamdPort;
- }
-
- /**
- * Scan a MimeMessage for spam by passing it to spamd.
- *
- * @param message
- * The MimeMessage to scan
- * @return true if spam otherwise false
- * @throws MessagingException
- * if an error on scanning is detected
- */
- public SpamAssassinResult scanMail(MimeMessage message, String user) throws MessagingException {
- return metricFactory.withMetric(
- "spamAssassin-check",
- Throwing.supplier(
- () -> scanMailWithAdditionalHeaders(message,
- "User: " + user))
- .sneakyThrow());
- }
-
- public SpamAssassinResult scanMail(MimeMessage message) throws MessagingException {
- return metricFactory.withMetric(
- "spamAssassin-check",
- Throwing.supplier(
- () -> scanMailWithoutAdditionalHeaders(message))
- .sneakyThrow());
- }
-
- public SpamAssassinResult scanMailWithAdditionalHeaders(MimeMessage message, String... additionalHeaders) throws MessagingException {
- try (Socket socket = new Socket(spamdHost, spamdPort);
- OutputStream out = socket.getOutputStream();
- BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(out);
- PrintWriter writer = new PrintWriter(bufferedOutputStream);
- BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()))) {
-
- writer.write("CHECK SPAMC/1.2");
- writer.write(CRLF);
-
- Arrays.stream(additionalHeaders)
- .forEach(header -> {
- writer.write(header);
- writer.write(CRLF);
- });
-
- writer.write(CRLF);
- writer.flush();
-
- // pass the message to spamd
- message.writeTo(out);
- out.flush();
- socket.shutdownOutput();
-
- return in.lines()
- .filter(this::isSpam)
- .map(this::processSpam)
- .findFirst()
- .orElse(SpamAssassinResult.empty());
- } catch (UnknownHostException e) {
- throw new MessagingException("Error communicating with spamd. Unknown host: " + spamdHost);
- } catch (IOException | MessagingException e) {
- throw new MessagingException("Error communicating with spamd on " + spamdHost + ":" + spamdPort, e);
- }
- }
-
- public SpamAssassinResult scanMailWithoutAdditionalHeaders(MimeMessage message) throws MessagingException {
- return scanMailWithAdditionalHeaders(message);
- }
-
- private SpamAssassinResult processSpam(String line) {
- List<String> elements = Lists.newArrayList(Splitter.on(' ').split(line));
-
- return builderFrom(elements)
- .hits(elements.get(HITS_INDEX))
- .requiredHits(elements.get(REQUIRED_HITS_INDEX))
- .build();
- }
-
- private SpamAssassinResult.Builder builderFrom(List<String> elements) {
- if (spam(elements.get(SPAM_INDEX))) {
- return SpamAssassinResult.asSpam();
- } else {
- return SpamAssassinResult.asHam();
- }
- }
-
- private boolean spam(String string) {
- try {
- return Boolean.valueOf(string);
- } catch (Exception e) {
- LOGGER.warn("Fail parsing spamassassin answer: " + string);
- return false;
- }
- }
-
- private boolean isSpam(String line) {
- return line.startsWith("Spam:");
- }
-
- /**
- * Tell spamd that the given MimeMessage is a spam.
- *
- * @param message
- * The MimeMessage to tell
- * @throws MessagingException
- * if an error occured during learning.
- */
- public boolean learnAsSpam(InputStream message, String user) throws MessagingException {
- return metricFactory.withMetric(
- "spamAssassin-spam-report",
- Throwing.supplier(
- () -> reportMessageAs(message, user, MessageClass.SPAM))
- .sneakyThrow());
- }
-
- /**
- * Tell spamd that the given MimeMessage is a ham.
- *
- * @param message
- * The MimeMessage to tell
- * @throws MessagingException
- * if an error occured during learning.
- */
- public boolean learnAsHam(InputStream message, String user) throws MessagingException {
- return metricFactory.withMetric(
- "spamAssassin-ham-report",
- Throwing.supplier(
- () -> reportMessageAs(message, user, MessageClass.HAM))
- .sneakyThrow());
- }
-
- private boolean reportMessageAs(InputStream message, String user, MessageClass messageClass) throws MessagingException {
- try (Socket socket = new Socket(spamdHost, spamdPort);
- OutputStream out = socket.getOutputStream();
- BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(out);
- PrintWriter writer = new PrintWriter(bufferedOutputStream);
- BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()))) {
-
- byte[] byteArray = IOUtils.toByteArray(message);
- writer.write("TELL SPAMC/1.2");
- writer.write(CRLF);
- writer.write("Content-length: " + byteArray.length);
- writer.write(CRLF);
- writer.write("Message-class: " + messageClass.value);
- writer.write(CRLF);
- writer.write("Set: local, remote");
- writer.write(CRLF);
- writer.write("User: " + user);
- writer.write(CRLF);
- writer.write(CRLF);
- writer.flush();
-
- out.write(byteArray);
- out.flush();
- socket.shutdownOutput();
-
- return in.lines()
- .anyMatch(this::hasBeenSet);
- } catch (UnknownHostException e) {
- throw new MessagingException("Error communicating with spamd. Unknown host: " + spamdHost);
- } catch (IOException e) {
- throw new MessagingException("Error communicating with spamd on " + spamdHost + ":" + spamdPort, e);
- }
- }
-
- private boolean hasBeenSet(String line) {
- return line.startsWith("DidSet: ");
- }
-}
http://git-wip-us.apache.org/repos/asf/james-project/blob/1fd63a7f/server/container/util/src/main/java/org/apache/james/util/scanner/SpamAssassinResult.java
----------------------------------------------------------------------
diff --git a/server/container/util/src/main/java/org/apache/james/util/scanner/SpamAssassinResult.java b/server/container/util/src/main/java/org/apache/james/util/scanner/SpamAssassinResult.java
deleted file mode 100644
index a48967f..0000000
--- a/server/container/util/src/main/java/org/apache/james/util/scanner/SpamAssassinResult.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one *
- * or more contributor license agreements. See the NOTICE file *
- * distributed with this work for additional information *
- * regarding copyright ownership. The ASF licenses this file *
- * to you under the Apache License, Version 2.0 (the *
- * "License"); you may not use this file except in compliance *
- * with the License. You may obtain a copy of the License at *
- * *
- * http://www.apache.org/licenses/LICENSE-2.0 *
- * *
- * Unless required by applicable law or agreed to in writing, *
- * software distributed under the License is distributed on an *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
- * KIND, either express or implied. See the License for the *
- * specific language governing permissions and limitations *
- * under the License. *
- ****************************************************************/
-package org.apache.james.util.scanner;
-
-import java.util.Map;
-
-import com.google.common.base.Preconditions;
-import com.google.common.collect.ImmutableMap;
-
-public class SpamAssassinResult {
- /** The mail attribute under which the status get stored */
- public static final String STATUS_MAIL_ATTRIBUTE_NAME = "org.apache.james.spamassassin.status";
-
- /** The mail attribute under which the flag get stored */
- public static final String FLAG_MAIL_ATTRIBUTE_NAME = "org.apache.james.spamassassin.flag";
-
- public static final String NO_RESULT = "?";
-
- public static SpamAssassinResult empty() {
- return asHam()
- .hits(NO_RESULT)
- .requiredHits(NO_RESULT)
- .build();
- }
-
- public static Builder asSpam() {
- return new Builder(true);
- }
-
- public static Builder asHam() {
- return new Builder(false);
- }
-
- public static class Builder {
-
- private String hits;
- private String requiredHits;
- private final boolean isSpam;
-
- private Builder(boolean isSpam) {
- this.isSpam = isSpam;
- }
-
- public Builder hits(String hits) {
- this.hits = hits;
- return this;
- }
-
- public Builder requiredHits(String requiredHits) {
- this.requiredHits = requiredHits;
- return this;
- }
-
- public SpamAssassinResult build() {
- Preconditions.checkNotNull(hits);
- Preconditions.checkNotNull(requiredHits);
-
- ImmutableMap.Builder<String, String> headersAsAttribute = ImmutableMap.builder();
- if (isSpam) {
- headersAsAttribute.put(FLAG_MAIL_ATTRIBUTE_NAME, "YES");
- headersAsAttribute.put(STATUS_MAIL_ATTRIBUTE_NAME, "Yes, hits=" + hits + " required=" + requiredHits);
- } else {
- headersAsAttribute.put(FLAG_MAIL_ATTRIBUTE_NAME, "NO");
- headersAsAttribute.put(STATUS_MAIL_ATTRIBUTE_NAME, "No, hits=" + hits + " required=" + requiredHits);
- }
-
- return new SpamAssassinResult(hits, requiredHits, headersAsAttribute.build());
- }
- }
-
- private final String hits;
- private final String requiredHits;
- private final Map<String, String> headersAsAttribute;
-
- private SpamAssassinResult(String hits, String requiredHits, Map<String, String> headersAsAttribute) {
- this.hits = hits;
- this.requiredHits = requiredHits;
- this.headersAsAttribute = headersAsAttribute;
- }
-
- public String getHits() {
- return hits;
- }
-
- public String getRequiredHits() {
- return requiredHits;
- }
-
- public Map<String, String> getHeadersAsAttribute() {
- return headersAsAttribute;
- }
-
-}
http://git-wip-us.apache.org/repos/asf/james-project/blob/1fd63a7f/server/container/util/src/test/java/org/apache/james/util/scanner/SpamAssassinExtension.java
----------------------------------------------------------------------
diff --git a/server/container/util/src/test/java/org/apache/james/util/scanner/SpamAssassinExtension.java b/server/container/util/src/test/java/org/apache/james/util/scanner/SpamAssassinExtension.java
deleted file mode 100644
index 46100bc..0000000
--- a/server/container/util/src/test/java/org/apache/james/util/scanner/SpamAssassinExtension.java
+++ /dev/null
@@ -1,148 +0,0 @@
-/****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one *
- * or more contributor license agreements. See the NOTICE file *
- * distributed with this work for additional information *
- * regarding copyright ownership. The ASF licenses this file *
- * to you under the Apache License, Version 2.0 (the *
- * "License"); you may not use this file except in compliance *
- * with the License. You may obtain a copy of the License at *
- * *
- * http://www.apache.org/licenses/LICENSE-2.0 *
- * *
- * Unless required by applicable law or agreed to in writing, *
- * software distributed under the License is distributed on an *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
- * KIND, either express or implied. See the License for the *
- * specific language governing permissions and limitations *
- * under the License. *
- ****************************************************************/
-
-package org.apache.james.util.scanner;
-
-import java.io.IOException;
-import java.net.URISyntaxException;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.nio.file.Paths;
-import java.util.Locale;
-import java.util.stream.Stream;
-
-import org.junit.jupiter.api.extension.AfterEachCallback;
-import org.junit.jupiter.api.extension.BeforeEachCallback;
-import org.junit.jupiter.api.extension.ExtensionContext;
-import org.junit.jupiter.api.extension.ParameterContext;
-import org.junit.jupiter.api.extension.ParameterResolutionException;
-import org.junit.jupiter.api.extension.ParameterResolver;
-import org.testcontainers.containers.GenericContainer;
-import org.testcontainers.images.builder.ImageFromDockerfile;
-
-import com.github.fge.lambdas.Throwing;
-
-public class SpamAssassinExtension implements BeforeEachCallback, AfterEachCallback, ParameterResolver {
-
- private final GenericContainer<?> spamAssassinContainer;
- private SpamAssassin spamAssassin;
-
- public SpamAssassinExtension() {
- spamAssassinContainer = new GenericContainer<>(
- new ImageFromDockerfile()
- .withFileFromClasspath("Dockerfile", "docker/spamassassin/Dockerfile")
- .withFileFromClasspath("local.cf", "docker/spamassassin/local.cf")
- .withFileFromClasspath("run.sh", "docker/spamassassin/run.sh")
- .withFileFromClasspath("spamd.sh", "docker/spamassassin/spamd.sh")
- .withFileFromClasspath("rule-update.sh", "docker/spamassassin/rule-update.sh")
- .withFileFromClasspath("bayes_pg.sql", "docker/spamassassin/bayes_pg.sql"));
- spamAssassinContainer.waitingFor(new SpamAssassinWaitStrategy(spamAssassinContainer));
- }
-
- @Override
- public void beforeEach(ExtensionContext context) {
- spamAssassinContainer.start();
- spamAssassin = new SpamAssassin(spamAssassinContainer);
- }
-
- @Override
- public void afterEach(ExtensionContext context) {
- spamAssassinContainer.close();
- }
-
- @Override
- public boolean supportsParameter(ParameterContext parameterContext, ExtensionContext extensionContext) throws ParameterResolutionException {
- return (parameterContext.getParameter().getType() == SpamAssassin.class);
- }
-
- @Override
- public Object resolveParameter(ParameterContext parameterContext, ExtensionContext extensionContext) throws ParameterResolutionException {
- return spamAssassin;
- }
-
- public SpamAssassin getSpamAssassin() {
- return spamAssassin;
- }
-
- public static class SpamAssassin {
-
- private static final int SPAMASSASSIN_PORT = 783;
-
- private final String ip;
- private final int bindingPort;
- private final GenericContainer<?> spamAssassinContainer;
-
- private SpamAssassin(GenericContainer<?> spamAssassinContainer) {
- this.spamAssassinContainer = spamAssassinContainer;
- this.ip = spamAssassinContainer.getContainerIpAddress();
- this.bindingPort = spamAssassinContainer.getMappedPort(SPAMASSASSIN_PORT);
- }
-
- public String getIp() {
- return ip;
- }
-
- public int getBindingPort() {
- return bindingPort;
- }
-
- public void train(String user) throws IOException, URISyntaxException {
- train(user, Paths.get(ClassLoader.getSystemResource("spamassassin_db/spam").toURI()), TrainingKind.SPAM);
- train(user, Paths.get(ClassLoader.getSystemResource("spamassassin_db/ham").toURI()), TrainingKind.HAM);
- }
-
- private void train(String user, Path folder, TrainingKind trainingKind) throws IOException {
- spamAssassinContainer.getDockerClient().copyArchiveToContainerCmd(spamAssassinContainer.getContainerId())
- .withHostResource(folder.toAbsolutePath().toString())
- .withRemotePath("/root")
- .exec();
- try (Stream<Path> paths = Files.walk(folder)) {
- paths
- .filter(Files::isRegularFile)
- .map(Path::toFile)
- .forEach(Throwing.consumer(file -> spamAssassinContainer.execInContainer("sa-learn",
- trainingKind.saLearnExtensionName(), "-u", user,
- "/root/" + trainingKind.name().toLowerCase(Locale.US) + "/" + file.getName())));
- }
- }
-
- private enum TrainingKind {
- SPAM("--spam"), HAM("--ham");
-
- private String saLearnExtensionName;
-
- TrainingKind(String saLearnExtensionName) {
- this.saLearnExtensionName = saLearnExtensionName;
- }
-
- public String saLearnExtensionName() {
- return saLearnExtensionName;
- }
- }
-
- public void sync(String user) throws UnsupportedOperationException, IOException, InterruptedException {
- spamAssassinContainer.execInContainer("sa-learn", "--sync", "-u", user);
- }
-
- public void dump(String user) throws UnsupportedOperationException, IOException, InterruptedException {
- spamAssassinContainer.execInContainer("sa-learn", "--dump", "magic", "-u", user);
- }
- }
-
-}
http://git-wip-us.apache.org/repos/asf/james-project/blob/1fd63a7f/server/container/util/src/test/java/org/apache/james/util/scanner/SpamAssassinInvokerTest.java
----------------------------------------------------------------------
diff --git a/server/container/util/src/test/java/org/apache/james/util/scanner/SpamAssassinInvokerTest.java b/server/container/util/src/test/java/org/apache/james/util/scanner/SpamAssassinInvokerTest.java
deleted file mode 100644
index 4901ba4..0000000
--- a/server/container/util/src/test/java/org/apache/james/util/scanner/SpamAssassinInvokerTest.java
+++ /dev/null
@@ -1,147 +0,0 @@
-/****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one *
- * or more contributor license agreements. See the NOTICE file *
- * distributed with this work for additional information *
- * regarding copyright ownership. The ASF licenses this file *
- * to you under the Apache License, Version 2.0 (the *
- * "License"); you may not use this file except in compliance *
- * with the License. You may obtain a copy of the License at *
- * *
- * http://www.apache.org/licenses/LICENSE-2.0 *
- * *
- * Unless required by applicable law or agreed to in writing, *
- * software distributed under the License is distributed on an *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
- * KIND, either express or implied. See the License for the *
- * specific language governing permissions and limitations *
- * under the License. *
- ****************************************************************/
-package org.apache.james.util.scanner;
-
-import static org.assertj.core.api.Assertions.assertThat;
-
-import java.io.ByteArrayInputStream;
-import java.nio.charset.StandardCharsets;
-
-import javax.mail.internet.MimeMessage;
-
-import org.apache.james.metrics.api.NoopMetricFactory;
-import org.apache.james.util.MimeMessageUtil;
-import org.apache.james.util.scanner.SpamAssassinExtension.SpamAssassin;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.extension.ExtendWith;
-
-@ExtendWith(SpamAssassinExtension.class)
-public class SpamAssassinInvokerTest {
-
- public static final String USER = "any@james";
- private SpamAssassin spamAssassin;
- private SpamAssassinInvoker testee;
-
- @BeforeEach
- public void setup(SpamAssassin spamAssassin) throws Exception {
- this.spamAssassin = spamAssassin;
- testee = new SpamAssassinInvoker(new NoopMetricFactory(), spamAssassin.getIp(), spamAssassin.getBindingPort());
- }
-
- @Test
- public void scanMailShouldModifyHitsField() throws Exception {
- MimeMessage mimeMessage = MimeMessageUtil.mimeMessageFromStream(
- ClassLoader.getSystemResourceAsStream("eml/spam.eml"));
- SpamAssassinResult result = testee.scanMail(mimeMessage, USER);
-
- assertThat(result.getHits()).isNotEqualTo(SpamAssassinResult.NO_RESULT);
- }
-
- @Test
- public void scanMailShouldModifyRequiredHitsField() throws Exception {
- MimeMessage mimeMessage = MimeMessageUtil.mimeMessageFromStream(
- ClassLoader.getSystemResourceAsStream("eml/spam.eml"));
- SpamAssassinResult result = testee.scanMail(mimeMessage, USER);
-
- assertThat(result.getRequiredHits()).isEqualTo("5.0");
- }
-
- @Test
- public void scanMailShouldModifyHeadersField() throws Exception {
- MimeMessage mimeMessage = MimeMessageUtil.mimeMessageFromStream(
- ClassLoader.getSystemResourceAsStream("eml/spam.eml"));
- SpamAssassinResult result = testee.scanMail(mimeMessage, USER);
-
- assertThat(result.getHeadersAsAttribute()).isNotEmpty();
- }
-
- @Test
- public void scanMailShouldMarkAsSpamWhenKnownAsSpam() throws Exception {
- spamAssassin.train("user");
-
- MimeMessage mimeMessage = MimeMessageUtil.mimeMessageFromStream(
- ClassLoader.getSystemResourceAsStream("spamassassin_db/spam/spam1"));
-
- SpamAssassinResult result = testee.scanMail(mimeMessage, USER);
-
- assertThat(result.getHeadersAsAttribute().get(SpamAssassinResult.FLAG_MAIL_ATTRIBUTE_NAME)).isEqualTo("YES");
- }
-
- @Test
- public void learnAsSpamShouldReturnTrueWhenLearningWorks() throws Exception {
- MimeMessage mimeMessage = MimeMessageUtil.mimeMessageFromStream(
- ClassLoader.getSystemResourceAsStream("spamassassin_db/spam/spam2"));
-
- boolean result = testee.learnAsSpam(mimeMessage.getInputStream(), USER);
-
- assertThat(result).isTrue();
- }
-
- @Test
- public void scanMailShouldMarkAsSpamWhenMessageAlreadyLearnedAsSpam() throws Exception {
- MimeMessage mimeMessage = MimeMessageUtil.mimeMessageFromStream(
- ClassLoader.getSystemResourceAsStream("spamassassin_db/spam/spam1"));
-
- byte[] messageAsBytes = MimeMessageUtil.asString(mimeMessage).getBytes(StandardCharsets.UTF_8);
-
- testee.learnAsSpam(new ByteArrayInputStream(messageAsBytes), USER);
-
- SpamAssassinResult result = testee.scanMail(mimeMessage, USER);
-
- assertThat(result.getHeadersAsAttribute().get(SpamAssassinResult.FLAG_MAIL_ATTRIBUTE_NAME)).isEqualTo("YES");
- }
-
- @Test
- public void learnAsHamShouldReturnTrueWhenLearningWorks() throws Exception {
- MimeMessage mimeMessage = MimeMessageUtil.mimeMessageFromStream(
- ClassLoader.getSystemResourceAsStream("spamassassin_db/ham/ham2"));
-
- boolean result = testee.learnAsHam(mimeMessage.getInputStream(), USER);
-
- assertThat(result).isTrue();
- }
-
- @Test
- public void scanMailShouldMarkAsHamWhenMessageAlreadyLearnedAsHam() throws Exception {
- MimeMessage mimeMessage = MimeMessageUtil.mimeMessageFromStream(
- ClassLoader.getSystemResourceAsStream("spamassassin_db/ham/ham1"));
-
- testee.learnAsHam(mimeMessage.getInputStream(), USER);
-
- SpamAssassinResult result = testee.scanMail(mimeMessage, USER);
-
- assertThat(result.getHeadersAsAttribute().get(SpamAssassinResult.FLAG_MAIL_ATTRIBUTE_NAME)).isEqualTo("NO");
- }
-
- @Test
- public void learnAsHamShouldAllowToForgetSpam() throws Exception {
- MimeMessage mimeMessage = MimeMessageUtil.mimeMessageFromStream(
- ClassLoader.getSystemResourceAsStream("eml/spam.eml"));
-
- byte[] messageAsBytes = MimeMessageUtil.asString(mimeMessage).getBytes(StandardCharsets.UTF_8);
-
- testee.learnAsSpam(new ByteArrayInputStream(messageAsBytes), USER);
- testee.learnAsHam(new ByteArrayInputStream(messageAsBytes), USER);
-
- SpamAssassinResult result = testee.scanMail(mimeMessage, USER);
-
- assertThat(result.getHeadersAsAttribute().get(SpamAssassinResult.FLAG_MAIL_ATTRIBUTE_NAME)).isEqualTo("NO");
- }
-}
http://git-wip-us.apache.org/repos/asf/james-project/blob/1fd63a7f/server/container/util/src/test/java/org/apache/james/util/scanner/SpamAssassinResultTest.java
----------------------------------------------------------------------
diff --git a/server/container/util/src/test/java/org/apache/james/util/scanner/SpamAssassinResultTest.java b/server/container/util/src/test/java/org/apache/james/util/scanner/SpamAssassinResultTest.java
deleted file mode 100644
index 0b67589..0000000
--- a/server/container/util/src/test/java/org/apache/james/util/scanner/SpamAssassinResultTest.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one *
- * or more contributor license agreements. See the NOTICE file *
- * distributed with this work for additional information *
- * regarding copyright ownership. The ASF licenses this file *
- * to you under the Apache License, Version 2.0 (the *
- * "License"); you may not use this file except in compliance *
- * with the License. You may obtain a copy of the License at *
- * *
- * http://www.apache.org/licenses/LICENSE-2.0 *
- * *
- * Unless required by applicable law or agreed to in writing, *
- * software distributed under the License is distributed on an *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
- * KIND, either express or implied. See the License for the *
- * specific language governing permissions and limitations *
- * under the License. *
- ****************************************************************/
-package org.apache.james.util.scanner;
-
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.assertj.core.api.Assertions.assertThatThrownBy;
-
-import org.assertj.core.api.JUnitSoftAssertions;
-import org.junit.Rule;
-import org.junit.Test;
-
-import com.google.common.collect.ImmutableMap;
-
-public class SpamAssassinResultTest {
-
- @Rule
- public JUnitSoftAssertions softly = new JUnitSoftAssertions();
-
- @Test
- public void buildShouldThrowWhenHitsIsNotGiven() {
- assertThatThrownBy(() -> SpamAssassinResult.asSpam()
- .requiredHits("4.0")
- .build())
- .isInstanceOf(NullPointerException.class);
- }
-
- @Test
- public void buildShouldThrowWhenRequiredHitsIsNotGiven() {
- assertThatThrownBy(() -> SpamAssassinResult.asSpam()
- .hits("4.0")
- .build())
- .isInstanceOf(NullPointerException.class);
- }
-
- @Test
- public void buildShouldWork() {
- String hits = "1.1";
- String requiredHits = "5.0";
-
- SpamAssassinResult spamAssassinResult = SpamAssassinResult.asSpam()
- .hits(hits)
- .requiredHits(requiredHits)
- .build();
-
- softly.assertThat(spamAssassinResult.getHits()).isEqualTo(hits);
- softly.assertThat(spamAssassinResult.getRequiredHits()).isEqualTo(requiredHits);
- softly.assertThat(spamAssassinResult.getHeadersAsAttribute())
- .containsAllEntriesOf(ImmutableMap.of(
- SpamAssassinResult.FLAG_MAIL_ATTRIBUTE_NAME, "YES",
- SpamAssassinResult.STATUS_MAIL_ATTRIBUTE_NAME, "Yes, hits=1.1 required=5.0"));
- }
-
- @Test
- public void headersAsAttributeShouldContainSpamHeaderWithYESValueWhenBuiltAsSpam() {
- String hits = "1.1";
- String requiredHits = "5.0";
-
- SpamAssassinResult spamAssassinResult = SpamAssassinResult.asSpam()
- .hits(hits)
- .requiredHits(requiredHits)
- .build();
-
- assertThat(spamAssassinResult.getHeadersAsAttribute())
- .containsEntry(SpamAssassinResult.FLAG_MAIL_ATTRIBUTE_NAME, "YES");
- }
-
- @Test
- public void headersAsAttributeShouldContainSpamHeaderWithNOValueWhenBuiltAsHam() {
- String hits = "1.1";
- String requiredHits = "5.0";
-
- SpamAssassinResult spamAssassinResult = SpamAssassinResult.asHam()
- .hits(hits)
- .requiredHits(requiredHits)
- .build();
-
- assertThat(spamAssassinResult.getHeadersAsAttribute())
- .containsEntry(SpamAssassinResult.FLAG_MAIL_ATTRIBUTE_NAME, "NO");
- }
-}
http://git-wip-us.apache.org/repos/asf/james-project/blob/1fd63a7f/server/container/util/src/test/java/org/apache/james/util/scanner/SpamAssassinWaitStrategy.java
----------------------------------------------------------------------
diff --git a/server/container/util/src/test/java/org/apache/james/util/scanner/SpamAssassinWaitStrategy.java b/server/container/util/src/test/java/org/apache/james/util/scanner/SpamAssassinWaitStrategy.java
deleted file mode 100644
index 1341256..0000000
--- a/server/container/util/src/test/java/org/apache/james/util/scanner/SpamAssassinWaitStrategy.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one *
- * or more contributor license agreements. See the NOTICE file *
- * distributed with this work for additional information *
- * regarding copyright ownership. The ASF licenses this file *
- * to you under the Apache License, Version 2.0 (the *
- * "License"); you may not use this file except in compliance *
- * with the License. You may obtain a copy of the License at *
- * *
- * http://www.apache.org/licenses/LICENSE-2.0 *
- * *
- * Unless required by applicable law or agreed to in writing, *
- * software distributed under the License is distributed on an *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
- * KIND, either express or implied. See the License for the *
- * specific language governing permissions and limitations *
- * under the License. *
- ****************************************************************/
-
-package org.apache.james.util.scanner;
-
-import java.io.IOException;
-import java.time.Duration;
-import java.util.concurrent.TimeUnit;
-
-import org.rnorth.ducttape.unreliables.Unreliables;
-import org.testcontainers.containers.GenericContainer;
-import org.testcontainers.containers.wait.strategy.WaitStrategy;
-import org.testcontainers.containers.wait.strategy.WaitStrategyTarget;
-
-import com.google.common.primitives.Ints;
-
-public class SpamAssassinWaitStrategy implements WaitStrategy {
-
- private static final Duration DEFAULT_TIMEOUT = Duration.ofMinutes(1);
- private final GenericContainer<?> spamAssassinContainer;
- private Duration timeout = DEFAULT_TIMEOUT;
-
- public SpamAssassinWaitStrategy(GenericContainer<?> spamAssassinContainer) {
- this(spamAssassinContainer, DEFAULT_TIMEOUT);
- }
-
- public SpamAssassinWaitStrategy(GenericContainer<?> spamAssassinContainer, Duration timeout) {
- this.spamAssassinContainer = spamAssassinContainer;
- this.timeout = timeout;
- }
-
- @Override
- public void waitUntilReady(WaitStrategyTarget waitStrategyTarget) {
- Unreliables.retryUntilTrue(Ints.checkedCast(timeout.getSeconds()), TimeUnit.SECONDS, () -> {
- try {
- return spamAssassinContainer
- .execInContainer("spamassassin", "-V")
- .getStdout()
- .contains("SpamAssassin version 3.4.1");
- } catch (IOException | InterruptedException e) {
- return false;
- }
- }
- );
- }
-
- @Override
- public WaitStrategy withStartupTimeout(Duration startupTimeout) {
- return new SpamAssassinWaitStrategy(spamAssassinContainer, startupTimeout);
- }
-}
http://git-wip-us.apache.org/repos/asf/james-project/blob/1fd63a7f/server/container/util/src/test/resources/docker/spamassassin/Dockerfile
----------------------------------------------------------------------
diff --git a/server/container/util/src/test/resources/docker/spamassassin/Dockerfile b/server/container/util/src/test/resources/docker/spamassassin/Dockerfile
deleted file mode 100644
index ad1187a..0000000
--- a/server/container/util/src/test/resources/docker/spamassassin/Dockerfile
+++ /dev/null
@@ -1,43 +0,0 @@
-FROM postgres:10.3
-
-ENV SPAMASSASSIN_VERSION 3.4.1
-
-RUN apt-get update && \
- DEBIAN_FRONTEND=noninteractive apt-get install --no-install-recommends -y \
- gpg \
- libio-socket-ip-perl \
- libmail-dkim-perl \
- libnet-ident-perl \
- libsocket-getaddrinfo-perl \
- pyzor \
- razor \
- libdbi-perl \
- libdbd-pg-perl \
- spamassassin=${SPAMASSASSIN_VERSION}* && \
- apt-get clean && \
- rm -rf /var/lib/apt/lists/*
-
-RUN mkdir -p /etc/spamassassin/sa-update-keys && \
- chmod 700 /etc/spamassassin/sa-update-keys && \
- chown debian-spamd:debian-spamd /etc/spamassassin/sa-update-keys && \
- mkdir -p /var/lib/spamassassin/.pyzor && \
- chmod 700 /var/lib/spamassassin/.pyzor && \
- echo "public.pyzor.org:24441" > /var/lib/spamassassin/.pyzor/servers && \
- chmod 600 /var/lib/spamassassin/.pyzor/servers && \
- chown -R debian-spamd:debian-spamd /var/lib/spamassassin/.pyzor
-
-RUN sed -i 's/^logfile = .*$/logfile = \/dev\/stderr/g' /etc/razor/razor-agent.conf
-
-COPY spamd.sh /
-COPY rule-update.sh /
-COPY run.sh /
-RUN chmod 755 /spamd.sh /rule-update.sh /run.sh
-
-COPY local.cf /etc/spamassassin/
-
-# Bayes database will be created automatically by Postres
-COPY bayes_pg.sql /docker-entrypoint-initdb.d/
-
-EXPOSE 783
-
-ENTRYPOINT ["/spamd.sh"]
http://git-wip-us.apache.org/repos/asf/james-project/blob/1fd63a7f/server/container/util/src/test/resources/docker/spamassassin/bayes_pg.sql
----------------------------------------------------------------------
diff --git a/server/container/util/src/test/resources/docker/spamassassin/bayes_pg.sql b/server/container/util/src/test/resources/docker/spamassassin/bayes_pg.sql
deleted file mode 100644
index ef96472..0000000
--- a/server/container/util/src/test/resources/docker/spamassassin/bayes_pg.sql
+++ /dev/null
@@ -1,119 +0,0 @@
-
-CREATE TABLE bayes_expire (
- id integer NOT NULL default '0',
- runtime integer NOT NULL default '0'
-) WITHOUT OIDS;
-
-CREATE INDEX bayes_expire_idx1 ON bayes_expire (id);
-
-CREATE TABLE bayes_global_vars (
- variable varchar(30) NOT NULL default '',
- value varchar(200) NOT NULL default '',
- PRIMARY KEY (variable)
-) WITHOUT OIDS;
-
-INSERT INTO bayes_global_vars VALUES ('VERSION','3');
-
-CREATE TABLE bayes_seen (
- id integer NOT NULL default '0',
- msgid varchar(200) NOT NULL default '',
- flag character(1) NOT NULL default '',
- PRIMARY KEY (id,msgid)
-) WITHOUT OIDS;
-
-CREATE TABLE bayes_token (
- id integer NOT NULL default '0',
- token bytea NOT NULL default '',
- spam_count integer NOT NULL default '0',
- ham_count integer NOT NULL default '0',
- atime integer NOT NULL default '0',
- PRIMARY KEY (id,token)
-) WITHOUT OIDS;
-
-CREATE INDEX bayes_token_idx1 ON bayes_token (token);
-
-ALTER TABLE bayes_token SET (fillfactor=95);
-
-CREATE TABLE bayes_vars (
- id serial NOT NULL,
- username varchar(200) NOT NULL default '',
- spam_count integer NOT NULL default '0',
- ham_count integer NOT NULL default '0',
- token_count integer NOT NULL default '0',
- last_expire integer NOT NULL default '0',
- last_atime_delta integer NOT NULL default '0',
- last_expire_reduce integer NOT NULL default '0',
- oldest_token_age integer NOT NULL default '2147483647',
- newest_token_age integer NOT NULL default '0',
- PRIMARY KEY (id)
-) WITHOUT OIDS;
-
-CREATE UNIQUE INDEX bayes_vars_idx1 ON bayes_vars (username);
-
-CREATE OR REPLACE FUNCTION greatest_int (integer, integer)
- RETURNS INTEGER
- IMMUTABLE STRICT
- AS 'SELECT CASE WHEN $1 < $2 THEN $2 ELSE $1 END;'
- LANGUAGE SQL;
-
-CREATE OR REPLACE FUNCTION least_int (integer, integer)
- RETURNS INTEGER
- IMMUTABLE STRICT
- AS 'SELECT CASE WHEN $1 < $2 THEN $1 ELSE $2 END;'
- LANGUAGE SQL;
-
-CREATE OR REPLACE FUNCTION put_tokens(INTEGER,
- BYTEA[],
- INTEGER,
- INTEGER,
- INTEGER)
-RETURNS VOID AS '
-DECLARE
- inuserid ALIAS FOR $1;
- intokenary ALIAS FOR $2;
- inspam_count ALIAS FOR $3;
- inham_count ALIAS FOR $4;
- inatime ALIAS FOR $5;
- _token BYTEA;
- new_tokens INTEGER := 0;
-BEGIN
- for i in array_lower(intokenary, 1) .. array_upper(intokenary, 1)
- LOOP
- _token := intokenary[i];
- UPDATE bayes_token
- SET spam_count = greatest_int(spam_count + inspam_count, 0),
- ham_count = greatest_int(ham_count + inham_count, 0),
- atime = greatest_int(atime, inatime)
- WHERE id = inuserid
- AND token = _token;
- IF NOT FOUND THEN
- -- we do not insert negative counts, just return true
- IF NOT (inspam_count < 0 OR inham_count < 0) THEN
- INSERT INTO bayes_token (id, token, spam_count, ham_count, atime)
- VALUES (inuserid, _token, inspam_count, inham_count, inatime);
- IF FOUND THEN
- new_tokens := new_tokens + 1;
- END IF;
- END IF;
- END IF;
- END LOOP;
-
- IF new_tokens > 0 AND inatime > 0 THEN
- UPDATE bayes_vars
- SET token_count = token_count + new_tokens,
- newest_token_age = greatest_int(newest_token_age, inatime),
- oldest_token_age = least_int(oldest_token_age, inatime)
- WHERE id = inuserid;
- ELSIF new_tokens > 0 AND NOT inatime > 0 THEN
- UPDATE bayes_vars
- SET token_count = token_count + new_tokens
- WHERE id = inuserid;
- ELSIF NOT new_tokens > 0 AND inatime > 0 THEN
- UPDATE bayes_vars
- SET newest_token_age = greatest_int(newest_token_age, inatime),
- oldest_token_age = least_int(oldest_token_age, inatime)
- WHERE id = inuserid;
- END IF;
- RETURN;
-END;
-' LANGUAGE 'plpgsql';
http://git-wip-us.apache.org/repos/asf/james-project/blob/1fd63a7f/server/container/util/src/test/resources/docker/spamassassin/local.cf
----------------------------------------------------------------------
diff --git a/server/container/util/src/test/resources/docker/spamassassin/local.cf b/server/container/util/src/test/resources/docker/spamassassin/local.cf
deleted file mode 100644
index 6005e55..0000000
--- a/server/container/util/src/test/resources/docker/spamassassin/local.cf
+++ /dev/null
@@ -1,97 +0,0 @@
-# This is the right place to customize your installation of SpamAssassin.
-#
-# See 'perldoc Mail::SpamAssassin::Conf' for details of what can be
-# tweaked.
-#
-# Only a small subset of options are listed below
-#
-###########################################################################
-
-# Add *****SPAM***** to the Subject header of spam e-mails
-#
-# rewrite_header Subject *****SPAM*****
-
-
-# Save spam messages as a message/rfc822 MIME attachment instead of
-# modifying the original message (0: off, 2: use text/plain instead)
-#
-# report_safe 1
-
-
-# Set which networks or hosts are considered 'trusted' by your mail
-# server (i.e. not spammers)
-#
-# trusted_networks 212.17.35.
-
-
-# Set file-locking method (flock is not safe over NFS, but is faster)
-#
-# lock_method flock
-
-
-# Set the threshold at which a message is considered spam (default: 5.0)
-#
-# required_score 5.0
-
-
-# Use Bayesian classifier (default: 1)
-#
-use_bayes 1
-
-
-# Bayesian classifier auto-learning (default: 1)
-#
-#bayes_auto_learn 1
-
-bayes_store_module Mail::SpamAssassin::BayesStore::PgSQL
-
-bayes_sql_dsn DBI:Pg:dbname=postgres;host=localhost
-bayes_sql_username postgres
-
-bayes_min_spam_num 1
-bayes_min_ham_num 1
-
-
-# Set headers which may provide inappropriate cues to the Bayesian
-# classifier
-#
-# bayes_ignore_header X-Bogosity
-# bayes_ignore_header X-Spam-Flag
-# bayes_ignore_header X-Spam-Status
-
-
-# Whether to decode non- UTF-8 and non-ASCII textual parts and recode
-# them to UTF-8 before the text is given over to rules processing.
-#
-# normalize_charset 1
-
-# Some shortcircuiting, if the plugin is enabled
-#
-ifplugin Mail::SpamAssassin::Plugin::Shortcircuit
-#
-# default: strongly-whitelisted mails are *really* whitelisted now, if the
-# shortcircuiting plugin is active, causing early exit to save CPU load.
-# Uncomment to turn this on
-#
-# shortcircuit USER_IN_WHITELIST on
-# shortcircuit USER_IN_DEF_WHITELIST on
-# shortcircuit USER_IN_ALL_SPAM_TO on
-# shortcircuit SUBJECT_IN_WHITELIST on
-
-# the opposite; blacklisted mails can also save CPU
-#
-# shortcircuit USER_IN_BLACKLIST on
-# shortcircuit USER_IN_BLACKLIST_TO on
-# shortcircuit SUBJECT_IN_BLACKLIST on
-
-# if you have taken the time to correctly specify your "trusted_networks",
-# this is another good way to save CPU
-#
-# shortcircuit ALL_TRUSTED on
-
-# and a well-trained bayes DB can save running rules, too
-#
-# shortcircuit BAYES_99 spam
-# shortcircuit BAYES_00 ham
-
-endif # Mail::SpamAssassin::Plugin::Shortcircuit
http://git-wip-us.apache.org/repos/asf/james-project/blob/1fd63a7f/server/container/util/src/test/resources/docker/spamassassin/rule-update.sh
----------------------------------------------------------------------
diff --git a/server/container/util/src/test/resources/docker/spamassassin/rule-update.sh b/server/container/util/src/test/resources/docker/spamassassin/rule-update.sh
deleted file mode 100755
index 2867735..0000000
--- a/server/container/util/src/test/resources/docker/spamassassin/rule-update.sh
+++ /dev/null
@@ -1,7 +0,0 @@
-#!/bin/bash
-
-while true; do
- sleep 1m
- su debian-spamd -c 'sa-update' && kill -HUP `cat /var/run/spamd.pid`
- sleep 1d
-done
http://git-wip-us.apache.org/repos/asf/james-project/blob/1fd63a7f/server/container/util/src/test/resources/docker/spamassassin/run.sh
----------------------------------------------------------------------
diff --git a/server/container/util/src/test/resources/docker/spamassassin/run.sh b/server/container/util/src/test/resources/docker/spamassassin/run.sh
deleted file mode 100755
index b4a1351..0000000
--- a/server/container/util/src/test/resources/docker/spamassassin/run.sh
+++ /dev/null
@@ -1,9 +0,0 @@
-#!/bin/bash
-set -m
-
-/rule-update.sh &
-/spamd.sh &
-
-pids=`jobs -p`
-
-wait
http://git-wip-us.apache.org/repos/asf/james-project/blob/1fd63a7f/server/container/util/src/test/resources/docker/spamassassin/spamd.sh
----------------------------------------------------------------------
diff --git a/server/container/util/src/test/resources/docker/spamassassin/spamd.sh b/server/container/util/src/test/resources/docker/spamassassin/spamd.sh
deleted file mode 100755
index 2093cf8..0000000
--- a/server/container/util/src/test/resources/docker/spamassassin/spamd.sh
+++ /dev/null
@@ -1,15 +0,0 @@
-#!/bin/bash
-
-echo "Run Postgres"
-/usr/local/bin/docker-entrypoint.sh postgres &
-
-echo "Run spamd"
-spamd --username debian-spamd \
- --nouser-config \
- --syslog stderr \
- --pidfile /var/run/spamd.pid \
- --helper-home-dir /var/lib/spamassassin \
- --ip-address \
- --allowed-ips 0.0.0.0/0 \
- --allow-tell \
- --debug bayes,learn
http://git-wip-us.apache.org/repos/asf/james-project/blob/1fd63a7f/server/container/util/src/test/resources/eml/spam.eml
----------------------------------------------------------------------
diff --git a/server/container/util/src/test/resources/eml/spam.eml b/server/container/util/src/test/resources/eml/spam.eml
deleted file mode 100755
index faf3402..0000000
--- a/server/container/util/src/test/resources/eml/spam.eml
+++ /dev/null
@@ -1,152 +0,0 @@
-Return-Path: <us...@james.org>
-Subject: Fwd: Invitation: (Aucun objet) - ven. 20 janv. 2017 14:00 - 15:00
- (CET) (user@james.org)
-To: <us...@james.org>
-From: user <us...@james.org>
-Message-ID: <f1...@james.org>
-Date: Thu, 19 Jan 2017 20:36:37 +0100
-MIME-Version: 1.0
-In-Reply-To: <00...@google.com>
-Content-Type: multipart/mixed;
- boundary="------------17D96D411CBD55D8239A8C1F"
-
-This is a multi-part message in MIME format.
---------------17D96D411CBD55D8239A8C1F
-Content-Type: multipart/alternative;
- boundary="------------64D716A3DDAEC185D3E67448"
-
-
---------------64D716A3DDAEC185D3E67448
-Content-Type: text/plain; charset=utf-8; format=flowed
-Content-Transfer-Encoding: 8bit
-
-
-
-
--------- Message transéré --------
-Sujet : Invitation: (Aucun objet) - ven. 20 janv. 2017 14:00 - 15:00
-(CET) (user@james.org)
-Date : Thu, 19 Jan 2017 19:18:23 +0000
-De : <us...@james.org>
-Répondre à : user@james.org
-Pour : user@james.org
-
-
-
-
---------------64D716A3DDAEC185D3E67448
-Content-Type: text/html; charset=utf-8
-Content-Transfer-Encoding: 8bit
-
-<html>
- <head>
-
- <meta http-equiv="content-type" content="text/html; charset=utf-8">
- </head>
- <body bgcolor="#FFFFFF" text="#000000">
- <p><br>
- </p>
- <div class="moz-forward-container"><br>
- <br>
- -------- Message transéré --------
- <table class="moz-email-headers-table" border="0" cellpadding="0"
- cellspacing="0">
- <tbody>
- <tr>
- <th align="RIGHT" valign="BASELINE" nowrap="nowrap">Sujet :
- </th>
- <td>Invitation: (Aucun objet) - ven. 20 janv. 2017 14:00 -
- 15:00 (CET) (<a class="moz-txt-link-abbreviated" href="mailto:user@james.org">user@james.org</a>)</td>
- </tr>
- <tr>
- <th align="RIGHT" valign="BASELINE" nowrap="nowrap">Date : </th>
- <td>Thu, 19 Jan 2017 19:18:23 +0000</td>
- </tr>
- <tr>
- <th align="RIGHT" valign="BASELINE" nowrap="nowrap">De : </th>
- <td>User <a class="moz-txt-link-rfc2396E" href="mailto:user@james.org"><user@james.org></a></td>
- </tr>
- <tr>
- <th align="RIGHT" valign="BASELINE" nowrap="nowrap">Répondre
- Ã Â : </th>
- <td><a class="moz-txt-link-abbreviated" href="mailto:user@james.org">user@james.org</a></td>
- </tr>
- <tr>
- <th align="RIGHT" valign="BASELINE" nowrap="nowrap">Pour : </th>
- <td><a class="moz-txt-link-abbreviated" href="mailto:user@james.org">user@james.org</a></td>
- </tr>
- </tbody>
- </table>
- <br>
- <br>
- </div>
- </body>
-</html>
-
---------------64D716A3DDAEC185D3E67448--
-
---------------17D96D411CBD55D8239A8C1F
-Content-Type: text/calendar;
- name="Portion de message joint"
-Content-Transfer-Encoding: 8bit
-Content-Disposition: attachment;
- filename="Portion de message joint"
-
-BEGIN:VCALENDAR
-PRODID:-//Google Inc//Google Calendar 70.9054//EN
-VERSION:2.0
-CALSCALE:GREGORIAN
-METHOD:REQUEST
-BEGIN:VEVENT
-DTSTART:20170120T130000Z
-DTEND:20170120T140000Z
-DTSTAMP:20170119T191823Z
-ORGANIZER;CN=User:mailto:user@james.org
-UID:ah86k5m342bmcrbe9khkkhln00@google.com
-ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RSVP=
- TRUE;CN=user@james.org;X-NUM-GUESTS=0:mailto:user@james.org
-ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=ACCEPTED;RSVP=TRUE
- ;CN=User;X-NUM-GUESTS=0:mailto:user@james.org
-CREATED:20170119T191823Z
-DESCRIPTION:Affichez votre evenement sur la page https://www.google.com/cal
- endar/event?action=VIEW&eid=YWg4Nms1bTM0MmJtY3JiZTlraGtraGxuMDAgYWR1cHJhdEB
- saW5hZ29yYS5jb20&tok=MTkjYW50ZHVwcmF0QGdtYWlsLmNvbTg1OTM5NWM4MGRlYmE1YTI4Nz
- RjN2UyNjU0M2YyZmQ4NzRkNThhYTQ&ctz=Europe/Paris&hl=fr.
-LAST-MODIFIED:20170119T191823Z
-LOCATION:
-SEQUENCE:0
-STATUS:CONFIRMED
-SUMMARY:
-TRANSP:OPAQUE
-END:VEVENT
-END:VCALENDAR
-
-
---------------17D96D411CBD55D8239A8C1F
-Content-Type: application/ics;
- name="invite.ics"
-Content-Transfer-Encoding: base64
-Content-Disposition: attachment;
- filename="invite.ics"
-
-QkVHSU46VkNBTEVOREFSDQpQUk9ESUQ6LS8vR29vZ2xlIEluYy8vR29vZ2xlIENhbGVuZGFy
-IDcwLjkwNTQvL0VODQpWRVJTSU9OOjIuMA0KQ0FMU0NBTEU6R1JFR09SSUFODQpNRVRIT0Q6
-UkVRVUVTVA0KQkVHSU46VkVWRU5UDQpEVFNUQVJUOjIwMTcwMTIwVDEzMDAwMFoNCkRURU5E
-OjIwMTcwMTIwVDE0MDAwMFoNCkRUU1RBTVA6MjAxNzAxMTlUMTkxODIzWg0KT1JHQU5JWkVS
-O0NOPUFudG9pbmUgRHVwcmF0Om1haWx0bzphbnRkdXByYXRAZ21haWwuY29tDQpVSUQ6YWg4
-Nms1bTM0MmJtY3JiZTlraGtraGxuMDBAZ29vZ2xlLmNvbQ0KQVRURU5ERUU7Q1VUWVBFPUlO
-RElWSURVQUw7Uk9MRT1SRVEtUEFSVElDSVBBTlQ7UEFSVFNUQVQ9TkVFRFMtQUNUSU9OO1JT
-VlA9DQogVFJVRTtDTj1hZHVwcmF0QGxpbmFnb3JhLmNvbTtYLU5VTS1HVUVTVFM9MDptYWls
-dG86YWR1cHJhdEBsaW5hZ29yYS5jb20NCkFUVEVOREVFO0NVVFlQRT1JTkRJVklEVUFMO1JP
-TEU9UkVRLVBBUlRJQ0lQQU5UO1BBUlRTVEFUPUFDQ0VQVEVEO1JTVlA9VFJVRQ0KIDtDTj1B
-bnRvaW5lIER1cHJhdDtYLU5VTS1HVUVTVFM9MDptYWlsdG86YW50ZHVwcmF0QGdtYWlsLmNv
-bQ0KQ1JFQVRFRDoyMDE3MDExOVQxOTE4MjNaDQpERVNDUklQVElPTjpBZmZpY2hleiB2b3Ry
-ZSDDqXbDqW5lbWVudCBzdXIgbGEgcGFnZSBodHRwczovL3d3dy5nb29nbGUuY29tL2NhbA0K
-IGVuZGFyL2V2ZW50P2FjdGlvbj1WSUVXJmVpZD1ZV2c0Tm1zMWJUTTBNbUp0WTNKaVpUbHJh
-R3RyYUd4dU1EQWdZV1IxY0hKaGRFQg0KIHNhVzVoWjI5eVlTNWpiMjAmdG9rPU1Ua2pZVzUw
-WkhWd2NtRjBRR2R0WVdsc0xtTnZiVGcxT1RNNU5XTTRNR1JsWW1FMVlUSTROeg0KIFJqTjJV
-eU5qVTBNMll5Wm1RNE56UmtOVGhoWVRRJmN0ej1FdXJvcGUvUGFyaXMmaGw9ZnIuDQpMQVNU
-LU1PRElGSUVEOjIwMTcwMTE5VDE5MTgyM1oNCkxPQ0FUSU9OOg0KU0VRVUVOQ0U6MA0KU1RB
-VFVTOkNPTkZJUk1FRA0KU1VNTUFSWToNClRSQU5TUDpPUEFRVUUNCkVORDpWRVZFTlQNCkVO
-RDpWQ0FMRU5EQVINCg==
---------------17D96D411CBD55D8239A8C1F--
http://git-wip-us.apache.org/repos/asf/james-project/blob/1fd63a7f/server/container/util/src/test/resources/spamassassin_db/ham/ham1
----------------------------------------------------------------------
diff --git a/server/container/util/src/test/resources/spamassassin_db/ham/ham1 b/server/container/util/src/test/resources/spamassassin_db/ham/ham1
deleted file mode 100644
index c50bb11..0000000
--- a/server/container/util/src/test/resources/spamassassin_db/ham/ham1
+++ /dev/null
@@ -1,113 +0,0 @@
-From exmh-workers-admin@redhat.com Thu Aug 22 12:36:23 2002
-Return-Path: <ex...@spamassassin.taint.org>
-Delivered-To: zzzz@localhost.netnoteinc.com
-Received: from localhost (localhost [127.0.0.1])
- by phobos.labs.netnoteinc.com (Postfix) with ESMTP id D03E543C36
- for <zz...@localhost>; Thu, 22 Aug 2002 07:36:16 -0400 (EDT)
-Received: from phobos [127.0.0.1]
- by localhost with IMAP (fetchmail-5.9.0)
- for zzzz@localhost (single-drop); Thu, 22 Aug 2002 12:36:16 +0100 (IST)
-Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by
- dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7MBYrZ04811 for
- <zz...@spamassassin.taint.org>; Thu, 22 Aug 2002 12:34:53 +0100
-Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by
- listman.redhat.com (Postfix) with ESMTP id 8386540858; Thu, 22 Aug 2002
- 07:35:02 -0400 (EDT)
-Delivered-To: exmh-workers@listman.spamassassin.taint.org
-Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org
- [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id 10CF8406D7
- for <ex...@listman.redhat.com>; Thu, 22 Aug 2002 07:34:10 -0400
- (EDT)
-Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6)
- id g7MBY7g11259 for exmh-workers@listman.redhat.com; Thu, 22 Aug 2002
- 07:34:07 -0400
-Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by
- int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g7MBY7Y11255 for
- <ex...@redhat.com>; Thu, 22 Aug 2002 07:34:07 -0400
-Received: from ratree.psu.ac.th ([202.28.97.6]) by mx1.spamassassin.taint.org
- (8.11.6/8.11.6) with SMTP id g7MBIhl25223 for <ex...@redhat.com>;
- Thu, 22 Aug 2002 07:18:55 -0400
-Received: from delta.cs.mu.OZ.AU (delta.coe.psu.ac.th [172.30.0.98]) by
- ratree.psu.ac.th (8.11.6/8.11.6) with ESMTP id g7MBWel29762;
- Thu, 22 Aug 2002 18:32:40 +0700 (ICT)
-Received: from munnari.OZ.AU (localhost [127.0.0.1]) by delta.cs.mu.OZ.AU
- (8.11.6/8.11.6) with ESMTP id g7MBQPW13260; Thu, 22 Aug 2002 18:26:25
- +0700 (ICT)
-From: Robert Elz <kr...@munnari.OZ.AU>
-To: Chris Garrigues <cw...@DeepEddy.Com>
-Cc: exmh-workers@spamassassin.taint.org
-Subject: Re: New Sequences Window
-In-Reply-To: <10...@deepeddy.vircio.com>
-References: <10...@deepeddy.vircio.com>
- <10...@deepeddy.vircio.com> <96...@munnari.OZ.AU>
- <10...@deepeddy.vircio.com>
- <10...@deepeddy.vircio.com>
-MIME-Version: 1.0
-Content-Type: text/plain; charset=us-ascii
-Message-Id: <13...@munnari.OZ.AU>
-X-Loop: exmh-workers@spamassassin.taint.org
-Sender: exmh-workers-admin@spamassassin.taint.org
-Errors-To: exmh-workers-admin@spamassassin.taint.org
-X-Beenthere: exmh-workers@spamassassin.taint.org
-X-Mailman-Version: 2.0.1
-Precedence: bulk
-List-Help: <mailto:exmh-workers-request@spamassassin.taint.org?subject=help>
-List-Post: <ma...@spamassassin.taint.org>
-List-Subscribe: <https://listman.spamassassin.taint.org/mailman/listinfo/exmh-workers>,
- <mailto:exmh-workers-request@redhat.com?subject=subscribe>
-List-Id: Discussion list for EXMH developers <exmh-workers.spamassassin.taint.org>
-List-Unsubscribe: <https://listman.spamassassin.taint.org/mailman/listinfo/exmh-workers>,
- <mailto:exmh-workers-request@redhat.com?subject=unsubscribe>
-List-Archive: <https://listman.spamassassin.taint.org/mailman/private/exmh-workers/>
-Date: Thu, 22 Aug 2002 18:26:25 +0700
-
- Date: Wed, 21 Aug 2002 10:54:46 -0500
- From: Chris Garrigues <cw...@DeepEddy.Com>
- Message-ID: <10...@deepeddy.vircio.com>
-
-
- | I can't reproduce this error.
-
-For me it is very repeatable... (like every time, without fail).
-
-This is the debug log of the pick happening ...
-
-18:19:03 Pick_It {exec pick +inbox -list -lbrace -lbrace -subject ftp -rbrace -rbrace} {4852-4852 -sequence mercury}
-18:19:03 exec pick +inbox -list -lbrace -lbrace -subject ftp -rbrace -rbrace 4852-4852 -sequence mercury
-18:19:04 Ftoc_PickMsgs {{1 hit}}
-18:19:04 Marking 1 hits
-18:19:04 tkerror: syntax error in expression "int ...
-
-Note, if I run the pick command by hand ...
-
-delta$ pick +inbox -list -lbrace -lbrace -subject ftp -rbrace -rbrace 4852-4852 -sequence mercury
-1 hit
-
-That's where the "1 hit" comes from (obviously). The version of nmh I'm
-using is ...
-
-delta$ pick -version
-pick -- nmh-1.0.4 [compiled on fuchsia.cs.mu.OZ.AU at Sun Mar 17 14:55:56 ICT 2002]
-
-And the relevant part of my .mh_profile ...
-
-delta$ mhparam pick
--seq sel -list
-
-
-Since the pick command works, the sequence (actually, both of them, the
-one that's explicit on the command line, from the search popup, and the
-one that comes from .mh_profile) do get created.
-
-kre
-
-ps: this is still using the version of the code form a day ago, I haven't
-been able to reach the cvs repository today (local routing issue I think).
-
-
-
-_______________________________________________
-Exmh-workers mailing list
-Exmh-workers@redhat.com
-https://listman.redhat.com/mailman/listinfo/exmh-workers
-
http://git-wip-us.apache.org/repos/asf/james-project/blob/1fd63a7f/server/container/util/src/test/resources/spamassassin_db/ham/ham2
----------------------------------------------------------------------
diff --git a/server/container/util/src/test/resources/spamassassin_db/ham/ham2 b/server/container/util/src/test/resources/spamassassin_db/ham/ham2
deleted file mode 100644
index 7a5b23a..0000000
--- a/server/container/util/src/test/resources/spamassassin_db/ham/ham2
+++ /dev/null
@@ -1,73 +0,0 @@
-From Steve_Burt@cursor-system.com Thu Aug 22 12:46:39 2002
-Return-Path: <St...@cursor-system.com>
-Delivered-To: zzzz@localhost.netnoteinc.com
-Received: from localhost (localhost [127.0.0.1])
- by phobos.labs.netnoteinc.com (Postfix) with ESMTP id BE12E43C34
- for <zz...@localhost>; Thu, 22 Aug 2002 07:46:38 -0400 (EDT)
-Received: from phobos [127.0.0.1]
- by localhost with IMAP (fetchmail-5.9.0)
- for zzzz@localhost (single-drop); Thu, 22 Aug 2002 12:46:38 +0100 (IST)
-Received: from n20.grp.scd.yahoo.com (n20.grp.scd.yahoo.com
- [66.218.66.76]) by dogma.slashnull.org (8.11.6/8.11.6) with SMTP id
- g7MBkTZ05087 for <zz...@spamassassin.taint.org>; Thu, 22 Aug 2002 12:46:29 +0100
-X-Egroups-Return: sentto-2242572-52726-1030016790-zzzz=spamassassin.taint.org@returns.groups.yahoo.com
-Received: from [66.218.67.196] by n20.grp.scd.yahoo.com with NNFMP;
- 22 Aug 2002 11:46:30 -0000
-X-Sender: steve.burt@cursor-system.com
-X-Apparently-To: zzzzteana@yahoogroups.com
-Received: (EGP: mail-8_1_0_1); 22 Aug 2002 11:46:29 -0000
-Received: (qmail 11764 invoked from network); 22 Aug 2002 11:46:29 -0000
-Received: from unknown (66.218.66.217) by m3.grp.scd.yahoo.com with QMQP;
- 22 Aug 2002 11:46:29 -0000
-Received: from unknown (HELO mailgateway.cursor-system.com) (62.189.7.27)
- by mta2.grp.scd.yahoo.com with SMTP; 22 Aug 2002 11:46:29 -0000
-Received: from exchange1.cps.local (unverified) by
- mailgateway.cursor-system.com (Content Technologies SMTPRS 4.2.10) with
- ESMTP id <T5...@mailgateway.cursor-system.com> for
- <fo...@yahoogroups.com>; Thu, 22 Aug 2002 13:14:10 +0100
-Received: by exchange1.cps.local with Internet Mail Service (5.5.2653.19)
- id <PXX6AT23>; Thu, 22 Aug 2002 12:46:27 +0100
-Message-Id: <5E...@exchange1.cps.local>
-To: "'zzzzteana@yahoogroups.com'" <zz...@yahoogroups.com>
-X-Mailer: Internet Mail Service (5.5.2653.19)
-X-Egroups-From: Steve Burt <st...@cursor-system.com>
-From: Steve Burt <St...@cursor-system.com>
-X-Yahoo-Profile: pyruse
-MIME-Version: 1.0
-Mailing-List: list zzzzteana@yahoogroups.com; contact
- forteana-owner@yahoogroups.com
-Delivered-To: mailing list zzzzteana@yahoogroups.com
-Precedence: bulk
-List-Unsubscribe: <ma...@yahoogroups.com>
-Date: Thu, 22 Aug 2002 12:46:18 +0100
-Subject: [zzzzteana] RE: Alexander
-Reply-To: zzzzteana@yahoogroups.com
-Content-Type: text/plain; charset=US-ASCII
-Content-Transfer-Encoding: 7bit
-
-Martin A posted:
-Tassos Papadopoulos, the Greek sculptor behind the plan, judged that the
- limestone of Mount Kerdylio, 70 miles east of Salonika and not far from the
- Mount Athos monastic community, was ideal for the patriotic sculpture.
-
- As well as Alexander's granite features, 240 ft high and 170 ft wide, a
- museum, a restored amphitheatre and car park for admiring crowds are
-planned
----------------------
-So is this mountain limestone or granite?
-If it's limestone, it'll weather pretty fast.
-
------------------------- Yahoo! Groups Sponsor ---------------------~-->
-4 DVDs Free +s&p Join Now
-http://us.click.yahoo.com/pt6YBB/NXiEAA/mG3HAA/7gSolB/TM
----------------------------------------------------------------------~->
-
-To unsubscribe from this group, send an email to:
-forteana-unsubscribe@egroups.com
-
-
-
-Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/
-
-
-
http://git-wip-us.apache.org/repos/asf/james-project/blob/1fd63a7f/server/container/util/src/test/resources/spamassassin_db/ham/ham3
----------------------------------------------------------------------
diff --git a/server/container/util/src/test/resources/spamassassin_db/ham/ham3 b/server/container/util/src/test/resources/spamassassin_db/ham/ham3
deleted file mode 100644
index c7cfbc8..0000000
--- a/server/container/util/src/test/resources/spamassassin_db/ham/ham3
+++ /dev/null
@@ -1,82 +0,0 @@
-From timc@2ubh.com Thu Aug 22 13:52:59 2002
-Return-Path: <ti...@2ubh.com>
-Delivered-To: zzzz@localhost.netnoteinc.com
-Received: from localhost (localhost [127.0.0.1])
- by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 0314547C66
- for <zz...@localhost>; Thu, 22 Aug 2002 08:52:58 -0400 (EDT)
-Received: from phobos [127.0.0.1]
- by localhost with IMAP (fetchmail-5.9.0)
- for zzzz@localhost (single-drop); Thu, 22 Aug 2002 13:52:59 +0100 (IST)
-Received: from n16.grp.scd.yahoo.com (n16.grp.scd.yahoo.com
- [66.218.66.71]) by dogma.slashnull.org (8.11.6/8.11.6) with SMTP id
- g7MCrdZ07070 for <zz...@spamassassin.taint.org>; Thu, 22 Aug 2002 13:53:39 +0100
-X-Egroups-Return: sentto-2242572-52733-1030020820-zzzz=spamassassin.taint.org@returns.groups.yahoo.com
-Received: from [66.218.67.198] by n16.grp.scd.yahoo.com with NNFMP;
- 22 Aug 2002 12:53:40 -0000
-X-Sender: timc@2ubh.com
-X-Apparently-To: zzzzteana@yahoogroups.com
-Received: (EGP: mail-8_1_0_1); 22 Aug 2002 12:53:39 -0000
-Received: (qmail 76099 invoked from network); 22 Aug 2002 12:53:39 -0000
-Received: from unknown (66.218.66.218) by m5.grp.scd.yahoo.com with QMQP;
- 22 Aug 2002 12:53:39 -0000
-Received: from unknown (HELO rhenium.btinternet.com) (194.73.73.93) by
- mta3.grp.scd.yahoo.com with SMTP; 22 Aug 2002 12:53:39 -0000
-Received: from host217-36-23-185.in-addr.btopenworld.com ([217.36.23.185])
- by rhenium.btinternet.com with esmtp (Exim 3.22 #8) id 17hrT0-0004gj-00
- for forteana@yahoogroups.com; Thu, 22 Aug 2002 13:53:38 +0100
-X-Mailer: Microsoft Outlook Express Macintosh Edition - 4.5 (0410)
-To: zzzzteana <zz...@yahoogroups.com>
-X-Priority: 3
-Message-Id: <E1...@rhenium.btinternet.com>
-From: "Tim Chapman" <ti...@2ubh.com>
-X-Yahoo-Profile: tim2ubh
-MIME-Version: 1.0
-Mailing-List: list zzzzteana@yahoogroups.com; contact
- forteana-owner@yahoogroups.com
-Delivered-To: mailing list zzzzteana@yahoogroups.com
-Precedence: bulk
-List-Unsubscribe: <ma...@yahoogroups.com>
-Date: Thu, 22 Aug 2002 13:52:38 +0100
-Subject: [zzzzteana] Moscow bomber
-Reply-To: zzzzteana@yahoogroups.com
-Content-Type: text/plain; charset=US-ASCII
-Content-Transfer-Encoding: 7bit
-
-Man Threatens Explosion In Moscow
-
-Thursday August 22, 2002 1:40 PM
-MOSCOW (AP) - Security officers on Thursday seized an unidentified man who
-said he was armed with explosives and threatened to blow up his truck in
-front of Russia's Federal Security Services headquarters in Moscow, NTV
-television reported.
-The officers seized an automatic rifle the man was carrying, then the man
-got out of the truck and was taken into custody, NTV said. No other details
-were immediately available.
-The man had demanded talks with high government officials, the Interfax and
-ITAR-Tass news agencies said. Ekho Moskvy radio reported that he wanted to
-talk with Russian President Vladimir Putin.
-Police and security forces rushed to the Security Service building, within
-blocks of the Kremlin, Red Square and the Bolshoi Ballet, and surrounded the
-man, who claimed to have one and a half tons of explosives, the news
-agencies said. Negotiations continued for about one and a half hours outside
-the building, ITAR-Tass and Interfax reported, citing witnesses.
-The man later drove away from the building, under police escort, and drove
-to a street near Moscow's Olympic Penta Hotel, where authorities held
-further negotiations with him, the Moscow police press service said. The
-move appeared to be an attempt by security services to get him to a more
-secure location.
-
------------------------- Yahoo! Groups Sponsor ---------------------~-->
-4 DVDs Free +s&p Join Now
-http://us.click.yahoo.com/pt6YBB/NXiEAA/mG3HAA/7gSolB/TM
----------------------------------------------------------------------~->
-
-To unsubscribe from this group, send an email to:
-forteana-unsubscribe@egroups.com
-
-
-
-Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/
-
-
-
http://git-wip-us.apache.org/repos/asf/james-project/blob/1fd63a7f/server/container/util/src/test/resources/spamassassin_db/ham/ham4
----------------------------------------------------------------------
diff --git a/server/container/util/src/test/resources/spamassassin_db/ham/ham4 b/server/container/util/src/test/resources/spamassassin_db/ham/ham4
deleted file mode 100644
index 9a726c2..0000000
--- a/server/container/util/src/test/resources/spamassassin_db/ham/ham4
+++ /dev/null
@@ -1,78 +0,0 @@
-From irregulars-admin@tb.tf Thu Aug 22 14:23:39 2002
-Return-Path: <ir...@tb.tf>
-Delivered-To: zzzz@localhost.netnoteinc.com
-Received: from localhost (localhost [127.0.0.1])
- by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 9DAE147C66
- for <zz...@localhost>; Thu, 22 Aug 2002 09:23:38 -0400 (EDT)
-Received: from phobos [127.0.0.1]
- by localhost with IMAP (fetchmail-5.9.0)
- for zzzz@localhost (single-drop); Thu, 22 Aug 2002 14:23:38 +0100 (IST)
-Received: from web.tb.tf (route-64-131-126-36.telocity.com
- [64.131.126.36]) by dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id
- g7MDGOZ07922 for <zz...@spamassassin.taint.org>; Thu, 22 Aug 2002 14:16:24 +0100
-Received: from web.tb.tf (localhost.localdomain [127.0.0.1]) by web.tb.tf
- (8.11.6/8.11.6) with ESMTP id g7MDP9I16418; Thu, 22 Aug 2002 09:25:09
- -0400
-Received: from red.harvee.home (red [192.168.25.1] (may be forged)) by
- web.tb.tf (8.11.6/8.11.6) with ESMTP id g7MDO4I16408 for
- <ir...@tb.tf>; Thu, 22 Aug 2002 09:24:04 -0400
-Received: from prserv.net (out4.prserv.net [32.97.166.34]) by
- red.harvee.home (8.11.6/8.11.6) with ESMTP id g7MDFBD29237 for
- <ir...@tb.tf>; Thu, 22 Aug 2002 09:15:12 -0400
-Received: from [209.202.248.109]
- (slip-32-103-249-10.ma.us.prserv.net[32.103.249.10]) by prserv.net (out4)
- with ESMTP id <2002082213150220405qu8jce>; Thu, 22 Aug 2002 13:15:07 +0000
-MIME-Version: 1.0
-X-Sender: @ (Unverified)
-Message-Id: <p04330137b98a941c58a8@[209.202.248.109]>
-To: undisclosed-recipient: ;
-From: Monty Solomon <mo...@roscom.com>
-Content-Type: text/plain; charset="us-ascii"
-Subject: [IRR] Klez: The Virus That Won't Die
-Sender: irregulars-admin@tb.tf
-Errors-To: irregulars-admin@tb.tf
-X-Beenthere: irregulars@tb.tf
-X-Mailman-Version: 2.0.6
-Precedence: bulk
-List-Help: <mailto:irregulars-request@tb.tf?subject=help>
-List-Post: <ma...@tb.tf>
-List-Subscribe: <http://tb.tf/mailman/listinfo/irregulars>,
- <mailto:irregulars-request@tb.tf?subject=subscribe>
-List-Id: New home of the TBTF Irregulars mailing list <irregulars.tb.tf>
-List-Unsubscribe: <http://tb.tf/mailman/listinfo/irregulars>,
- <mailto:irregulars-request@tb.tf?subject=unsubscribe>
-List-Archive: <http://tb.tf/mailman/private/irregulars/>
-Date: Thu, 22 Aug 2002 09:15:25 -0400
-
-Klez: The Virus That Won't Die
-
-Already the most prolific virus ever, Klez continues to wreak havoc.
-
-Andrew Brandt
->>From the September 2002 issue of PC World magazine
-Posted Thursday, August 01, 2002
-
-
-The Klez worm is approaching its seventh month of wriggling across
-the Web, making it one of the most persistent viruses ever. And
-experts warn that it may be a harbinger of new viruses that use a
-combination of pernicious approaches to go from PC to PC.
-
-Antivirus software makers Symantec and McAfee both report more than
-2000 new infections daily, with no sign of letup at press time. The
-British security firm MessageLabs estimates that 1 in every 300
-e-mail messages holds a variation of the Klez virus, and says that
-Klez has already surpassed last summer's SirCam as the most prolific
-virus ever.
-
-And some newer Klez variants aren't merely nuisances--they can carry
-other viruses in them that corrupt your data.
-
-...
-
-http://www.pcworld.com/news/article/0,aid,103259,00.asp
-_______________________________________________
-Irregulars mailing list
-Irregulars@tb.tf
-http://tb.tf/mailman/listinfo/irregulars
-
http://git-wip-us.apache.org/repos/asf/james-project/blob/1fd63a7f/server/container/util/src/test/resources/spamassassin_db/ham/ham5
----------------------------------------------------------------------
diff --git a/server/container/util/src/test/resources/spamassassin_db/ham/ham5 b/server/container/util/src/test/resources/spamassassin_db/ham/ham5
deleted file mode 100644
index 57b6801..0000000
--- a/server/container/util/src/test/resources/spamassassin_db/ham/ham5
+++ /dev/null
@@ -1,77 +0,0 @@
-From Stewart.Smith@ee.ed.ac.uk Thu Aug 22 14:44:26 2002
-Return-Path: <St...@ee.ed.ac.uk>
-Delivered-To: zzzz@localhost.netnoteinc.com
-Received: from localhost (localhost [127.0.0.1])
- by phobos.labs.netnoteinc.com (Postfix) with ESMTP id EC69D47C66
- for <zz...@localhost>; Thu, 22 Aug 2002 09:44:25 -0400 (EDT)
-Received: from phobos [127.0.0.1]
- by localhost with IMAP (fetchmail-5.9.0)
- for zzzz@localhost (single-drop); Thu, 22 Aug 2002 14:44:25 +0100 (IST)
-Received: from n6.grp.scd.yahoo.com (n6.grp.scd.yahoo.com [66.218.66.90])
- by dogma.slashnull.org (8.11.6/8.11.6) with SMTP id g7MDcOZ08504 for
- <zz...@spamassassin.taint.org>; Thu, 22 Aug 2002 14:38:25 +0100
-X-Egroups-Return: sentto-2242572-52736-1030023506-zzzz=spamassassin.taint.org@returns.groups.yahoo.com
-Received: from [66.218.67.192] by n6.grp.scd.yahoo.com with NNFMP;
- 22 Aug 2002 13:38:26 -0000
-X-Sender: Stewart.Smith@ee.ed.ac.uk
-X-Apparently-To: zzzzteana@yahoogroups.com
-Received: (EGP: mail-8_1_0_1); 22 Aug 2002 13:38:25 -0000
-Received: (qmail 48882 invoked from network); 22 Aug 2002 13:38:25 -0000
-Received: from unknown (66.218.66.218) by m10.grp.scd.yahoo.com with QMQP;
- 22 Aug 2002 13:38:25 -0000
-Received: from unknown (HELO postbox.ee.ed.ac.uk) (129.215.80.253) by
- mta3.grp.scd.yahoo.com with SMTP; 22 Aug 2002 13:38:24 -0000
-Received: from ee.ed.ac.uk (sxs@dunblane [129.215.34.86]) by
- postbox.ee.ed.ac.uk (8.11.0/8.11.0) with ESMTP id g7MDcNi28645 for
- <fo...@yahoogroups.com>; Thu, 22 Aug 2002 14:38:23 +0100 (BST)
-Message-Id: <3D...@ee.ed.ac.uk>
-Organization: Scottish Microelectronics Centre
-User-Agent: Mozilla/5.0 (X11; U; SunOS sun4u; en-US; rv:1.1b) Gecko/20020628
-X-Accept-Language: en, en-us
-To: zzzzteana@yahoogroups.com
-References: <3D...@localhost>
-From: Stewart Smith <St...@ee.ed.ac.uk>
-X-Yahoo-Profile: stochasticus
-MIME-Version: 1.0
-Mailing-List: list zzzzteana@yahoogroups.com; contact
- forteana-owner@yahoogroups.com
-Delivered-To: mailing list zzzzteana@yahoogroups.com
-Precedence: bulk
-List-Unsubscribe: <ma...@yahoogroups.com>
-Date: Thu, 22 Aug 2002 14:38:22 +0100
-Subject: Re: [zzzzteana] Nothing like mama used to make
-Reply-To: zzzzteana@yahoogroups.com
-Content-Type: text/plain; charset=US-ASCII
-Content-Transfer-Encoding: 7bit
-
-> in adding cream to spaghetti carbonara, which has the same effect on pasta as
-> making a pizza a deep-pie;
-
-I just had to jump in here as Carbonara is one of my favourites to make and ask
-what the hell are you supposed to use instead of cream? I've never seen a
-recipe that hasn't used this. Personally I use low fat creme fraiche because it
-works quite nicely but the only time I've seen an supposedly authentic recipe
-for carbonara it was identical to mine (cream, eggs and lots of fresh parmesan)
-except for the creme fraiche.
-
-Stew
---
-Stewart Smith
-Scottish Microelectronics Centre, University of Edinburgh.
-http://www.ee.ed.ac.uk/~sxs/
-
-
------------------------- Yahoo! Groups Sponsor ---------------------~-->
-4 DVDs Free +s&p Join Now
-http://us.click.yahoo.com/pt6YBB/NXiEAA/mG3HAA/7gSolB/TM
----------------------------------------------------------------------~->
-
-To unsubscribe from this group, send an email to:
-forteana-unsubscribe@egroups.com
-
-
-
-Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/
-
-
-
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org