浏览代码

[Dovecot] Update to 2.3.5.2
[Compose] Update Dovecot image

andryyy 6 年之前
父节点
当前提交
3e3e526568

+ 1 - 1
data/Dockerfiles/dovecot/Dockerfile

@@ -3,7 +3,7 @@ LABEL maintainer "Andre Peters <andre.peters@servercow.de>"
 
 ARG DEBIAN_FRONTEND=noninteractive
 ENV LC_ALL C
-ENV DOVECOT_VERSION 2.3.5.1
+ENV DOVECOT_VERSION 2.3.5.2
 ENV PIGEONHOLE_VERSION 0.5.5
 
 RUN apt-get update && apt-get -y --no-install-recommends install \

+ 17 - 1
data/web/inc/functions.transports.inc.php

@@ -193,7 +193,7 @@ function transport($_action, $_data = null) {
       $username = str_replace(':', '\:', trim($_data['username']));
       $password = str_replace(':', '\:', trim($_data['password']));
       // ".domain" is a valid destination, "..domain" is not
-      if (empty($destination) || (is_valid_domain_name(preg_replace('/^' . preg_quote('.', '/') . '/', '', $destination)) === false && $destination != '*')) {
+      if (empty($destination) || (is_valid_domain_name(preg_replace('/^' . preg_quote('.', '/') . '/', '', $destination)) === false && $destination != '*' && filter_var($destination, FILTER_VALIDATE_EMAIL) === false)) {
         $_SESSION['return'][] = array(
           'type' => 'danger',
           'log' => array(__FUNCTION__, $_action, $_data_log),
@@ -223,6 +223,14 @@ function transport($_action, $_data = null) {
             );
             return false;
           }
+          if ($transport_data['destination'] == $destination) {
+            $_SESSION['return'][] = array(
+              'type' => 'danger',
+              'log' => array(__FUNCTION__, $_action, $_data_log),
+              'msg' => 'transport_dest_exists'
+            );
+            return false;
+          }
         }
       }
       if (isset($next_hop_matches[1])) {
@@ -319,6 +327,14 @@ function transport($_action, $_data = null) {
             }
             $existing_nh[] = $transport_data['nexthop'];
             preg_match('/\[(.+)\].*/', $transport_data['nexthop'], $existing_clean_nh[]);
+            if ($transport_data['destination'] == $destination) {
+              $_SESSION['return'][] = array(
+                'type' => 'danger',
+                'log' => array(__FUNCTION__, $_action, $_data_log),
+                'msg' => 'transport_dest_exists'
+              );
+              return false;
+            }
           }
         }
         if (isset($next_hop_matches[1])) {

+ 1 - 0
data/web/lang/lang.de.php

@@ -19,6 +19,7 @@ $lang['footer']['cancel'] = 'Abbrechen';
 $lang['footer']['hibp_nok'] = 'Übereinstimmung gefunden! Dieses Passwort ist potentiell gefährlich!';
 $lang['footer']['hibp_ok'] = 'Keine Übereinstimmung gefunden.';
 
+$lang['danger']['transport_dest_exists'] = "Transport Maps Ziel existiert bereits";
 $lang['danger']['unlimited_quota_acl'] = "Unendliche Quota untersagt durch ACL";
 $lang['danger']['mysql_error'] = "MySQL Fehler: %s";
 $lang['danger']['redis_error'] = "Redis Fehler: %s";

+ 1 - 0
data/web/lang/lang.en.php

@@ -20,6 +20,7 @@ $lang['footer']['cancel'] = 'Cancel';
 $lang['footer']['hibp_nok'] = 'Matched! This is a potentially dangerous password!';
 $lang['footer']['hibp_ok'] = 'No match found.';
 
+$lang['danger']['transport_dest_exists'] = "Transport destination exists";
 $lang['danger']['unlimited_quota_acl'] = "Unlimited quota prohibited by ACL";
 $lang['danger']['mysql_error'] = "MySQL error: %s";
 $lang['danger']['redis_error'] = "Redis error: %s";

+ 1 - 1
docker-compose.yml

@@ -169,7 +169,7 @@ services:
             - sogo
 
     dovecot-mailcow:
-      image: mailcow/dovecot:1.67
+      image: mailcow/dovecot:1.68
       build: ./data/Dockerfiles/dovecot
       cap_add:
         - NET_BIND_SERVICE