From 8ed9a0a4aa4ef44570d5e0b1382f800df30d1375 Mon Sep 17 00:00:00 2001
From: Jesse Norell <jesse@kci.net>
Date: Thu, 2 Sep 2021 11:09:19 -0600
Subject: [PATCH] mail: mail_relay_domain domain should be unique per server

---
 .../validate_mail_relay_domain.inc.php        | 64 +++++++++++++++++++
 .../web/mail/form/mail_relay_domain.tform.php | 12 ++--
 .../mail/lib/lang/ar_mail_relay_domain.lng    |  3 +
 .../mail/lib/lang/bg_mail_relay_domain.lng    |  3 +
 .../mail/lib/lang/br_mail_relay_domain.lng    |  3 +
 .../mail/lib/lang/ca_mail_relay_domain.lng    |  3 +
 .../mail/lib/lang/cz_mail_relay_domain.lng    |  3 +
 .../mail/lib/lang/de_mail_relay_domain.lng    |  3 +
 .../mail/lib/lang/dk_mail_relay_domain.lng    |  3 +
 .../mail/lib/lang/el_mail_relay_domain.lng    |  3 +
 .../mail/lib/lang/en_mail_relay_domain.lng    |  3 +
 .../mail/lib/lang/es_mail_relay_domain.lng    |  3 +
 .../mail/lib/lang/fi_mail_relay_domain.lng    |  3 +
 .../mail/lib/lang/fr_mail_relay_domain.lng    |  3 +
 .../mail/lib/lang/hr_mail_relay_domain.lng    |  3 +
 .../mail/lib/lang/hu_mail_relay_domain.lng    |  3 +
 .../mail/lib/lang/id_mail_relay_domain.lng    |  3 +
 .../mail/lib/lang/it_mail_relay_domain.lng    |  3 +
 .../mail/lib/lang/ja_mail_relay_domain.lng    |  3 +
 .../mail/lib/lang/nl_mail_relay_domain.lng    |  3 +
 .../mail/lib/lang/pl_mail_relay_domain.lng    |  3 +
 .../mail/lib/lang/pt_mail_relay_domain.lng    |  3 +
 .../mail/lib/lang/ro_mail_relay_domain.lng    |  3 +
 .../mail/lib/lang/ru_mail_relay_domain.lng    |  3 +
 .../mail/lib/lang/se_mail_relay_domain.lng    |  3 +
 .../mail/lib/lang/sk_mail_relay_domain.lng    |  3 +
 .../mail/lib/lang/tr_mail_relay_domain.lng    |  3 +
 27 files changed, 146 insertions(+), 5 deletions(-)
 create mode 100644 interface/lib/classes/validate_mail_relay_domain.inc.php

