Compare commits

...
Author SHA1 Message Date
adbenitez de2d964afc upgrade Android app version to 2.67.0 2026-11-03 22:30:16 +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
8 changed files with 32 additions and 12 deletions
@@ -5,9 +5,9 @@
"sources": [ "sources": [
{ {
"sourceId": "gplay", "sourceId": "gplay",
"versionInteger": 758, "versionInteger": 760,
"versionString": "2.62.0", "versionString": "2.67.0",
"downloadUrl": "https://github.com/deltachat/deltachat-android/releases/download/v2.62.0/deltachat-gplay-release-2.62.0.apk" "downloadUrl": "https://github.com/deltachat/deltachat-android/releases/download/v2.67.0/deltachat-gplay-release-2.67.0.apk"
} }
] ]
} }
+12 -1
View File
@@ -12,6 +12,7 @@ from chatmaild.config import read_config
from pyinfra import facts, host, logger from pyinfra import facts, host, logger
from pyinfra.api import FactBase from pyinfra.api import FactBase
from pyinfra.facts import hardware from pyinfra.facts import hardware
from pyinfra.facts.files import Sha256File
from pyinfra.facts.systemd import SystemdEnabled from pyinfra.facts.systemd import SystemdEnabled
from pyinfra.operations import apt, files, pip, server, systemd from pyinfra.operations import apt, files, pip, server, systemd
@@ -38,6 +39,8 @@ from .postfix.deployer import PostfixDeployer
from .selfsigned.deployer import SelfSignedTlsDeployer from .selfsigned.deployer import SelfSignedTlsDeployer
from .www import build_webpages, find_merge_conflict, get_paths from .www import build_webpages, find_merge_conflict, get_paths
OLD_JOURNALD_SHA256 = "107c678516c972d5293a67386458fd4785d467cfa2f2b7174185e9a74e034be5"
class Port(FactBase): class Port(FactBase):
""" """
@@ -354,7 +357,15 @@ class IrohDeployer(Deployer):
class JournaldDeployer(Deployer): class JournaldDeployer(Deployer):
def configure(self): 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): def activate(self):
self.ensure_service("systemd-journald.service") self.ensure_service("systemd-journald.service")
@@ -68,6 +68,11 @@ http {
listen 127.0.0.1:8443 ssl default_server; 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 }}; root {{ www_root }};
index index.html index.htm; index index.html index.htm;
+1
View File
@@ -127,6 +127,7 @@ lmtp-filtermail_destination_concurrency_limit=10000
# Do not try to deliver messages for more than 2 days. # Do not try to deliver messages for more than 2 days.
maximal_queue_lifetime = 2d maximal_queue_lifetime = 2d
bounce_queue_lifetime = 2d
{% if not config.ipv4_relay %} {% if not config.ipv4_relay %}
# DKIM-sign locally generated mail (bounces, DSNs). # 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): def test_no_vrfy(cmfactory, chatmail_config, maildomain):
ac = cmfactory.get_online_account() ac = cmfactory.get_online_account()
addr = ac.get_config("addr") addr = ac.list_transports()[0]["addr"]
s = smtplib.SMTP(maildomain) s = smtplib.SMTP(maildomain)
s.starttls() s.starttls()
@@ -133,8 +133,8 @@ def test_use_two_chatmailservers(cmfactory, maildomain2):
ac1 = cmfactory.get_online_account() ac1 = cmfactory.get_online_account()
ac2 = cmfactory.get_online_account(domain=maildomain2) ac2 = cmfactory.get_online_account(domain=maildomain2)
cmfactory.get_accepted_chat(ac1, ac2) cmfactory.get_accepted_chat(ac1, ac2)
domain1 = ac1.get_config("addr").split("@")[1] domain1 = ac1.list_transports()[0]["addr"].split("@")[1]
domain2 = ac2.get_config("addr").split("@")[1] domain2 = ac2.list_transports()[0]["addr"].split("@")[1]
assert domain1 != domain2 assert domain1 != domain2
@@ -15,8 +15,10 @@ from cmdeploy.remote import rshell
@pytest.fixture @pytest.fixture
def imap_mailbox(cmfactory, ssl_context): def imap_mailbox(cmfactory, ssl_context):
(ac1,) = cmfactory.get_online_accounts(1) (ac1,) = cmfactory.get_online_accounts(1)
user = ac1.get_config("addr") # Delta Chat 2.63 stopped writing the legacy addr and mail_pw config keys.
password = ac1.get_config("mail_pw") transport = ac1.list_transports()[0]
user = transport["addr"]
password = transport["password"]
host = user.split("@")[1].strip("[").strip("]") host = user.split("@")[1].strip("[").strip("]")
mailbox = imap_tools.MailBox(host, ssl_context=ssl_context) mailbox = imap_tools.MailBox(host, ssl_context=ssl_context)
mailbox.login(user, password) mailbox.login(user, password)
@@ -88,7 +90,7 @@ class TestEndToEndDeltaChat:
ac1, ac2 = cmfactory.get_online_accounts(2) ac1, ac2 = cmfactory.get_online_accounts(2)
chat = cmfactory.get_accepted_chat(ac1, ac2) 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: def parse_size_limit(limit: str) -> int:
"""Parse a size limit and return the number of bytes as integer. """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") chat.send_text("testing submission header cleanup")
user2.wait_for_incoming_msg() user2.wait_for_incoming_msg()
addr = user2.get_config("addr") transport = user2.list_transports()[0]
addr = transport["addr"]
host = addr.split("@")[1].strip("[").strip("]") 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 = imap_tools.MailBox(host, ssl_context=ssl_context)
mailbox.login(addr, pw) mailbox.login(addr, pw)
msgs = list(mailbox.fetch(mark_seen=False)) msgs = list(mailbox.fetch(mark_seen=False))