');
define('state_missing', '');
define('state_nomatch', "?");
define('state_optional', " 2");
if (isset($_SESSION['mailcow_cc_role']) && ($_SESSION['mailcow_cc_role'] == "admin"|| $_SESSION['mailcow_cc_role'] == "domainadmin")) {
  $alias_domains = array();
  if (isset($_GET['domain'])) {
    $domain_details = mailbox('get', 'domain_details', $_GET['domain']);
    if ($domain_details !== false) {
      $domain = $_GET['domain'];
      $alias_domains = array_merge($alias_domains, mailbox('get', 'alias_domains', $domain));
    }
    else {
      echo "No such domain in context";
      exit();
    }
  }
  $ch = curl_init('http://ip4.mailcow.email');
  curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
  curl_setopt($ch, CURLOPT_VERBOSE, false);
  curl_setopt($ch, CURLOPT_HEADER, false);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 3);
  $ip = curl_exec($ch);
  curl_close($ch);
  $ch = curl_init('http://ip6.mailcow.email');
  curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V6);
  curl_setopt($ch, CURLOPT_VERBOSE, false);
  curl_setopt($ch, CURLOPT_HEADER, false);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 3);
  $ip6 = curl_exec($ch);
  curl_close($ch);
  $ptr = implode('.', array_reverse(explode('.', $ip))) . '.in-addr.arpa';
  if (!empty($ip6)) {
    $ip6_full = str_replace('::', str_repeat(':', 9-substr_count($ip6, ':')), $ip6);
    $ip6_full = str_replace('::', ':0:', $ip6_full);
    $ip6_full = str_replace('::', ':0:', $ip6_full);
    $ptr6 = '';
    foreach (explode(':', $ip6_full) as $part) {
      $ptr6 .= str_pad($part, 4, '0', STR_PAD_LEFT);
    }
    $ptr6 = implode('.', array_reverse(str_split($ptr6, 1))) . '.ip6.arpa';
  }
  $https_port = strpos($_SERVER['HTTP_HOST'], ':');
  if ($https_port === FALSE) {
    $https_port = 443;
  }
  else {
    $https_port = substr($_SERVER['HTTP_HOST'], $https_port+1);
  }
  if (!isset($autodiscover_config['sieve'])) {
    $autodiscover_config['sieve'] = array(
      'server' => $mailcow_hostname,
      'port' => array_pop(explode(':', getenv('SIEVE_PORT')))
    );
  }
  // Init records array
  $spf_link = 'SPF Record Syntax
';
  $dmarc_link = 'DMARC Assistant';
  $records = array();
  if ($_SESSION['mailcow_cc_role'] == "admin") {
    $records[] = array(
      $mailcow_hostname,
      'A',
      $ip
    );
    $records[] = array(
      $ptr,
      'PTR',
      $mailcow_hostname
    );
    if (!empty($ip6)) {
      $records[] = array(
        $mailcow_hostname,
        'AAAA',
        expand_ipv6($ip6)
      );
      $records[] = array(
        $ptr6,
        'PTR',
        $mailcow_hostname
      );
    }
    $records[] = array(
      '_25._tcp.' . $autodiscover_config['smtp']['server'],
      'TLSA',
      generate_tlsa_digest($autodiscover_config['smtp']['server'], 25, 1)
    );
  }
  $records[] = array(
    $domain,
    'MX',
    $mailcow_hostname
  );
  if (!in_array($domain, $alias_domains)) {
    $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_link,
    state_optional
  );
  $records[] = array(
    '_dmarc.' . $domain,
    'TXT',
    $dmarc_link,
    state_optional
  );
  if (!empty($dkim = dkim('details', $domain))) {
    $records[] = array(
      $dkim['dkim_selector'] . '._domainkey.' . $domain,
      'TXT',
      $dkim['dkim_txt']
    );
  }
  if (!in_array($domain, $alias_domains)) {
    $current_records = (array)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 = (array)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(
    'A' => DNS_A,
    'AAAA' => DNS_AAAA,
    'CNAME' => DNS_CNAME,
    'MX' => DNS_MX,
    'PTR' => DNS_PTR,
    'SRV' => DNS_SRV,
    'TXT' => DNS_TXT,
  );
  $data_field = array(
    'A' => 'ip',
    'AAAA' => 'ipv6',
    'CNAME' => 'target',
    'MX' => 'target',
    'PTR' => 'target',
    'SRV' => 'data',
    'TLSA' => 'data',
    'TXT' => 'txt',
  );
  ?>
  
| =$lang['diagnostics']['dns_records_name'];?> | =$lang['diagnostics']['dns_records_type'];?> | =$lang['diagnostics']['dns_records_data'];?> | =$lang['diagnostics']['dns_records_status'];?> | 
|---|---|---|---|
| %s | %s | %s | %s | 
    1 =$lang['diagnostics']['cname_from_a'];?>
    2 =$lang['diagnostics']['optional'];?>