diff --git a/interface/lib/classes/validate_mail_relay_domain.inc.php b/interface/lib/classes/validate_mail_relay_domain.inc.php
new file mode 100644
index 0000000000..0d6beedefb
--- /dev/null
+++ b/interface/lib/classes/validate_mail_relay_domain.inc.php
@@ -0,0 +1,64 @@
+<?php
+
+/*
+Copyright (c) 2007, Till Brehm, projektfarm Gmbh
+Copyright (c) 2021, Jesse Norell <jesse@kci.net>
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+    * Neither the name of ISPConfig nor the names of its contributors
+      may be used to endorse or promote products derived from this software without
+      specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+class validate_mail_relay_domain {
+
+	function get_error($errmsg) {
+		global $app;
+
+		if(isset($app->tform->wordbook[$errmsg])) {
+			return $app->tform->wordbook[$errmsg]."<br>\r\n";
+		} else {
+			return $errmsg."<br>\r\n";
+		}
+	}
+
+	/* Validator function for checking the 'domain' of a mail relay domain */
+	function validate_domain($field_name, $field_value, $validator) {
+		global $app, $conf;
+
+		if(empty($field_value) || $field_name != 'domain') return;
+
+
+		if(isset($app->remoting_lib->primary_id)) {
+			$id = $app->remoting_lib->primary_id;
+		} else {
+			$id = $app->tform->primary_id;
+		}
+
+		// mail_relay_domain.domain must be unique per server
+		$sql = "SELECT relay_domain_id, domain FROM mail_relay_domain WHERE domain = ? AND server_id = ? AND relay_domain_id != ?";
+		$domain_check = $app->db->queryOneRecord($sql, $field_value, $conf['server_id'], $id);
+
+		if($domain_check) return $this->get_error('domain_error_unique');
+	}
+
+}
diff --git a/interface/web/mail/form/mail_relay_domain.tform.php b/interface/web/mail/form/mail_relay_domain.tform.php
index 2d02fa976c..4e2523309d 100644
--- a/interface/web/mail/form/mail_relay_domain.tform.php
+++ b/interface/web/mail/form/mail_relay_domain.tform.php
@@ -110,11 +110,13 @@ $form["tabs"]['relay_domain'] = array (
 					'type' => 'STRIPNL'),
 			),
 			'validators' => array (  0 => array ( 'type' => 'NOTEMPTY',
-					'errmsg'=> 'domain_error_empty'),
-				1 => array ( 'type' => 'UNIQUE',
-					'errmsg'=> 'domain_error_unique'),
-				2 => array ( 'type' => 'ISDOMAIN',
-					'errmsg'=> 'domain_error_regex'),
+					'errmsg' => 'domain_error_empty'),
+				1 => array ( 'type' => 'ISDOMAIN',
+					'errmsg' => 'domain_error_regex'),
+				2 => array ( 'type' => 'CUSTOM',
+					'class' => 'validate_mail_relay_domain',
+					'function' => 'validate_domain',
+					'errmsg' => 'domain_error_unique'),
 			),
 			'default' => '',
 			'value'  => '',
diff --git a/interface/web/mail/lib/lang/ar_mail_relay_domain.lng b/interface/web/mail/lib/lang/ar_mail_relay_domain.lng
index 1e45e58915..e5296a9a9b 100644
--- a/interface/web/mail/lib/lang/ar_mail_relay_domain.lng
+++ b/interface/web/mail/lib/lang/ar_mail_relay_domain.lng
@@ -4,3 +4,6 @@ $wb['tab_relay_domain_title'] = 'Relay domain';
 $wb['server_id_txt'] = 'Server';
 $wb['active_txt'] = 'Active';
 $wb['domain_txt'] = 'Domain';
+$wb['domain_error_regex'] = 'Invalid domain name.';
+$wb['domain_error_empty'] = 'Domain is empty.';
+$wb['domain_error_unique'] = 'This Domain already exists as a mail relay domain on this server.';
diff --git a/interface/web/mail/lib/lang/bg_mail_relay_domain.lng b/interface/web/mail/lib/lang/bg_mail_relay_domain.lng
index 74d6874b63..0da8a0a246 100644
--- a/interface/web/mail/lib/lang/bg_mail_relay_domain.lng
+++ b/interface/web/mail/lib/lang/bg_mail_relay_domain.lng
@@ -4,3 +4,6 @@ $wb['tab_relay_domain_title'] = 'Relay domain';
 $wb['server_id_txt'] = 'Сървър';
 $wb['active_txt'] = 'Активен';
 $wb['domain_txt'] = 'Домейн';
+$wb['domain_error_regex'] = 'Invalid domain name.';
+$wb['domain_error_empty'] = 'Полето с домейн е празно.';
+$wb['domain_error_unique'] = 'This Domain already exists as a mail relay domain on this server.';
diff --git a/interface/web/mail/lib/lang/br_mail_relay_domain.lng b/interface/web/mail/lib/lang/br_mail_relay_domain.lng
index a25675ff17..b992e63aa2 100644
--- a/interface/web/mail/lib/lang/br_mail_relay_domain.lng
+++ b/interface/web/mail/lib/lang/br_mail_relay_domain.lng
@@ -4,3 +4,6 @@ $wb['tab_relay_domain_title'] = 'Relay domain';
 $wb['server_id_txt'] = 'Servidor';
 $wb['active_txt'] = 'Ativo';
 $wb['domain_txt'] = 'Domínio';
