Add multistack configuration to Bind nameserver, fixes #585
This commit is contained in:
committed by
Michael Kaufmann (d00p)
parent
af899c290f
commit
0d3daace49
@@ -92,7 +92,7 @@ class bind
|
||||
$known_filenames = array();
|
||||
|
||||
$bindconf_file = '# ' . $this->settings['system']['bindconf_directory'] . 'froxlor_bind.conf' . "\n" . '# Created ' . date('d.m.Y H:i') . "\n" . '# Do NOT manually edit this file, all changes will be deleted after the next domain change at the panel.' . "\n" . "\n";
|
||||
$result_domains = $this->db->query("SELECT `d`.`id`, `d`.`domain`, `d`.`iswildcarddomain`, `d`.`customerid`, `d`.`zonefile`, `d`.`bindserial`, `d`.`dkim`, `d`.`dkim_id`, `d`.`dkim_pubkey`, `d`.`wwwserveralias`, `ip`.`ip`, `c`.`loginname`, `c`.`guid` FROM `" . TABLE_PANEL_DOMAINS . "` `d` LEFT JOIN `" . TABLE_PANEL_CUSTOMERS . "` `c` USING(`customerid`) LEFT JOIN `" . TABLE_PANEL_IPSANDPORTS . "` AS `ip` ON(`d`.`ipandport`=`ip`.`id`) WHERE `d`.`isbinddomain` = '1' ORDER BY `d`.`domain` ASC");
|
||||
$result_domains = $this->db->query("SELECT `d`.`id`, `d`.`domain`, `d`.`iswildcarddomain`, `d`.`wwwserveralias`, `d`.`customerid`, `d`.`zonefile`, `d`.`bindserial`, `d`.`dkim`, `d`.`dkim_id`, `d`.`dkim_pubkey`, `c`.`loginname`, `c`.`guid` FROM `" . TABLE_PANEL_DOMAINS . "` `d` LEFT JOIN `" . TABLE_PANEL_CUSTOMERS . "` `c` USING(`customerid`) WHERE `d`.`isbinddomain` = '1' ORDER BY `d`.`domain` ASC");
|
||||
|
||||
while($domain = $this->db->fetch_array($result_domains))
|
||||
{
|
||||
@@ -179,17 +179,23 @@ class bind
|
||||
|
||||
protected function generateZone($domain)
|
||||
{
|
||||
if(filter_var($domain['ip'], FILTER_VALIDATE_IP, FILTER_FLAG_IPV4))
|
||||
{
|
||||
$ip_a_record = 'A ' . $domain['ip'];
|
||||
}
|
||||
elseif(filter_var($domain['ip'], FILTER_VALIDATE_IP, FILTER_FLAG_IPV6))
|
||||
{
|
||||
$ip_a_record = 'AAAA ' . $domain['ip'];
|
||||
}
|
||||
else
|
||||
{
|
||||
return '';
|
||||
/** Array to save all ips needed in the records (already including IN A/AAAA */
|
||||
$ip_a_records = array();
|
||||
/** Array to save DNS records */
|
||||
$records = array();
|
||||
|
||||
$result_ip = $this->db->query("SELECT `p`.`ip` AS `ip` FROM `".TABLE_PANEL_IPSANDPORTS."` `p`, `".TABLE_DOMAINTOIP."` `di` WHERE `di`.`id_domain` = '$domain[id]' AND `p`.`id` = `di`.`id_ipandports` GROUP BY `p`.`ip`;");
|
||||
|
||||
while ($ip = $this->db->fetch_array($result_ip)) {
|
||||
|
||||
if(filter_var($ip['ip'], FILTER_VALIDATE_IP, FILTER_FLAG_IPV4))
|
||||
$ip_a_records[] = "A $ip[ip]";
|
||||
|
||||
elseif(filter_var($ip['ip'], FILTER_VALIDATE_IP, FILTER_FLAG_IPV6))
|
||||
$ip_a_records[] = "AAAA $ip[ip]";
|
||||
|
||||
else
|
||||
return ";Error in at least one IP Adress ($ip[ip]), could not create zonefile!";
|
||||
}
|
||||
|
||||
$date = date('Ymd');
|
||||
@@ -223,12 +229,12 @@ class bind
|
||||
if(count($this->mxservers) == 0)
|
||||
{
|
||||
$zonefile.= '@ IN MX 10 mail' . "\n";
|
||||
$zonefile.= 'mail IN ' . $ip_a_record . "\n";
|
||||
$records[] = 'mail';
|
||||
if($domain['iswildcarddomain'] != '1')
|
||||
{
|
||||
$zonefile.= 'imap IN ' . $ip_a_record . "\n";
|
||||
$zonefile.= 'smtp IN ' . $ip_a_record . "\n";
|
||||
$zonefile.= 'pop3 IN ' . $ip_a_record . "\n";
|
||||
$records[] = 'imap';
|
||||
$records[] = 'smtp';
|
||||
$records[] = 'pop3';
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -240,12 +246,12 @@ class bind
|
||||
|
||||
if($this->settings['system']['dns_createmailentry'] == '1')
|
||||
{
|
||||
$zonefile.= 'mail IN ' . $ip_a_record . "\n";
|
||||
$records[] = 'mail';
|
||||
if($domain['iswildcarddomain'] != '1')
|
||||
{
|
||||
$zonefile.= 'imap IN ' . $ip_a_record . "\n";
|
||||
$zonefile.= 'smtp IN ' . $ip_a_record . "\n";
|
||||
$zonefile.= 'pop3 IN ' . $ip_a_record . "\n";
|
||||
$records[] = 'imap';
|
||||
$records[] = 'smtp';
|
||||
$records[] = 'pop3';
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -286,37 +292,34 @@ class bind
|
||||
}
|
||||
}
|
||||
|
||||
$zonefile.= '@ IN ' . $ip_a_record . "\n";
|
||||
$zonefile.= 'www IN ' . $ip_a_record . "\n";
|
||||
$records[] = '@';
|
||||
$records[] = 'www';
|
||||
|
||||
|
||||
if($domain['iswildcarddomain'] == '1')
|
||||
{
|
||||
$zonefile.= '* IN ' . $ip_a_record . "\n";
|
||||
$records[] = '*';
|
||||
}
|
||||
|
||||
$subdomains = $this->db->query('SELECT `d`.`domain`, `ip`.`ip` AS `ip` FROM `' . TABLE_PANEL_DOMAINS . '` `d`, `' . TABLE_PANEL_IPSANDPORTS . '` `ip` WHERE `parentdomainid`=\'' . $domain['id'] . '\' AND `d`.`ipandport`=`ip`.`id`');
|
||||
$subdomains = $this->db->query("SELECT `domain` FROM `".TABLE_PANEL_DOMAINS."` WHERE `parentdomainid` = '$domain[id]';");
|
||||
|
||||
while($subdomain = $this->db->fetch_array($subdomains))
|
||||
{
|
||||
if(filter_var($subdomain['ip'], FILTER_VALIDATE_IP, FILTER_FLAG_IPV4))
|
||||
{
|
||||
$zonefile.= str_replace('.' . $domain['domain'], '', $subdomain['domain']) . ' IN A ' . $subdomain['ip'] . "\n";
|
||||
|
||||
/* Check whether to add a www.-prefix */
|
||||
if($domain['wwwserveralias'] == '1')
|
||||
{
|
||||
$zonefile.= str_replace('www.' . $domain['domain'], '', $subdomain['domain']) . ' IN A ' . $subdomain['ip'] . "\n";
|
||||
}
|
||||
// Listing domains is enough as there currently is no support for choosing
|
||||
// different ips for a subdomain => use same IPs as toplevel
|
||||
$records[] = str_replace('.' . $domain['domain'], '', $subdomain['domain']);
|
||||
|
||||
// Check whether to add a www.-prefix
|
||||
if ($domain['wwwserveralias'] == '1') {
|
||||
$records[] = str_replace('.' . $domain['domain'], '', $subdomain['domain']);
|
||||
}
|
||||
elseif(filter_var($domain['ip'], FILTER_VALIDATE_IP, FILTER_FLAG_IPV6))
|
||||
{
|
||||
$zonefile.= str_replace('.' . $domain['domain'], '', $subdomain['domain']) . ' IN AAAA ' . $subdomain['ip'] . "\n";
|
||||
}
|
||||
|
||||
/* Check whether to add a www.-prefix */
|
||||
if($domain['wwwserveralias'] == '1')
|
||||
{
|
||||
$zonefile.= str_replace('www.' . $domain['domain'], '', $subdomain['domain']) . ' IN AAAA ' . $subdomain['ip'] . "\n";
|
||||
}
|
||||
// Create DNS-Records for every name we have saved
|
||||
foreach ($records as $record) {
|
||||
// we create an entry for every ip we have saved
|
||||
foreach ($ip_a_records as $ip_a_record) {
|
||||
$zonefile.= $record . "\tIN\t" . $ip_a_record . "\n";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user