From f15ee39b63463563a3430dc28188635c1e6bb654 Mon Sep 17 00:00:00 2001 From: PseudoResonance Date: Mon, 11 Nov 2024 22:00:27 -0800 Subject: [PATCH 1/7] Fix #2752: Domain recipient for address rewrite (cherry picked from commit 40f6d691d8774d6f813153974f8fe462a8db9ab3) --- .../inc/functions.address_rewriting.inc.php | 20 +++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/data/web/inc/functions.address_rewriting.inc.php b/data/web/inc/functions.address_rewriting.inc.php index 140ae4764..87b882782 100644 --- a/data/web/inc/functions.address_rewriting.inc.php +++ b/data/web/inc/functions.address_rewriting.inc.php @@ -285,7 +285,13 @@ function recipient_map($_action, $_data = null, $attr = null) { ); return false; } - if (!filter_var($new_dest, FILTER_VALIDATE_EMAIL)) { + if (is_valid_domain_name($new_dest)) { + $new_dest_sane = '@' . idn_to_ascii($new_dest, 0, INTL_IDNA_VARIANT_UTS46); + } + elseif (filter_var($new_dest, FILTER_VALIDATE_EMAIL)) { + $new_dest_sane = $new_dest; + } + else { $_SESSION['return'][] = array( 'type' => 'danger', 'log' => array(__FUNCTION__, $_action, $_data, $_attr), @@ -308,7 +314,7 @@ function recipient_map($_action, $_data = null, $attr = null) { (:old_dest, :new_dest, :active)"); $stmt->execute(array( ':old_dest' => $old_dest_sane, - ':new_dest' => $new_dest, + ':new_dest' => $new_dest_sane, ':active' => $active )); $_SESSION['return'][] = array( @@ -351,7 +357,13 @@ function recipient_map($_action, $_data = null, $attr = null) { ); continue; } - if (!filter_var($new_dest, FILTER_VALIDATE_EMAIL)) { + if (is_valid_domain_name($new_dest)) { + $new_dest_sane = '@' . idn_to_ascii($new_dest, 0, INTL_IDNA_VARIANT_UTS46); + } + elseif (filter_var($new_dest, FILTER_VALIDATE_EMAIL)) { + $new_dest_sane = $new_dest; + } + else { $_SESSION['return'][] = array( 'type' => 'danger', 'log' => array(__FUNCTION__, $_action, $_data, $_attr), @@ -378,7 +390,7 @@ function recipient_map($_action, $_data = null, $attr = null) { WHERE `id`= :id"); $stmt->execute(array( ':old_dest' => $old_dest_sane, - ':new_dest' => $new_dest, + ':new_dest' => $new_dest_sane, ':active' => $active, ':id' => $id )); From e52323bf1dc6f0097d7dc7d103aa770c155b1c7f Mon Sep 17 00:00:00 2001 From: PseudoResonance Date: Mon, 24 Feb 2025 22:36:17 -0800 Subject: [PATCH 2/7] Fix @ prefixing domain rewrite and update localization --- data/web/edit.php | 3 +++ data/web/inc/functions.address_rewriting.inc.php | 6 ++++++ data/web/lang/lang.cs-cz.json | 4 ++-- data/web/lang/lang.da-dk.json | 4 ++-- data/web/lang/lang.de-de.json | 4 ++-- data/web/lang/lang.en-gb.json | 6 +++--- data/web/lang/lang.es-es.json | 2 +- data/web/lang/lang.fi-fi.json | 4 ++-- data/web/lang/lang.fr-fr.json | 4 ++-- data/web/lang/lang.it-it.json | 6 +++--- data/web/lang/lang.ja-jp.json | 2 +- data/web/lang/lang.ko-kr.json | 6 +++--- data/web/lang/lang.nl-nl.json | 4 ++-- data/web/lang/lang.pt-br.json | 4 ++-- data/web/lang/lang.ro-ro.json | 4 ++-- data/web/lang/lang.ru-ru.json | 4 ++-- data/web/lang/lang.sk-sk.json | 4 ++-- data/web/lang/lang.sv-se.json | 4 ++-- 18 files changed, 42 insertions(+), 33 deletions(-) diff --git a/data/web/edit.php b/data/web/edit.php index 4c5cd89e9..b7544a5af 100644 --- a/data/web/edit.php +++ b/data/web/edit.php @@ -166,6 +166,9 @@ if (isset($_SESSION['mailcow_cc_role'])) { if (substr($result['recipient_map_old'], 0, 1) == '@') { $result['recipient_map_old'] = substr($result['recipient_map_old'], 1); } + if (substr($result['recipient_map_new'], 0, 1) == '@') { + $result['recipient_map_new'] = substr($result['recipient_map_new'], 1); + } $template = 'edit/recipient_map.twig'; $template_data = ['map' => $map]; } diff --git a/data/web/inc/functions.address_rewriting.inc.php b/data/web/inc/functions.address_rewriting.inc.php index 87b882782..0c89d001e 100644 --- a/data/web/inc/functions.address_rewriting.inc.php +++ b/data/web/inc/functions.address_rewriting.inc.php @@ -270,6 +270,9 @@ function recipient_map($_action, $_data = null, $attr = null) { $old_dest = substr($old_dest, 1); } $new_dest = strtolower(trim($_data['recipient_map_new'])); + if (substr($new_dest, 0, 1) == '@') { + $new_dest = substr($new_dest, 1); + } $active = intval($_data['active']); if (is_valid_domain_name($old_dest)) { $old_dest_sane = '@' . idn_to_ascii($old_dest, 0, INTL_IDNA_VARIANT_UTS46); @@ -331,6 +334,9 @@ function recipient_map($_action, $_data = null, $attr = null) { $active = (isset($_data['active'])) ? intval($_data['active']) : $is_now['active']; $new_dest = (!empty($_data['recipient_map_new'])) ? $_data['recipient_map_new'] : $is_now['recipient_map_new']; $old_dest = (!empty($_data['recipient_map_old'])) ? $_data['recipient_map_old'] : $is_now['recipient_map_old']; + if (substr($new_dest, 0, 1) == '@') { + $new_dest = substr($new_dest, 1); + } if (substr($old_dest, 0, 1) == '@') { $old_dest = substr($old_dest, 1); } diff --git a/data/web/lang/lang.cs-cz.json b/data/web/lang/lang.cs-cz.json index e75601b5a..32b74efde 100644 --- a/data/web/lang/lang.cs-cz.json +++ b/data/web/lang/lang.cs-cz.json @@ -869,7 +869,7 @@ "recipient_map": "Mapa příjemce", "recipient_map_info": "Mapy příjemců slouží k nahrazení cílové adresy zprávy před doručením.", "recipient_map_new": "Nový přijemce", - "recipient_map_new_info": "Cílová adresa mapy příjemce musí být platná emailová adresa.", + "recipient_map_new_info": "Cílová adresa mapy příjemce musí být emailová adresa nebo název domény.", "recipient_map_old": "Původní příjemce", "recipient_map_old_info": "Původní příjemce musí být platná emailová adresa nebo název domény.", "recipient_maps": "Mapy příjemců", @@ -1307,4 +1307,4 @@ "session_token": "Token formuláře není platný: Token mismatch", "session_ua": "Token formuláře není platný: User-Agent validation error" } -} \ No newline at end of file +} diff --git a/data/web/lang/lang.da-dk.json b/data/web/lang/lang.da-dk.json index 9e7977e69..da97c1794 100644 --- a/data/web/lang/lang.da-dk.json +++ b/data/web/lang/lang.da-dk.json @@ -706,7 +706,7 @@ "recipient_map": "Modtagerkort", "recipient_map_info": "Modtagerkort bruges til at erstatte destinationsadressen i en meddelelse, før den leveres.", "recipient_map_new": "Ny modtager", - "recipient_map_new_info": "Modtagerkortdestination skal være en gyldig e-mail-adresse.", + "recipient_map_new_info": "Modtagerkortdestination skal være gyldige e-mail-adresser eller et domænenavn.", "recipient_map_old": "Original modtager", "recipient_map_old_info": "En modtager kortlægger den originale destination, skal være gyldige e-mail-adresser eller et domænenavn.", "recipient_maps": "Modtagerkort", @@ -1089,4 +1089,4 @@ "first": "Først" } } -} \ No newline at end of file +} diff --git a/data/web/lang/lang.de-de.json b/data/web/lang/lang.de-de.json index d80799947..6047e9ef5 100644 --- a/data/web/lang/lang.de-de.json +++ b/data/web/lang/lang.de-de.json @@ -881,7 +881,7 @@ "recipient_map": "Empfängerumschreibung", "recipient_map_info": "Empfängerumschreibung ersetzen den Empfänger einer E-Mail vor dem Versand.", "recipient_map_new": "Neuer Empfänger", - "recipient_map_new_info": "Der neue Empfänger muss eine E-Mail-Adresse sein.", + "recipient_map_new_info": "Der neue Empfänger muss eine E-Mail-Adresse oder ein Domainname sein.", "recipient_map_old": "Original-Empfänger", "recipient_map_old_info": "Der originale Empfänger muss eine E-Mail-Adresse oder ein Domainname sein.", "recipient_maps": "Empfängerumschreibungen", @@ -1336,4 +1336,4 @@ "hour": "Nachrichten / Stunde", "day": "Nachrichten / Tag" } -} \ No newline at end of file +} diff --git a/data/web/lang/lang.en-gb.json b/data/web/lang/lang.en-gb.json index 6b1cdf00f..4138210ec 100644 --- a/data/web/lang/lang.en-gb.json +++ b/data/web/lang/lang.en-gb.json @@ -887,9 +887,9 @@ "recipient_map": "Recipient map", "recipient_map_info": "Recipient maps are used to replace the destination address on a message before it is delivered.", "recipient_map_new": "New recipient", - "recipient_map_new_info": "Recipient map destination must be a valid email address.", + "recipient_map_new_info": "Recipient map destination must be a valid email addresses or a domain name.", "recipient_map_old": "Original recipient", - "recipient_map_old_info": "A recipient maps original destination must be valid email addresses or a domain name.", + "recipient_map_old_info": "A recipient maps original destination must be a valid email addresses or a domain name.", "recipient_maps": "Recipient maps", "relay_all": "Relay all recipients", "relay_unknown": "Relay unknown mailboxes", @@ -1336,4 +1336,4 @@ "session_token": "Form token invalid: Token mismatch", "session_ua": "Form token invalid: User-Agent validation error" } -} \ No newline at end of file +} diff --git a/data/web/lang/lang.es-es.json b/data/web/lang/lang.es-es.json index 5547692ff..0bb1312b1 100644 --- a/data/web/lang/lang.es-es.json +++ b/data/web/lang/lang.es-es.json @@ -544,7 +544,7 @@ "recipient_map": "Regla de destinatario", "recipient_map_info": "Las reglas de destinatarios se utilizan para reemplazar la dirección de destino en un mensaje antes de que se entregue.", "recipient_map_new": "Destinatario nuevo", - "recipient_map_new_info": "El destino de la regla debe ser una dirección de correo válida.", + "recipient_map_new_info": "El destino de la regla debe ser una dirección de correo electrónico válida o un nombre de dominio.", "recipient_map_old": "Destinatario original", "recipient_map_old_info": "El destino original de una regla de destinatario debe ser una dirección de correo electrónico válida o un nombre de dominio.", "recipient_maps": "Reglas de destinatario", diff --git a/data/web/lang/lang.fi-fi.json b/data/web/lang/lang.fi-fi.json index 6919e1f73..9cb71cf38 100644 --- a/data/web/lang/lang.fi-fi.json +++ b/data/web/lang/lang.fi-fi.json @@ -607,7 +607,7 @@ "recipient_map": "Vastaanottajien yhdistämis määritykset", "recipient_map_info": "Vastaanottajan karttoja käytetään korvaamaan viestin kohde osoite ennen sen toimittamista.", "recipient_map_new": "Uusi vastaanottaja", - "recipient_map_new_info": "Vastaanottajan yhdistämis kartan kohteen on oltava kelvollinen sähköposti osoite.", + "recipient_map_new_info": "Vastaanottajan yhdistämis kartan kohteen on oltava kelvollinen sähköposti osoite tai verkkotunnus alueen nimi.", "recipient_map_old": "Alkuperäinen vastaanottaja", "recipient_map_old_info": "Vastaanottajan yhdistämis määritysten alkuperäisen kohteen on oltava kelvollinen sähköposti osoite tai verkkotunnus alueen nimi.", "recipient_maps": "Vastaanottajien yhdistämis määritykset", @@ -906,4 +906,4 @@ "last": "Edellinen" } } -} \ No newline at end of file +} diff --git a/data/web/lang/lang.fr-fr.json b/data/web/lang/lang.fr-fr.json index 61d62fca3..d531cdc53 100644 --- a/data/web/lang/lang.fr-fr.json +++ b/data/web/lang/lang.fr-fr.json @@ -834,7 +834,7 @@ "recipient_map": "Carte du destinataire", "recipient_map_info": "Les cartes des destinataires sont utilisées pour remplacer l’adresse de destination d’un message avant sa livraison.", "recipient_map_new": "Nouveau destinataire", - "recipient_map_new_info": "La destination de la carte du destinataire doit être une adresse de courriel valide.", + "recipient_map_new_info": "La destination de la carte du destinataire doit être une adresse de courriel valide ou un nom de domaine.", "recipient_map_old": "Destinataire original", "recipient_map_old_info": "Une carte de destination originale doit être une adresse de courriel valide ou un nom de domaine.", "recipient_maps": "Cartes des bénéficiaires", @@ -1335,4 +1335,4 @@ "hour": "msgs / heure", "day": "msgs / jour" } -} \ No newline at end of file +} diff --git a/data/web/lang/lang.it-it.json b/data/web/lang/lang.it-it.json index 59a53c09d..69219864f 100644 --- a/data/web/lang/lang.it-it.json +++ b/data/web/lang/lang.it-it.json @@ -822,9 +822,9 @@ "recipient_map": "Recipient map", "recipient_map_info": "Recipient maps are used to replace the destination address on a message before it is delivered.", "recipient_map_new": "New recipient", - "recipient_map_new_info": "Recipient map destination must be a valid email address.", + "recipient_map_new_info": "Recipient map destination must be a valid email addresses or a domain name.", "recipient_map_old": "Original recipient", - "recipient_map_old_info": "A recipient maps original destination must be valid email addresses or a domain name.", + "recipient_map_old_info": "A recipient maps original destination must be a valid email addresses or a domain name.", "recipient_maps": "Recipient maps", "relay_all": "Trasmettere a tutti i destinatari", "remove": "Rimuovi", @@ -1306,4 +1306,4 @@ }, "decimal": "." } -} \ No newline at end of file +} diff --git a/data/web/lang/lang.ja-jp.json b/data/web/lang/lang.ja-jp.json index c6efbb579..683cae373 100644 --- a/data/web/lang/lang.ja-jp.json +++ b/data/web/lang/lang.ja-jp.json @@ -887,7 +887,7 @@ "recipient_map": "受信者マップ", "recipient_map_info": "受信者マップは、メッセージが配信される前に宛先アドレスを置き換えるために使用されます。", "recipient_map_new": "新しい受信者", - "recipient_map_new_info": "受信者マップの宛先は有効なメールアドレスである必要があります。", + "recipient_map_new_info": "受信者マップの宛先は有効なメールアドレスまたはドメイン名である必要があります。", "recipient_map_old": "元の受信者", "recipient_map_old_info": "受信者マップの元の宛先は有効なメールアドレスまたはドメイン名である必要があります。", "recipient_maps": "受信者マップ", diff --git a/data/web/lang/lang.ko-kr.json b/data/web/lang/lang.ko-kr.json index a79793970..27b028cd4 100644 --- a/data/web/lang/lang.ko-kr.json +++ b/data/web/lang/lang.ko-kr.json @@ -673,9 +673,9 @@ "recipient_map": "Recipient map", "recipient_map_info": "Recipient maps are used to replace the destination address on a message before it is delivered.", "recipient_map_new": "New recipient", - "recipient_map_new_info": "Recipient map destination must be a valid email address.", + "recipient_map_new_info": "Recipient map destination must be a valid email addresses or a domain name.", "recipient_map_old": "Original recipient", - "recipient_map_old_info": "A recipient maps original destination must be valid email addresses or a domain name.", + "recipient_map_old_info": "A recipient maps original destination must be a valid email addresses or a domain name.", "recipient_maps": "Recipient maps", "relay_all": "모든 수신자에게 릴레이", "remove": "Remove", @@ -1018,4 +1018,4 @@ "session_token": "Form token invalid: Token mismatch", "session_ua": "Form token invalid: User-Agent validation error" } -} \ No newline at end of file +} diff --git a/data/web/lang/lang.nl-nl.json b/data/web/lang/lang.nl-nl.json index 79c8baa9a..e7308c379 100644 --- a/data/web/lang/lang.nl-nl.json +++ b/data/web/lang/lang.nl-nl.json @@ -764,7 +764,7 @@ "recipient_map": "Ontvanger-map", "recipient_map_info": "Ontvanger-maps worden gebruikt om het doeladres van een bericht te vervangen voordat het in een mailbox terecht komt.", "recipient_map_new": "Nieuwe ontvanger", - "recipient_map_new_info": "De bestemming van een ontvanger-map dient een geldig mailadres te zijn.", + "recipient_map_new_info": "De bestemming van een ontvanger-map dient een geldig mailadres of domeinnaam te zijn.", "recipient_map_old": "Oorspronkelijke ontvanger", "recipient_map_old_info": "De oorspronkelijke bestemming van een ontvanger-map dient een geldig mailadres of domeinnaam te zijn.", "recipient_maps": "Ontvanger-maps", @@ -1165,4 +1165,4 @@ "search": "Zoeken:", "zeroRecords": "Geen overeenkomsten gevonden" } -} \ No newline at end of file +} diff --git a/data/web/lang/lang.pt-br.json b/data/web/lang/lang.pt-br.json index b29298171..a8bdf06f4 100644 --- a/data/web/lang/lang.pt-br.json +++ b/data/web/lang/lang.pt-br.json @@ -882,7 +882,7 @@ "recipient_map": "Mapa do destinatário", "recipient_map_info": "Os mapas de destinatários são usados para substituir o endereço de destino em uma mensagem antes que ela seja entregue.", "recipient_map_new": "Novo destinatário", - "recipient_map_new_info": "O destino do mapa do destinatário deve ser um endereço de e-mail válido.", + "recipient_map_new_info": "O destino do mapa do destinatário deve ser um endereço de e-mail válido ou um nome de domínio.", "recipient_map_old": "Destinatário original", "recipient_map_old_info": "O destino original do mapa de um destinatário deve ser um endereço de e-mail válido ou um nome de domínio.", "recipient_maps": "Mapas de destinatários", @@ -1330,4 +1330,4 @@ "session_token": "Token de formulário inválido: incompatibilidade de token", "session_ua": "Token de formulário inválido: erro de validação do agente de usuário" } -} \ No newline at end of file +} diff --git a/data/web/lang/lang.ro-ro.json b/data/web/lang/lang.ro-ro.json index 0a3ef4ba3..9a8736c10 100644 --- a/data/web/lang/lang.ro-ro.json +++ b/data/web/lang/lang.ro-ro.json @@ -789,7 +789,7 @@ "recipient_map": "Hartă destinatar", "recipient_map_info": "Hărțile destinatarilor sunt folosite pentru a înlocui adresa de destinație a unui mesaj înainte de a fi livrat.", "recipient_map_new": "Destinatar nou", - "recipient_map_new_info": "Destinația hărții destinatarului trebuie să fie o adresă de email validă.", + "recipient_map_new_info": "Destinația hărții destinatarului trebuie să fie adrese de email valide sau nume de domeniu.", "recipient_map_old": "Destinatar original", "recipient_map_old_info": "Destinația originală a hărților destinatarilor trebuie să fie adrese de email valide sau nume de domeniu.", "recipient_maps": "Hărți destinatar", @@ -1208,4 +1208,4 @@ "expand_all": "Expandează tot", "decimal": "," } -} \ No newline at end of file +} diff --git a/data/web/lang/lang.ru-ru.json b/data/web/lang/lang.ru-ru.json index a275d6dd5..6591a6028 100644 --- a/data/web/lang/lang.ru-ru.json +++ b/data/web/lang/lang.ru-ru.json @@ -887,7 +887,7 @@ "recipient_map": "Перезапись получателя", "recipient_map_info": "Перезапись получателя используются для замены получателя в сообщении до его доставки.", "recipient_map_new": "Перезапись на", - "recipient_map_new_info": "Должен быть действующим почтовым ящиком.", + "recipient_map_new_info": "Должен быть действующим почтовым ящиком или доменом.", "recipient_map_old": "Получатель", "recipient_map_old_info": "Должен быть действующим почтовым ящиком или доменом.", "recipient_maps": "Перезапись получателя", @@ -1336,4 +1336,4 @@ "session_token": "Неверный токен формы: несоответствие токена", "session_ua": "Неверный токен формы: ошибка проверки User-Agent" } -} \ No newline at end of file +} diff --git a/data/web/lang/lang.sk-sk.json b/data/web/lang/lang.sk-sk.json index 06343b732..d79b6ae03 100644 --- a/data/web/lang/lang.sk-sk.json +++ b/data/web/lang/lang.sk-sk.json @@ -822,7 +822,7 @@ "recipient_map": "Mapa príjemcu", "recipient_map_info": "Mapy príjemcov sú používané ako náhrada cieľovej adresy u správy pred doručením.", "recipient_map_new": "Nový príjemca", - "recipient_map_new_info": "Mapový cieľ príjemcu musí byť platná emailová adresa.", + "recipient_map_new_info": "Mapový cieľ príjemcu musí byť platná emailová adresa alebo meno domény.", "recipient_map_old": "Originálny príjemca", "recipient_map_old_info": "Originálny cieľ mapy príjemcu musí byť platná emailová adresa alebo meno domény.", "recipient_maps": "Mapy príjemcov", @@ -1256,4 +1256,4 @@ "session_token": "Formulárový token neplatný: Tokenová nezhoda", "session_ua": "Formulárový token neplatný: User-Agent validation error" } -} \ No newline at end of file +} diff --git a/data/web/lang/lang.sv-se.json b/data/web/lang/lang.sv-se.json index f9cf25d5e..7b1cf4994 100644 --- a/data/web/lang/lang.sv-se.json +++ b/data/web/lang/lang.sv-se.json @@ -726,7 +726,7 @@ "recipient_map": "Mottagaromskrivning", "recipient_map_info": "En omskrivning av mottagaradressen används för att ersätta destinationsadressen i ett meddelande innan den levereras.", "recipient_map_new": "Ny mottagare", - "recipient_map_new_info": "Den ursprungliga mottagaren måste vara en giltig e-postadress.", + "recipient_map_new_info": "Den ursprungliga mottagaren måste vara en giltiga e-postadresser eller ett domännamn.", "recipient_map_old": "Ursprunglig mottagaren", "recipient_map_old_info": "Den ursprungliga mottagaren måste vara en giltiga e-postadresser eller ett domännamn.", "recipient_maps": "Skriv om mottagaradressen", @@ -1110,4 +1110,4 @@ "session_token": "Formulär-nyckeln är ogiltig: Nyckeln matchar inte", "session_ua": "Formulär-nyckeln är ogiltig: User-Agenten kunde inte valideras" } -} \ No newline at end of file +} From a6c38590cae713e1c8b54efd570092dbe45b9bc4 Mon Sep 17 00:00:00 2001 From: DerLinkman Date: Tue, 25 Feb 2025 09:23:10 +0100 Subject: [PATCH 3/7] rspamd: upgraded rspamd to 3.11.0-2 (incl. NIXSPAM Removal) (#6328) --- data/Dockerfiles/rspamd/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/Dockerfiles/rspamd/Dockerfile b/data/Dockerfiles/rspamd/Dockerfile index 564ca2d72..248312094 100644 --- a/data/Dockerfiles/rspamd/Dockerfile +++ b/data/Dockerfiles/rspamd/Dockerfile @@ -2,7 +2,7 @@ FROM debian:bookworm-slim LABEL maintainer="The Infrastructure Company GmbH " ARG DEBIAN_FRONTEND=noninteractive -ARG RSPAMD_VER=rspamd_3.11.0-1~90a175b45 +ARG RSPAMD_VER=rspamd_3.11.0-2~90a175b45 ARG CODENAME=bookworm ENV LC_ALL=C From 787fa49d0c060da5d330d1f104ff7bae666754b0 Mon Sep 17 00:00:00 2001 From: FreddleSpl0it Date: Tue, 25 Feb 2025 12:08:21 +0100 Subject: [PATCH 4/7] prompt user before applying major updates --- update.sh | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/update.sh b/update.sh index c11179c5e..94ffaf698 100755 --- a/update.sh +++ b/update.sh @@ -710,6 +710,43 @@ migrate_solr_config_options() { fi } +detect_major_update() { + if [ ${BRANCH} == "master" ]; then + # Array with major versions + # Add major versions here + MAJOR_VERSIONS=( + ) + + current_version=$(git describe --tags $(git rev-list --tags --max-count=1)) + release_url="https://github.com/mailcow/mailcow-dockerized/releases/tag" + + updates_to_apply=() + + for version in "${MAJOR_VERSIONS[@]}"; do + if [[ "$current_version" < "$version" ]]; then + updates_to_apply+=("$version") + fi + done + + if [[ ${#updates_to_apply[@]} -gt 0 ]]; then + echo -e "\e[33m\nMAJOR UPDATES to be applied:\e[0m" + for update in "${updates_to_apply[@]}"; do + echo "$update - $release_url/$update" + done + + echo -e "\n⚠️ Please read the release notes before proceeding.\n" + + read -p "Do you want to proceed with the update? [y/n] " response + if [[ "${response}" =~ ^([yY][eE][sS]|[yY])+$ ]]; then + echo "Proceeding with the update..." + else + echo "Update canceled. Exiting." + exit 1 + fi + fi + fi +} + ############## End Function Section ############## # Check permissions @@ -1345,6 +1382,7 @@ if [ ! "$FORCE" ]; then echo "OK, exiting." exit 0 fi + detect_major_update migrate_docker_nat fi From 704dd50262215da1d696739ddd6b04f6e2746e45 Mon Sep 17 00:00:00 2001 From: DerLinkman Date: Wed, 26 Feb 2025 15:20:57 +0100 Subject: [PATCH 5/7] compose: use ghcr.io for new/current mailcow docker images instead of docker hub (#6332) --- docker-compose.yml | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index cec1fbca1..adb57f9b5 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,7 +1,7 @@ services: unbound-mailcow: - image: mailcow/unbound:1.23 + image: ghcr.io/mailcow/unbound:1.23 environment: - TZ=${TZ} - SKIP_UNBOUND_HEALTHCHECK=${SKIP_UNBOUND_HEALTHCHECK:-n} @@ -65,7 +65,7 @@ services: - redis clamd-mailcow: - image: mailcow/clamd:1.70 + image: ghcr.io/mailcow/clamd:1.70 restart: always depends_on: unbound-mailcow: @@ -84,7 +84,7 @@ services: - clamd rspamd-mailcow: - image: mailcow/rspamd:2.0 + image: ghcr.io/mailcow/rspamd:2.0 stop_grace_period: 30s depends_on: - dovecot-mailcow @@ -117,7 +117,7 @@ services: - rspamd php-fpm-mailcow: - image: mailcow/phpfpm:1.92 + image: ghcr.io/mailcow/phpfpm:1.92 command: "php-fpm -d date.timezone=${TZ} -d expose_php=0" depends_on: - redis-mailcow @@ -183,7 +183,7 @@ services: - phpfpm sogo-mailcow: - image: mailcow/sogo:1.129 + image: ghcr.io/mailcow/sogo:1.129 environment: - DBNAME=${DBNAME} - DBUSER=${DBUSER} @@ -234,7 +234,7 @@ services: - sogo dovecot-mailcow: - image: mailcow/dovecot:2.31 + image: ghcr.io/mailcow/dovecot:2.31 depends_on: - mysql-mailcow - netfilter-mailcow @@ -321,7 +321,7 @@ services: - dovecot postfix-mailcow: - image: mailcow/postfix:1.80 + image: ghcr.io/mailcow/postfix:1.80 depends_on: mysql-mailcow: condition: service_started @@ -377,7 +377,7 @@ services: - php-fpm-mailcow - sogo-mailcow - rspamd-mailcow - image: mailcow/nginx:1.03 + image: ghcr.io/mailcow/nginx:1.03 dns: - ${IPV4_NETWORK:-172.22.1}.254 environment: @@ -419,7 +419,7 @@ services: condition: service_started unbound-mailcow: condition: service_healthy - image: mailcow/acme:1.91 + image: ghcr.io/mailcow/acme:1.91 dns: - ${IPV4_NETWORK:-172.22.1}.254 environment: @@ -457,7 +457,7 @@ services: - acme netfilter-mailcow: - image: mailcow/netfilter:1.61 + image: ghcr.io/mailcow/netfilter:1.61 stop_grace_period: 30s restart: always privileged: true @@ -477,7 +477,7 @@ services: - /lib/modules:/lib/modules:ro watchdog-mailcow: - image: mailcow/watchdog:2.06 + image: ghcr.io/mailcow/watchdog:2.06 dns: - ${IPV4_NETWORK:-172.22.1}.254 tmpfs: @@ -549,7 +549,7 @@ services: - watchdog dockerapi-mailcow: - image: mailcow/dockerapi:2.10 + image: ghcr.io/mailcow/dockerapi:2.10 security_opt: - label=disable restart: always @@ -569,7 +569,7 @@ services: - dockerapi olefy-mailcow: - image: mailcow/olefy:1.13 + image: ghcr.io/mailcow/olefy:1.13 restart: always environment: - TZ=${TZ} From 3d9cc2f6dd5aa950977ee9fb59e13ad212c3f57e Mon Sep 17 00:00:00 2001 From: FreddleSpl0it Date: Thu, 27 Feb 2025 08:14:34 +0100 Subject: [PATCH 6/7] add 2025-02 to major versions --- update.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/update.sh b/update.sh index 94ffaf698..9cfb02fd1 100755 --- a/update.sh +++ b/update.sh @@ -715,6 +715,7 @@ detect_major_update() { # Array with major versions # Add major versions here MAJOR_VERSIONS=( + "2025-02" ) current_version=$(git describe --tags $(git rev-list --tags --max-count=1)) From 35a6f81d0d4f97375274d0e6f4fb03819b7cb642 Mon Sep 17 00:00:00 2001 From: FreddleSpl0it Date: Thu, 27 Feb 2025 09:28:52 +0100 Subject: [PATCH 7/7] [Redis] use 7.4.2-alpine image --- docker-compose.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-compose.yml b/docker-compose.yml index adb57f9b5..4c470f5bd 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -42,7 +42,7 @@ services: - mysql redis-mailcow: - image: redis:7-alpine + image: redis:7.4.2-alpine entrypoint: ["/bin/sh","/redis-conf.sh"] volumes: - redis-vol-1:/data/