+$wb['domain_error_regex'] = 'O domínio é inválido.';
+$wb['domain_error_empty'] = 'O domínio está vazio.';
+$wb['domain_error_unique'] = 'This Domain already exists as a mail relay domain on this server.';
diff --git a/interface/web/mail/lib/lang/ca_mail_relay_domain.lng b/interface/web/mail/lib/lang/ca_mail_relay_domain.lng
index b3ca03b583..b6e9d8f2fb 100644
--- a/interface/web/mail/lib/lang/ca_mail_relay_domain.lng
+++ b/interface/web/mail/lib/lang/ca_mail_relay_domain.lng
@@ -4,3 +4,6 @@ $wb['tab_relay_domain_title'] = 'Relay domain';
 $wb['server_id_txt'] = 'Serveur';
 $wb['active_txt'] = 'Actif';
 $wb['domain_txt'] = 'Domaine';
+$wb['domain_error_regex'] = 'Nom de domaine invalide.';
+$wb['domain_error_empty'] = 'Le domain est vide.';
+$wb['domain_error_unique'] = 'This Domain already exists as a mail relay domain on this server.';
diff --git a/interface/web/mail/lib/lang/cz_mail_relay_domain.lng b/interface/web/mail/lib/lang/cz_mail_relay_domain.lng
index 30d4ecc3d1..e5563fd535 100644
--- a/interface/web/mail/lib/lang/cz_mail_relay_domain.lng
+++ b/interface/web/mail/lib/lang/cz_mail_relay_domain.lng
@@ -4,3 +4,6 @@ $wb['tab_relay_domain_title'] = 'Relay domain';
 $wb['server_id_txt'] = 'Server';
 $wb['active_txt'] = 'Aktivní';
 $wb['domain_txt'] = 'Doména';
+$wb['domain_error_regex'] = 'Neplatný název domény.';
+$wb['domain_error_empty'] = 'Doména je prázdná.';
+$wb['domain_error_unique'] = 'This Domain already exists as a mail relay domain on this server.';
diff --git a/interface/web/mail/lib/lang/de_mail_relay_domain.lng b/interface/web/mail/lib/lang/de_mail_relay_domain.lng
index 0bfacb7916..6c0456a2c2 100644
--- a/interface/web/mail/lib/lang/de_mail_relay_domain.lng
+++ b/interface/web/mail/lib/lang/de_mail_relay_domain.lng
@@ -4,3 +4,6 @@ $wb['tab_relay_domain_title'] = 'Relay domain';
 $wb['server_id_txt'] = 'Server';
 $wb['active_txt'] = 'Aktiv';
 $wb['domain_txt'] = 'Domain';
+$wb['domain_error_regex'] = 'Domain Name ist nicht gültig.';
+$wb['domain_error_empty'] = 'Domain ist leer.';
+$wb['domain_error_unique'] = 'This Domain already exists as a mail relay domain on this server.';
diff --git a/interface/web/mail/lib/lang/dk_mail_relay_domain.lng b/interface/web/mail/lib/lang/dk_mail_relay_domain.lng
index 5248fa4b47..d993bcd4b1 100644
--- a/interface/web/mail/lib/lang/dk_mail_relay_domain.lng
+++ b/interface/web/mail/lib/lang/dk_mail_relay_domain.lng
@@ -4,3 +4,6 @@ $wb['tab_relay_domain_title'] = 'Relay domain';
 $wb['server_id_txt'] = 'Server';
 $wb['active_txt'] = 'Aktiv';
 $wb['domain_txt'] = 'Domæne';
