<?php

if(isset($_SERVER['REMOTE_ADDR'])) die();
include_once('../../global.php');

$Serial = date('Ymds', time());
$MinimumTime = 7200;
$RetryTime = 7200;
$ExpireTime = 2419200;
$RefreshTime = 28800;
$MinimumTime = 10800;
$TTL = 86400;
$BaseDir = '/var/named/internal';
$MailServer = 'centrala';

function GenerateDNS($DNS)
{
  $Output = '$ORIGIN '.$DNS['Domain'].'.'."\n".
  '$TTL '.$DNS['TTL']."\n".
  $DNS['Domain'].".\tIN\tSOA\t".$DNS['NameServer'][0].".\troot.".$DNS['Domain'].".  (\n".
  "\t\t\t".$DNS['Serial']."\t; serial\n".
  "\t\t\t".$DNS['Refresh']."\t; refresh\n".
  "\t\t\t".$DNS['Retry']."\t; retry\n".
  "\t\t\t".$DNS['Expire']."\t; expire\n".
  "\t\t\t".$DNS['Minimum']."\t; minimum\n".
  "\t\t\t)\n";
  foreach($DNS['NameServer'] as $NameServer)
  {
    $Output .= "\t\tIN\tNS\t".strtolower($NameServer).".\n";
  }
  $Output .= "\t\t\tTXT\t".'"'.$DNS['Description'].'"'."\n";

  // Mail server records
  $Priority = 10;
  foreach($DNS['MailServer'] as $MailServer)
  {
    $Output .="\t\t\tMX\t".$Priority." ".strtolower($MailServer).".\n";
    $Priority += 10;
  }
  $Output .= "; SPF\n".
    $DNS['Domain'].".\tIN\tTXT\t\"v=spf1 mx -all\"\n".
    $DNS['Domain'].".\tIN\tSPF\t\"v=spf1 mx -all\"\n";
  foreach($DNS['MailServer'] as $MailServer)
  {
    $Output .= $MailServer.".\tIN\tTXT\t\"v=spf1 a -all\"\n".
    $MailServer.".\tIN\tSPF\t\"v=spf1 a -all\"\n";
  }

  // Host list
  foreach($DNS['Host'] as $Host)
  {
    if(strlen($Host['Name']) < 8) $Host['Name'] .= "\t";
    $Output .= strtolower($Host['Name'])."\tIN\tA\t".$Host['Address']."\n";
  }

  // Alias list
  foreach($DNS['Alias'] as $Alias)
  {
    if(strlen($Alias['Name']) < 8) $Alias['Name'] .= "\t";
    $Output .= strtolower($Alias['Name'])."\tIN\tCNAME\t".strtolower($Alias['Target'])."\n";
  }

  $File = fopen($DNS['BaseDir'].$DNS['Domain'].'.zone', 'w');
  fputs($File, $Output);
  fclose($File);

  // Generate reverse DNS records
  foreach($DNS['Network'] as $Network)
  {
    $Parts = explode('.', $Network);
    $Output = // '$ORIGIN '.$Parts[2].'.'.$Parts[1].'.'.$Parts[0].'.in-addr.arpa'."\n".
    '$TTL '.$DNS['TTL']."\n".
    "@\tIN\tSOA\t".$DNS['NameServer'][0].".\troot.".$DNS['Domain'].".  (\n".
    "\t\t\t\t".$DNS['Serial']."\t; serial\n".
    "\t\t\t\t".$DNS['Refresh']."\t; refresh\n".
    "\t\t\t\t".$DNS['Retry']."\t; retry\n".
    "\t\t\t\t".$DNS['Expire']."\t; expire\n".
    "\t\t\t\t".$DNS['Minimum']."\t; minimum\n".
    "\t\t\t\t)\n";
    foreach($DNS['ReverseNameServer'] as $NameServer)
    {
      if(substr($NameServer, -strlen($DNS['Domain'])) == $DNS['Domain'])
        $Output .= "@\tIN\tNS\t".$NameServer.".\n";
      else $Output .= "\tIN\tNS\t".$NameServer.".\n";
    }
    foreach($DNS['Host'] as $Host)
    if(substr($Host['Address'], 0, strlen($Network)) == $Network)
    {
      $AddressParts = explode('.', $Host['Address']);
      $Host['Name'] = strtolower($Host['Name']);
      $Output .= $AddressParts[3].'.'.$AddressParts[2]."\tIN\tPTR\t".$Host['Name'].".".$DNS['Domain'].".\n";
    }
    $File = fopen($DNS['BaseDir'].$Parts[1].'.'.$Parts[0].'.in-addr.arpa.zone', 'w+');
    fputs($File, $Output);
    fclose($File);
  }
}

// === Hovnet ===
$BaseDomain = 'hovnet.czf';
$HovnetDNS = array(
  'Domain' => $BaseDomain,
  'Serial' => date('Ymds', time()),
  'Refresh' => 28800,
  'Expire' => 2419200,
  'Retry' => 7200,
  'Minimum' => 10800,
  'TTL' => 86400,
  'Description' => 'Hovnet',
  'BaseDir' => $BaseDir,
  'MailServer' => array('centrala.'.$BaseDomain),
  'NameServer' => array('centrala.zdechovnet.czf'),
  'ReverseNameServer' => array('centrala.zdechovnet.czf'),
  'Host' => array(),
  'Alias' => array(),
  'Network' => array('10.145'),
);

$HovnetDNSServer = '10.145.130.9';

for($I = 0 * 256; $I < 93*256; $I++)
{
  $Output = array();
  $TestAddress = Int32ToIPv4(IPv4ToInt32('192.168.0.0') + $I);
  $TranslatedAddress = Int32ToIPv4(IPv4ToInt32('10.145.128.0') + $I);
  echo('.');
  exec('dig @'.$HovnetDNSServer.' -x '.$TestAddress.' +short', $Output);
  if($Output[0] != '')
  {
    echo("\n".$TestAddress.'='.$Output[0]);
    $Item = array('Name' => substr($Output[0], 0, -11), 'Address' => $TranslatedAddress);
    $HovnetDNS['Host'][] = $Item;
  }
}

GenerateDNS($HovnetDNS);

?>
