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
+ 2

diff --git a/data/web/inc/footer.inc.php b/data/web/inc/footer.inc.php index a082211b..eb419308 100644 --- a/data/web/inc/footer.inc.php +++ b/data/web/inc/footer.inc.php @@ -188,7 +188,7 @@ $(document).ready(function() { $.ajax({ method: 'get', url: '/inc/ajax/container_ctrl.php', - timeout: 3000, + timeout: 10000, data: { 'service': container, 'action': 'restart' diff --git a/data/web/inc/init_db.inc.php b/data/web/inc/init_db.inc.php index a69e1f3e..6c0ef937 100644 --- a/data/web/inc/init_db.inc.php +++ b/data/web/inc/init_db.inc.php @@ -3,7 +3,7 @@ function init_db_schema() { try { global $pdo; - $db_version = "29112017_1515"; + $db_version = "02012018_1515"; $stmt = $pdo->query("SHOW TABLES LIKE 'versions'"); $num_results = count($stmt->fetchAll(PDO::FETCH_ASSOC)); @@ -540,12 +540,13 @@ function init_db_schema() { "c_sn" => "VARCHAR(255)", "c_screenname" => "VARCHAR(255)", "c_l" => "VARCHAR(255)", - "c_mail" => "VARCHAR(255)", + "c_mail" => "TEXT", "c_o" => "VARCHAR(255)", "c_ou" => "VARCHAR(255)", "c_telephonenumber" => "VARCHAR(255)", "c_categories" => "VARCHAR(255)", - "c_component" => "VARCHAR(10) NOT NULL" + "c_component" => "VARCHAR(10) NOT NULL", + "c_hascertificate" => "INT4 DEFAULT 0" ), "keys" => array( "primary" => array( @@ -588,8 +589,8 @@ function init_db_schema() { "sogo_user_profile" => array( "cols" => array( "c_uid" => "VARCHAR(255) NOT NULL", - "c_defaults" => "TEXT", - "c_settings" => "TEXT" + "c_defaults" => "LONGTEXT", + "c_settings" => "LONGTEXT" ), "keys" => array( "primary" => array( diff --git a/data/web/js/mailbox.js b/data/web/js/mailbox.js index b8ee5548..1e08a4ee 100644 --- a/data/web/js/mailbox.js +++ b/data/web/js/mailbox.js @@ -58,6 +58,7 @@ $(document).ready(function() { // Log modal $('#dnsInfoModal').on('show.bs.modal', function(e) { var domain = $(e.relatedTarget).data('domain'); + $('.dns-modal-body').html('
'); $.ajax({ url: '/inc/ajax/dns_diagnostics.php', data: { domain: domain }, @@ -443,7 +444,7 @@ jQuery(function($){ {"sorted": true,"name":"alias_domain","title":lang.alias,"style":{"width":"250px"}}, {"name":"target_domain","title":lang.target_domain}, {"name":"active","filterable": false,"style":{"maxWidth":"50px","width":"70px"},"title":lang.active}, - {"name":"action","filterable": false,"sortable": false,"style":{"text-align":"right","maxWidth":"180px","width":"180px"},"type":"html","title":lang.action,"breakpoints":"xs sm"} + {"name":"action","filterable": false,"sortable": false,"style":{"text-align":"right","maxWidth":"250px","width":"250px"},"type":"html","title":lang.action,"breakpoints":"xs sm"} ], "empty": lang.empty, "rows": $.ajax({ @@ -458,6 +459,7 @@ jQuery(function($){ item.action = '
' + ' ' + lang.edit + '' + ' ' + lang.remove + '' + + ' DNS
' + ''; item.chkbox = ''; }); diff --git a/data/web/lang/lang.de.php b/data/web/lang/lang.de.php index 700be0c7..6d80d231 100644 --- a/data/web/lang/lang.de.php +++ b/data/web/lang/lang.de.php @@ -550,6 +550,8 @@ $lang['diagnostics']['dns_records_name'] = 'Name'; $lang['diagnostics']['dns_records_type'] = 'Typ'; $lang['diagnostics']['dns_records_data'] = 'Korrekte Daten'; $lang['diagnostics']['dns_records_status'] = 'Aktueller Status'; +$lang['diagnostics']['optional'] = 'Dieser Eintrag ist optional.'; +$lang['diagnostics']['cname_from_a'] = 'Wert abgeleitet von A/AAAA Eintrag. Wird unterstützt, sofern der Eintrag auf die korrekte Ressource zeigt.'; $lang['admin']['relay_from'] = "Absenderadresse"; $lang['admin']['relay_run'] = "Test durchführen"; $lang['admin']['customize'] = "Anpassung"; diff --git a/data/web/lang/lang.en.php b/data/web/lang/lang.en.php index 9c490dd6..ac108a5e 100644 --- a/data/web/lang/lang.en.php +++ b/data/web/lang/lang.en.php @@ -552,6 +552,9 @@ $lang['diagnostics']['dns_records_name'] = 'Name'; $lang['diagnostics']['dns_records_type'] = 'Type'; $lang['diagnostics']['dns_records_data'] = 'Correct Data'; $lang['diagnostics']['dns_records_status'] = 'Current State'; +$lang['diagnostics']['optional'] = 'This record is optional.'; +$lang['diagnostics']['cname_from_a'] = 'Value derived from A/AAAA record. This is supported as long as the record points to the correct resource.'; + $lang['admin']['relay_from'] = '"From:" address'; $lang['admin']['api_allow_from'] = "Allow API access from these IPs"; $lang['admin']['api_key'] = "API key";