+$wb['domain_error_regex'] = 'Ugyldigt domæne name.';
+$wb['domain_error_empty'] = 'Domæne er tom.';
+$wb['domain_error_unique'] = 'This Domain already exists as a mail relay domain on this server.';
diff --git a/interface/web/mail/lib/lang/el_mail_relay_domain.lng b/interface/web/mail/lib/lang/el_mail_relay_domain.lng
index 16ae95a41c..6f6d698afa 100644
--- a/interface/web/mail/lib/lang/el_mail_relay_domain.lng
+++ b/interface/web/mail/lib/lang/el_mail_relay_domain.lng
@@ -4,3 +4,6 @@ $wb['tab_relay_domain_title'] = 'Relay domain';
 $wb['server_id_txt'] = 'Server';
 $wb['active_txt'] = 'Ενεργό';
 $wb['domain_txt'] = 'Domain';
+$wb['domain_error_regex'] = 'Το όνομα domain δεν είναι έγκυρο/';
+$wb['domain_error_empty'] = 'Το Domain είναι άδειο.';
+$wb['domain_error_unique'] = 'This Domain already exists as a mail relay domain on this server.';
diff --git a/interface/web/mail/lib/lang/en_mail_relay_domain.lng b/interface/web/mail/lib/lang/en_mail_relay_domain.lng
index 1e45e58915..e5296a9a9b 100644
--- a/interface/web/mail/lib/lang/en_mail_relay_domain.lng
+++ b/interface/web/mail/lib/lang/en_mail_relay_domain.lng
@@ -4,3 +4,6 @@ $wb['tab_relay_domain_title'] = 'Relay domain';
 $wb['server_id_txt'] = 'Server';
 $wb['active_txt'] = 'Active';
 $wb['domain_txt'] = 'Domain';
+$wb['domain_error_regex'] = 'Invalid domain name.';
+$wb['domain_error_empty'] = 'Domain is empty.';
+$wb['domain_error_unique'] = 'This Domain already exists as a mail relay domain on this server.';
diff --git a/interface/web/mail/lib/lang/es_mail_relay_domain.lng b/interface/web/mail/lib/lang/es_mail_relay_domain.lng
index 294fd56f32..848775dd2a 100644
--- a/interface/web/mail/lib/lang/es_mail_relay_domain.lng
+++ b/interface/web/mail/lib/lang/es_mail_relay_domain.lng
@@ -4,3 +4,6 @@ $wb['tab_relay_domain_title'] = 'Relay domain';
 $wb['server_id_txt'] = 'Servidor';
 $wb['active_txt'] = 'Habilitado';
 $wb['domain_txt'] = 'Dominio';
+$wb['domain_error_regex'] = 'Nombre de dominio inválido.';
+$wb['domain_error_empty'] = 'El dominio está vacío.';
+$wb['domain_error_unique'] = 'This Domain already exists as a mail relay domain on this server.';
diff --git a/interface/web/mail/lib/lang/fi_mail_relay_domain.lng b/interface/web/mail/lib/lang/fi_mail_relay_domain.lng
index 1853d0a118..37afab76ce 100644
--- a/interface/web/mail/lib/lang/fi_mail_relay_domain.lng
+++ b/interface/web/mail/lib/lang/fi_mail_relay_domain.lng
@@ -4,3 +4,6 @@ $wb['tab_relay_domain_title'] = 'Relay domain';
 $wb['server_id_txt'] = 'Palvelin';
 $wb['active_txt'] = 'Toiminnassa';
 $wb['domain_txt'] = 'Postiverkkotunnus';
+$wb['domain_error_regex'] = 'Invalid domain name.';
+$wb['domain_error_empty'] = 'Domain is empty.';
+$wb['domain_error_unique'] = 'This Domain already exists as a mail relay domain on this server.';
diff --git a/interface/web/mail/lib/lang/fr_mail_relay_domain.lng b/interface/web/mail/lib/lang/fr_mail_relay_domain.lng
index b3ca03b583..b6e9d8f2fb 100644
--- a/interface/web/mail/lib/lang/fr_mail_relay_domain.lng
+++ b/interface/web/mail/lib/lang/fr_mail_relay_domain.lng
@@ -4,3 +4,6 @@ $wb['tab_relay_domain_title'] = 'Relay domain';
 $wb['server_id_txt'] = 'Serveur';
 $wb['active_txt'] = 'Actif';
 $wb['domain_txt'] = 'Domaine';
