Compare commits

...
Author SHA1 Message Date
Jagoda Ślązak 936310f30d chore(deps): Upgrade filtermail to v0.7.8
## 0.7.8 - 2026-11-04

### Features

- Set read/write timeouts to incoming HTTP streams
- Set read/write timeouts for SMTP server streams
- Introduce a timeout for WorkerMessage

### Miscellaneous Tasks

- Add cargo-deny and apply security fixes

### Performance

- Avoid copying armored payload in check_armored_payload()
- Switch to jemalloc
- *(smtp-server)* Pre-allocate data vector to max_size
- *(smtp-server)* Reuse line buffer for reading DATA lines
- *(smtp-server)* Shrink_to_fit() data buffers at the end of DATA command

Signed-off-by: Jagoda Ślązak <jslazak@jslazak.com>
2026-11-04 20:01:22 +01:00
adbenitezandbiørn 4a36cc79a0 update android to 2.64.0 in appversions.json 2026-10-27 15:03:26 +01:00
missytakeandGitHub daffa925ab fix: reset journald.conf back to packaged version if overridden (#1067) 2026-10-25 19:37:13 +01:00
Gluekandmissytake 5facce617b fix(nginx): don't leak internal port 8443 in directory redirects
nginx listens on 127.0.0.1:8443 behind the stream proxy on port 443.
For a directory requested without a trailing slash, nginx built an
absolute Location header with its own port, e.g.
https://example.org:8443/apps/, which is unreachable from outside.
With absolute_redirect off, nginx sends a relative Location: /apps/.
2026-10-22 14:00:30 +02:00
missytake eec041a44e fix: let users overwrite volatile logging 2026-10-20 18:03:13 +02:00
missytake f27de2ad24 fix: don't overwrite default journald.conf 2026-10-20 18:03:13 +02:00
punkero-organdmissytake a3693f07c5 fix(postfix): set bounce_queue_lifetime to match maximal_queue_lifetime
Resolve this warning on startup:

 postfix/qmgr[921]: warning: bounce_queue_lifetime is larger than
 maximal_queue_lifetime - adjusting bounce_queue_lifetime
2026-10-20 15:06:33 +02:00
KamyarATandmissytake 305d83fff3 fix: read account address from list_transports()
Delta Chat 2.63 stopped writing the legacy addr and mail_pw config keys.
Online tests that called get_config for those keys got None and crashed.

Read the address and password from list_transports() instead.
2026-10-12 10:50:28 +02:00
10 changed files with 36 additions and 16 deletions
+1 -1
View File
@@ -29,7 +29,7 @@ jobs:
ref: ${{ github.event.pull_request.head.sha }}
persist-credentials: false
- name: download filtermail
run: curl -L https://github.com/chatmail/filtermail/releases/download/v0.7.7/filtermail-x86_64 -o /usr/local/bin/filtermail && chmod +x /usr/local/bin/filtermail
run: curl -L https://github.com/chatmail/filtermail/releases/download/v0.7.8/filtermail-x86_64 -o /usr/local/bin/filtermail && chmod +x /usr/local/bin/filtermail
- name: run chatmaild tests
working-directory: chatmaild
run: pipx run tox
@@ -5,9 +5,9 @@
"sources": [
{
"sourceId": "gplay",
"versionInteger": 758,
"versionString": "2.62.0",
"downloadUrl": "https://github.com/deltachat/deltachat-android/releases/download/v2.62.0/deltachat-gplay-release-2.62.0.apk"
"versionInteger": 759,
"versionString": "2.64.0",
"downloadUrl": "https://github.com/deltachat/deltachat-android/releases/download/v2.64.0/deltachat-gplay-release-2.64.0.apk"
}
]
}
+12 -1
View File
@@ -12,6 +12,7 @@ from chatmaild.config import read_config
from pyinfra import facts, host, logger
from pyinfra.api import FactBase
from pyinfra.facts import hardware
from pyinfra.facts.files import Sha256File
from pyinfra.facts.systemd import SystemdEnabled
from pyinfra.operations import apt, files, pip, server, systemd
@@ -38,6 +39,8 @@ from .postfix.deployer import PostfixDeployer
from .selfsigned.deployer import SelfSignedTlsDeployer
from .www import build_webpages, find_merge_conflict, get_paths
OLD_JOURNALD_SHA256 = "107c678516c972d5293a67386458fd4785d467cfa2f2b7174185e9a74e034be5"
class Port(FactBase):
"""
@@ -354,7 +357,15 @@ class IrohDeployer(Deployer):
class JournaldDeployer(Deployer):
def configure(self):
self.put_file("journald.conf", "/etc/systemd/journald.conf")
self.put_file("90-volatile-logging.conf", "/etc/systemd/journald.conf.d/90-volatile-logging.conf")
if host.get_fact(Sha256File, "/etc/systemd/journald.conf") == OLD_JOURNALD_SHA256:
server.shell(
name="Restore Debian's journald.conf",
commands=[
"rm /etc/systemd/journald.conf",
"DEBIAN_FRONTEND=noninteractive apt-get install -y --reinstall -o Dpkg::Options::=--force-confmiss systemd",
],
)
def activate(self):
self.ensure_service("systemd-journald.service")
@@ -68,6 +68,11 @@ http {
listen 127.0.0.1:8443 ssl default_server;
# nginx is reached through the stream proxy on port 443,
# so redirects it generates itself (e.g. /dir -> /dir/)
# must not contain the internal port 8443.
absolute_redirect off;
root {{ www_root }};
index index.html index.htm;
+3 -3
View File
@@ -1,14 +1,14 @@
"""Versions, hashes, and download URLs for pre-built artifacts fetched during deploy."""
FILTERMAIL_VERSION = "v0.7.7"
FILTERMAIL_VERSION = "v0.7.8"
FILTERMAIL_ARTIFACTS = {
"x86_64": (
f"https://github.com/chatmail/filtermail/releases/download/{FILTERMAIL_VERSION}/filtermail-x86_64",
"0691debf501f854f4e6a9dd6516f3a0ef03d95721a9b540309014bfe1a1f52b1",
"f470431f98468b9f4d2452470bffc00c0010b3f92655005d59b997f599fd7d4a",
),
"aarch64": (
f"https://github.com/chatmail/filtermail/releases/download/{FILTERMAIL_VERSION}/filtermail-aarch64",
"964f85df8b65b812666113f968cbfdd8da88ce16d218284deb359c1e2400d2da",
"a15a476ab92072ad22f1bc9d81e5c545bc3d81fc9d446d53f8cc1de810867837",
),
"mtail": (
f"https://raw.githubusercontent.com/chatmail/filtermail/{FILTERMAIL_VERSION}/contrib/filtermail.mtail",
+1
View File
@@ -127,6 +127,7 @@ lmtp-filtermail_destination_concurrency_limit=10000
# Do not try to deliver messages for more than 2 days.
maximal_queue_lifetime = 2d
bounce_queue_lifetime = 2d
{% if not config.ipv4_relay %}
# DKIM-sign locally generated mail (bounces, DSNs).
@@ -91,7 +91,7 @@ def test_concurrent_logins_same_account(
def test_no_vrfy(cmfactory, chatmail_config, maildomain):
ac = cmfactory.get_online_account()
addr = ac.get_config("addr")
addr = ac.list_transports()[0]["addr"]
s = smtplib.SMTP(maildomain)
s.starttls()
@@ -133,8 +133,8 @@ def test_use_two_chatmailservers(cmfactory, maildomain2):
ac1 = cmfactory.get_online_account()
ac2 = cmfactory.get_online_account(domain=maildomain2)
cmfactory.get_accepted_chat(ac1, ac2)
domain1 = ac1.get_config("addr").split("@")[1]
domain2 = ac2.get_config("addr").split("@")[1]
domain1 = ac1.list_transports()[0]["addr"].split("@")[1]
domain2 = ac2.list_transports()[0]["addr"].split("@")[1]
assert domain1 != domain2
@@ -15,8 +15,10 @@ from cmdeploy.remote import rshell
@pytest.fixture
def imap_mailbox(cmfactory, ssl_context):
(ac1,) = cmfactory.get_online_accounts(1)
user = ac1.get_config("addr")
password = ac1.get_config("mail_pw")
# Delta Chat 2.63 stopped writing the legacy addr and mail_pw config keys.
transport = ac1.list_transports()[0]
user = transport["addr"]
password = transport["password"]
host = user.split("@")[1].strip("[").strip("]")
mailbox = imap_tools.MailBox(host, ssl_context=ssl_context)
mailbox.login(user, password)
@@ -88,7 +90,7 @@ class TestEndToEndDeltaChat:
ac1, ac2 = cmfactory.get_online_accounts(2)
chat = cmfactory.get_accepted_chat(ac1, ac2)
user = ac2.get_config("configured_addr")
user = ac2.list_transports()[0]["addr"]
def parse_size_limit(limit: str) -> int:
"""Parse a size limit and return the number of bytes as integer.
@@ -190,9 +192,10 @@ def test_hide_senders_ip_address(cmfactory, ssl_context):
chat.send_text("testing submission header cleanup")
user2.wait_for_incoming_msg()
addr = user2.get_config("addr")
transport = user2.list_transports()[0]
addr = transport["addr"]
host = addr.split("@")[1].strip("[").strip("]")
pw = user2.get_config("mail_pw")
pw = transport["password"]
mailbox = imap_tools.MailBox(host, ssl_context=ssl_context)
mailbox.login(addr, pw)
msgs = list(mailbox.fetch(mark_seen=False))