diff --git a/automation/config.php b/automation/config.php new file mode 100644 index 0000000..8b938a1 --- /dev/null +++ b/automation/config.php @@ -0,0 +1,9 @@ + 'localhost', + 'mysql_port' => 3306, + 'mysql_database' => 'your_database_name', + 'mysql_username' => 'your_username', + 'mysql_password' => 'your_password', +]; \ No newline at end of file diff --git a/automation/zonegen.php b/automation/zonegen.php new file mode 100644 index 0000000..062c950 --- /dev/null +++ b/automation/zonegen.php @@ -0,0 +1,76 @@ +setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); +} catch (PDOException $e) { + die("Connection failed: " . $e->getMessage()); +} + +$timestamp = time(); +$ns1 = 'ns1.namingo.org'; +$ns2 = 'ns2.namingo.org'; + +$sth = $dbh->prepare("SELECT `id`,`tld` FROM `domain_tld`"); +$sth->execute(); + +while (list($id, $tld) = $sth->fetch(PDO::FETCH_NUM)) { + $tldRE = preg_quote($tld, '/'); + $outFile = fopen("/var/named/named{$tld}.zone", 'w') or print "Unable to open file '/var/named/named{$tld}.zone'.\n"; + fwrite($outFile, "\$TTL\t1H\n\@\tIN\tSOA\t{$ns1}.\tpostmaster{$tld}. (\n\t$timestamp\n\t3H\n\t1H\n\t1W\n\t1D\n\t)\n\n"); + fwrite($outFile, "\@\t1H\tIN\tNS\t{$ns1}.\n"); + fwrite($outFile, "\@\t1H\tIN\tNS\t{$ns2}.\n"); + + // Select all the hosts + $sth2 = $dbh->prepare("SELECT DISTINCT `domain`.`id`, `domain`.`name`, `domain`.`exdate`, `rgpstatus`, `domain`.`name` + FROM `domain` + WHERE `domain`.`tldid` = :id + AND ( + `domain`.`exdate` > NOW() + OR `rgpstatus` = 'pendingRestore' + ) + ORDER BY `domain`.`name`"); + $sth2->execute([':id' => $id]); + + while (list($did, $dname, $hname) = $sth2->fetch(PDO::FETCH_NUM)) { + $status_id = $dbh->query("SELECT `id` FROM `domain_status` WHERE `domain_id` = '$did' AND `status` LIKE '%Hold' LIMIT 1")->fetchColumn(); + if ($status_id) continue; + $dname = trim($dname, "$tldRE."); + $dname = '@' if ($dname == "$tld."); + $hname = trim($hname, "$tldRE."); + fwrite($outFile, "$dname\tIN\tNS\t$hname\n"); + } + + // Select the A and AAAA records + $sth2 = $dbh->prepare("SELECT `host`.`name`,`host`.`domain_id`,`host_addr`.`ip`,`host_addr`.`addr` + FROM `domain`,`host`,`host_addr` + WHERE `domain`.`tldid` = :id + AND `domain`.`id` = `host`.`domain_id` + AND `host`.`id` = `host_addr`.`host_id` + AND (`domain`.`exdate` > NOW() OR `rgpstatus` = 'pendingRestore') + ORDER BY `host`.`name`"); + $sth2->execute([':id' => $id]); + + while (list($hname, $did, $type, $addr) = $sth2->fetch(PDO::FETCH_NUM)) { + $status_id = $dbh->query("SELECT `id` FROM `domain_status` WHERE `domain_id` = '$did' AND `status` LIKE '%Hold' LIMIT 1")->fetchColumn(); + if ($status_id) continue; + $hname = trim($hname, "$tldRE."); + $hname = '@' if ($hname == "$tld."); + if ($type == 'v4') { + fwrite($outFile, "$hname\tIN\tA\t$addr\n"); + } else { + fwrite($outFile, "$hname\tIN\tAAAA\t$addr\n"); + } + } + + fwrite($outFile, "\n; EOF\n"); + fclose($outFile); +} + +exec("systemctl reload named.service", $output, $return_var); +if ($return_var != 0) { + print "Failed to reload named. $return_var \n"; +} \ No newline at end of file