+$wb['domain_error_regex'] = 'Nom de domaine invalide.';
+$wb['domain_error_empty'] = 'Le domain est vide.';
+$wb['domain_error_unique'] = 'This Domain already exists as a mail relay domain on this server.';
diff --git a/interface/web/mail/lib/lang/hr_mail_relay_domain.lng b/interface/web/mail/lib/lang/hr_mail_relay_domain.lng
index c8712ed543..c0d40b147c 100644
--- a/interface/web/mail/lib/lang/hr_mail_relay_domain.lng
+++ b/interface/web/mail/lib/lang/hr_mail_relay_domain.lng
@@ -4,3 +4,6 @@ $wb['tab_relay_domain_title'] = 'Relay domain';
 $wb['server_id_txt'] = 'Server';
 $wb['active_txt'] = 'Aktivno';
 $wb['domain_txt'] = 'Domena';
+$wb['domain_error_regex'] = 'Neispravan naziv domene.';
+$wb['domain_error_empty'] = 'Domena je prazna.';
+$wb['domain_error_unique'] = 'This Domain already exists as a mail relay domain on this server.';
diff --git a/interface/web/mail/lib/lang/hu_mail_relay_domain.lng b/interface/web/mail/lib/lang/hu_mail_relay_domain.lng
index 5bb628f605..0ad225ad55 100644
--- a/interface/web/mail/lib/lang/hu_mail_relay_domain.lng
+++ b/interface/web/mail/lib/lang/hu_mail_relay_domain.lng
@@ -4,3 +4,6 @@ $wb['tab_relay_domain_title'] = 'Relay domain';
 $wb['server_id_txt'] = 'Szerver';
 $wb['active_txt'] = 'Aktív';
 $wb['domain_txt'] = 'Domain';
+$wb['domain_error_regex'] = 'Invalid domain name.';
+$wb['domain_error_empty'] = 'Domain is empty.';
+$wb['domain_error_unique'] = 'This Domain already exists as a mail relay domain on this server.';
diff --git a/interface/web/mail/lib/lang/id_mail_relay_domain.lng b/interface/web/mail/lib/lang/id_mail_relay_domain.lng
index 7406667d8e..042ebf0f62 100644
--- a/interface/web/mail/lib/lang/id_mail_relay_domain.lng
+++ b/interface/web/mail/lib/lang/id_mail_relay_domain.lng
@@ -4,3 +4,6 @@ $wb['tab_relay_domain_title'] = 'Relay domain';
 $wb['server_id_txt'] = 'Server';
 $wb['active_txt'] = 'Aktif';
 $wb['domain_txt'] = 'Domain';
+$wb['domain_error_regex'] = 'Invalid domain name.';
+$wb['domain_error_empty'] = 'Domain is empty.';
+$wb['domain_error_unique'] = 'This Domain already exists as a mail relay domain on this server.';
diff --git a/interface/web/mail/lib/lang/it_mail_relay_domain.lng b/interface/web/mail/lib/lang/it_mail_relay_domain.lng
index e35e0e8b55..e5ea20d100 100644
--- a/interface/web/mail/lib/lang/it_mail_relay_domain.lng
+++ b/interface/web/mail/lib/lang/it_mail_relay_domain.lng
@@ -4,3 +4,6 @@ $wb['tab_relay_domain_title'] = 'Relay domain';
 $wb['server_id_txt'] = 'Server';
 $wb['active_txt'] = 'Attivo';
 $wb['domain_txt'] = 'Dominio';
