diff --git a/data/web/inc/ajax/dns_diagnostics.php b/data/web/inc/ajax/dns_diagnostics.php
index bd432726..0b29d253 100644
--- a/data/web/inc/ajax/dns_diagnostics.php
+++ b/data/web/inc/ajax/dns_diagnostics.php
@@ -9,6 +9,27 @@ define('state_optional', " 2");
if (isset($_SESSION['mailcow_cc_role']) && $_SESSION['mailcow_cc_role'] == "admin") {
+$domains = mailbox('get', 'domains');
+foreach(mailbox('get', 'domains') as $dn) {
+ $domains = array_merge($domains, mailbox('get', 'alias_domains', $dn));
+}
+
+if (isset($_GET['domain'])) {
+ if (is_valid_domain_name($_GET['domain'])) {
+ if (in_array($_GET['domain'], $domains)) {
+ $domain = $_GET['domain'];
+ }
+ else {
+ echo "No such domain in context";
+ die();
+ }
+ }
+ else {
+ echo "Invalid domain name";
+ die();
+ }
+}
+
$ch = curl_init('http://ip4.mailcow.email');
curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
curl_setopt($ch, CURLOPT_VERBOSE, false);
@@ -53,10 +74,6 @@ if (!empty($ip6)) {
$records[] = array($mailcow_hostname, 'AAAA', $ip6);
$records[] = array($ptr6, 'PTR', $mailcow_hostname);
}
-$domains = mailbox('get', 'domains');
-foreach(mailbox('get', 'domains') as $domain) {
- $domains = array_merge($domains, mailbox('get', 'alias_domains', $domain));
-}
if (!isset($autodiscover_config['sieve'])) {
$autodiscover_config['sieve'] = array('server' => $mailcow_hostname, 'port' => array_pop(explode(':', getenv('SIEVE_PORT'))));
@@ -71,50 +88,47 @@ $records[] = array('_' . $autodiscover_config['smtp']['tlsport'] . '._tcp.' . $a
$records[] = array('_' . $autodiscover_config['imap']['port'] . '._tcp.' . $autodiscover_config['imap']['server'], 'TLSA', generate_tlsa_digest($autodiscover_config['imap']['server'], $autodiscover_config['imap']['port']));
$records[] = array('_' . $autodiscover_config['pop3']['port'] . '._tcp.' . $autodiscover_config['pop3']['server'], 'TLSA', generate_tlsa_digest($autodiscover_config['pop3']['server'], $autodiscover_config['pop3']['port']));
$records[] = array('_' . $autodiscover_config['sieve']['port'] . '._tcp.' . $autodiscover_config['sieve']['server'], 'TLSA', generate_tlsa_digest($autodiscover_config['sieve']['server'], $autodiscover_config['sieve']['port'], 1));
+$records[] = array($domain, 'MX', $mailcow_hostname);
+$records[] = array('autodiscover.' . $domain, 'CNAME', $mailcow_hostname);
+$records[] = array('_autodiscover._tcp.' . $domain, 'SRV', $mailcow_hostname . ' ' . $https_port);
+$records[] = array('autoconfig.' . $domain, 'CNAME', $mailcow_hostname);
+$records[] = array($domain, 'TXT', 'SPF Record Syntax', state_optional);
+$records[] = array('_dmarc.' . $domain, 'TXT', 'DMARC Assistant', state_optional);
-foreach ($domains as $domain) {
- $records[] = array($domain, 'MX', $mailcow_hostname);
- $records[] = array('autodiscover.' . $domain, 'CNAME', $mailcow_hostname);
- $records[] = array('_autodiscover._tcp.' . $domain, 'SRV', $mailcow_hostname . ' ' . $https_port);
- $records[] = array('autoconfig.' . $domain, 'CNAME', $mailcow_hostname);
- $records[] = array($domain, 'TXT', 'SPF Record Syntax', state_optional);
- $records[] = array('_dmarc.' . $domain, 'TXT', 'DMARC Assistant', state_optional);
+if (!empty($dkim = dkim('details', $domain))) {
+ $records[] = array($dkim['dkim_selector'] . '._domainkey.' . $domain, 'TXT', $dkim['dkim_txt']);
+}
- if (!empty($dkim = dkim('details', $domain))) {
- $records[] = array($dkim['dkim_selector'] . '._domainkey.' . $domain, 'TXT', $dkim['dkim_txt']);
+$current_records = dns_get_record('_pop3._tcp.' . $domain, DNS_SRV);
+if (count($current_records) == 0 || $current_records[0]['target'] != '') {
+ if ($autodiscover_config['pop3']['tlsport'] != '110') {
+ $records[] = array('_pop3._tcp.' . $domain, 'SRV', $autodiscover_config['pop3']['server'] . ' ' . $autodiscover_config['pop3']['tlsport']);
}
-
- $current_records = dns_get_record('_pop3._tcp.' . $domain, DNS_SRV);
- if (count($current_records) == 0 || $current_records[0]['target'] != '') {
- if ($autodiscover_config['pop3']['tlsport'] != '110') {
- $records[] = array('_pop3._tcp.' . $domain, 'SRV', $autodiscover_config['pop3']['server'] . ' ' . $autodiscover_config['pop3']['tlsport']);
- }
- } else {
- $records[] = array('_pop3._tcp.' . $domain, 'SRV', '. 0');
- }
- $current_records = dns_get_record('_pop3s._tcp.' . $domain, DNS_SRV);
- if (count($current_records) == 0 || $current_records[0]['target'] != '') {
- if ($autodiscover_config['pop3']['port'] != '995') {
- $records[] = array('_pop3s._tcp.' . $domain, 'SRV', $autodiscover_config['pop3']['server'] . ' ' . $autodiscover_config['pop3']['port']);
- }
- } else {
- $records[] = array('_pop3s._tcp.' . $domain, 'SRV', '. 0');
- }
- if ($autodiscover_config['imap']['tlsport'] != '143') {
- $records[] = array('_imap._tcp.' . $domain, 'SRV', $autodiscover_config['imap']['server'] . ' ' . $autodiscover_config['imap']['tlsport']);
- }
- if ($autodiscover_config['imap']['port'] != '993') {
- $records[] = array('_imaps._tcp.' . $domain, 'SRV', $autodiscover_config['imap']['server'] . ' ' . $autodiscover_config['imap']['port']);
- }
- if ($autodiscover_config['smtp']['tlsport'] != '587') {
- $records[] = array('_submission._tcp.' . $domain, 'SRV', $autodiscover_config['smtp']['server'] . ' ' . $autodiscover_config['smtp']['tlsport']);
- }
- if ($autodiscover_config['smtp']['port'] != '465') {
- $records[] = array('_smtps._tcp.' . $domain, 'SRV', $autodiscover_config['smtp']['server'] . ' ' . $autodiscover_config['smtp']['port']);
- }
- if ($autodiscover_config['sieve']['port'] != '4190') {
- $records[] = array('_sieve._tcp.' . $domain, 'SRV', $autodiscover_config['sieve']['server'] . ' ' . $autodiscover_config['sieve']['port']);
+} else {
+ $records[] = array('_pop3._tcp.' . $domain, 'SRV', '. 0');
+}
+$current_records = dns_get_record('_pop3s._tcp.' . $domain, DNS_SRV);
+if (count($current_records) == 0 || $current_records[0]['target'] != '') {
+ if ($autodiscover_config['pop3']['port'] != '995') {
+ $records[] = array('_pop3s._tcp.' . $domain, 'SRV', $autodiscover_config['pop3']['server'] . ' ' . $autodiscover_config['pop3']['port']);
}
+} else {
+ $records[] = array('_pop3s._tcp.' . $domain, 'SRV', '. 0');
+}
+if ($autodiscover_config['imap']['tlsport'] != '143') {
+ $records[] = array('_imap._tcp.' . $domain, 'SRV', $autodiscover_config['imap']['server'] . ' ' . $autodiscover_config['imap']['tlsport']);
+}
+if ($autodiscover_config['imap']['port'] != '993') {
+ $records[] = array('_imaps._tcp.' . $domain, 'SRV', $autodiscover_config['imap']['server'] . ' ' . $autodiscover_config['imap']['port']);
+}
+if ($autodiscover_config['smtp']['tlsport'] != '587') {
+ $records[] = array('_submission._tcp.' . $domain, 'SRV', $autodiscover_config['smtp']['server'] . ' ' . $autodiscover_config['smtp']['tlsport']);
+}
+if ($autodiscover_config['smtp']['port'] != '465') {
+ $records[] = array('_smtps._tcp.' . $domain, 'SRV', $autodiscover_config['smtp']['server'] . ' ' . $autodiscover_config['smtp']['port']);
+}
+if ($autodiscover_config['sieve']['port'] != '4190') {
+ $records[] = array('_sieve._tcp.' . $domain, 'SRV', $autodiscover_config['sieve']['server'] . ' ' . $autodiscover_config['sieve']['port']);
}
$record_types = array(
@@ -205,12 +219,11 @@ foreach ($records as $record) {
stripos($current['txt'], 'v=dmarc') === 0 &&
stripos($current['host'], '_dmarc') === 0) {
$current['txt'] = str_replace(' ', '', $current['txt']);
- $state = state_optional . '
' . $current[$data_field[$current['type']]];
+ $state = $current[$data_field[$current['type']]] . state_optional;
}
elseif ($current['type'] == 'TXT' &&
- stripos($current['host'], '_dmarc') !== 0 &&
stripos($current['txt'], 'v=spf') === 0) {
- $state = state_optional . '
' . $current[$data_field[$current['type']]];
+ $state = $current[$data_field[$current['type']]] . state_optional;
}
elseif ($current['type'] == 'TXT' &&
stripos($current['txt'], 'v=dkim') === 0) {
@@ -251,12 +264,12 @@ foreach ($records as $record) {
- 1 Found A/AAAA record instead of a CNAME. This is supported as long as the A records destination points to the correct resource.
- 2 This record is optional.
+ 1 =$lang['diagnostics']['cname_from_a'];?>
+ 2 =$lang['diagnostics']['optional'];?>