+$wb['domain_error_regex'] = 'Invalid domain name.';
+$wb['domain_error_empty'] = 'Domain  vuoto.';
+$wb['domain_error_unique'] = 'This Domain already exists as a mail relay domain on this server.';
diff --git a/interface/web/mail/lib/lang/ja_mail_relay_domain.lng b/interface/web/mail/lib/lang/ja_mail_relay_domain.lng
index 161d0c0e32..ea66b94551 100644
--- a/interface/web/mail/lib/lang/ja_mail_relay_domain.lng
+++ b/interface/web/mail/lib/lang/ja_mail_relay_domain.lng
@@ -4,3 +4,6 @@ $wb['tab_relay_domain_title'] = 'Relay domain';
 $wb['server_id_txt'] = 'Server';
 $wb['active_txt'] = 'Active';
 $wb['domain_txt'] = 'ドメイン';
+$wb['domain_error_regex'] = 'Invalid domain name.';
+$wb['domain_error_empty'] = 'Domain is empty.';
+$wb['domain_error_unique'] = 'This Domain already exists as a mail relay domain on this server.';
diff --git a/interface/web/mail/lib/lang/nl_mail_relay_domain.lng b/interface/web/mail/lib/lang/nl_mail_relay_domain.lng
index 5baeb6f9d0..e76ed68a5d 100644
--- a/interface/web/mail/lib/lang/nl_mail_relay_domain.lng
+++ b/interface/web/mail/lib/lang/nl_mail_relay_domain.lng
@@ -4,3 +4,6 @@ $wb['tab_relay_domain_title'] = 'Relay domain';
 $wb['server_id_txt'] = 'Server';
 $wb['active_txt'] = 'Actief';
 $wb['domain_txt'] = 'Domein';
+$wb['domain_error_regex'] = 'Invalid domain name.';
+$wb['domain_error_empty'] = 'Domain is empty.';
+$wb['domain_error_unique'] = 'This Domain already exists as a mail relay domain on this server.';
diff --git a/interface/web/mail/lib/lang/pl_mail_relay_domain.lng b/interface/web/mail/lib/lang/pl_mail_relay_domain.lng
index 145eb336cc..dc872f9242 100644
--- a/interface/web/mail/lib/lang/pl_mail_relay_domain.lng
+++ b/interface/web/mail/lib/lang/pl_mail_relay_domain.lng
@@ -4,3 +4,6 @@ $wb['tab_relay_domain_title'] = 'Relay domain';
 $wb['server_id_txt'] = 'Serwer';
 $wb['active_txt'] = 'Aktywny';
 $wb['domain_txt'] = 'Domena';
+$wb['domain_error_regex'] = 'Nieprawidłowa nazwa domeny.';
+$wb['domain_error_empty'] = 'Domena jest pusta.';
+$wb['domain_error_unique'] = 'This Domain already exists as a mail relay domain on this server.';
diff --git a/interface/web/mail/lib/lang/pt_mail_relay_domain.lng b/interface/web/mail/lib/lang/pt_mail_relay_domain.lng
index f6879d78f6..a775995cde 100644
--- a/interface/web/mail/lib/lang/pt_mail_relay_domain.lng
+++ b/interface/web/mail/lib/lang/pt_mail_relay_domain.lng
@@ -4,3 +4,6 @@ $wb['tab_relay_domain_title'] = 'Relay domain';
 $wb['server_id_txt'] = 'Servidor';
 $wb['active_txt'] = 'Activo';
 $wb['domain_txt'] = 'Domínio';
+$wb['domain_error_regex'] = 'Invalid domain name.';
+$wb['domain_error_empty'] = 'Domain is empty.';
+$wb['domain_error_unique'] = 'This Domain already exists as a mail relay domain on this server.';
diff --git a/interface/web/mail/lib/lang/ro_mail_relay_domain.lng b/interface/web/mail/lib/lang/ro_mail_relay_domain.lng
index 1e45e58915..e5296a9a9b 100644
--- a/interface/web/mail/lib/lang/ro_mail_relay_domain.lng
+++ b/interface/web/mail/lib/lang/ro_mail_relay_domain.lng
@@ -4,3 +4,6 @@ $wb['tab_relay_domain_title'] = 'Relay domain';
 $wb['server_id_txt'] = 'Server';
 $wb['active_txt'] = 'Active';
 $wb['domain_txt'] = 'Domain';
+$wb['domain_error_regex'] = 'Invalid domain name.';
+$wb['domain_error_empty'] = 'Domain is empty.';
+$wb['domain_error_unique'] = 'This Domain already exists as a mail relay domain on this server.';
diff --git a/interface/web/mail/lib/lang/ru_mail_relay_domain.lng b/interface/web/mail/lib/lang/ru_mail_relay_domain.lng
index ec4c288c71..a80c439da8 100644
--- a/interface/web/mail/lib/lang/ru_mail_relay_domain.lng
+++ b/interface/web/mail/lib/lang/ru_mail_relay_domain.lng
@@ -4,3 +4,6 @@ $wb['tab_relay_domain_title'] = 'Relay domain';
 $wb['server_id_txt'] = 'Сервер';
 $wb['active_txt'] = 'Активно';
 $wb['domain_txt'] = 'Домен';
+$wb['domain_error_regex'] = 'Некорректное имя домена.';
+$wb['domain_error_empty'] = 'Домен пустой.';
+$wb['domain_error_unique'] = 'This Domain already exists as a mail relay domain on this server.';
diff --git a/interface/web/mail/lib/lang/se_mail_relay_domain.lng b/interface/web/mail/lib/lang/se_mail_relay_domain.lng
index 4ce4c59de6..d1890449c4 100644
--- a/interface/web/mail/lib/lang/se_mail_relay_domain.lng
+++ b/interface/web/mail/lib/lang/se_mail_relay_domain.lng
@@ -4,3 +4,6 @@ $wb['tab_relay_domain_title'] = 'Relay domain';
 $wb['server_id_txt'] = 'Server';
 $wb['active_txt'] = 'Aktiv';
 $wb['domain_txt'] = 'Domän';
+$wb['domain_error_regex'] = 'Ogiltigt domännamn.';
+$wb['domain_error_empty'] = 'Domänfältet är tomt.';
+$wb['domain_error_unique'] = 'This Domain already exists as a mail relay domain on this server.';
diff --git a/interface/web/mail/lib/lang/sk_mail_relay_domain.lng b/interface/web/mail/lib/lang/sk_mail_relay_domain.lng
index dcdd0caaf5..f63a9fd663 100644
--- a/interface/web/mail/lib/lang/sk_mail_relay_domain.lng
+++ b/interface/web/mail/lib/lang/sk_mail_relay_domain.lng
@@ -4,3 +4,6 @@ $wb['tab_relay_domain_title'] = 'Relay domain';
 $wb['server_id_txt'] = 'Server';
 $wb['active_txt'] = 'Active';
 $wb['domain_txt'] = 'Doména';
+$wb['domain_error_regex'] = 'Invalid domain name.';
+$wb['domain_error_empty'] = 'Domain is empty.';
+$wb['domain_error_unique'] = 'This Domain already exists as a mail relay domain on this server.';
diff --git a/interface/web/mail/lib/lang/tr_mail_relay_domain.lng b/interface/web/mail/lib/lang/tr_mail_relay_domain.lng
index a834eaaa6d..cd4b38cf2a 100644
--- a/interface/web/mail/lib/lang/tr_mail_relay_domain.lng
+++ b/interface/web/mail/lib/lang/tr_mail_relay_domain.lng
@@ -4,3 +4,6 @@ $wb['tab_relay_domain_title'] = 'Relay domain';
 $wb['server_id_txt'] = 'Sunucu';
 $wb['active_txt'] = 'Etkin';
 $wb['domain_txt'] = 'Etki Alanı';
+$wb['domain_error_regex'] = 'Etki alanı geçersiz.';
+$wb['domain_error_empty'] = 'Etki alanı boş olamaz.';
+$wb['domain_error_unique'] = 'This Domain already exists as a mail relay domain on this server.';
-- 
GitLab