190 lines
5.5 KiB
PHP
190 lines
5.5 KiB
PHP
<?php
|
|
/**
|
|
* List domains
|
|
* Check domains
|
|
* domains response
|
|
* zones locked
|
|
* slaves
|
|
*/
|
|
class Alternc_Diagnostic_Service_Dns
|
|
extends Alternc_Diagnostic_Service_Abstract
|
|
implements Alternc_Diagnostic_Service_Interface
|
|
{
|
|
public $name = "dns";
|
|
|
|
/** @var array */
|
|
protected $domainList;
|
|
|
|
/** @var array */
|
|
protected $zonesList;
|
|
|
|
|
|
/** var system_bind */
|
|
protected $bind;
|
|
const SECTION_LIST = "list";
|
|
const SECTION_HOST = "host";
|
|
const SECTION_NAMESERVERS = "nameservers";
|
|
const SECTION_ZONES = "zones";
|
|
const SECTION_ZONES_LOCKED = "zones_locked";
|
|
const SECTION_SLAVES = "slaves";
|
|
|
|
function run(){
|
|
|
|
/** @var m_dom */
|
|
global $dom;
|
|
|
|
$version = $this->service->version;
|
|
if( $version < 3.2 ) {
|
|
$this->bind = new system_bind(array(
|
|
"zone_file_directory" => "/var/alternc/bind/zones/"));
|
|
$this->domainList = $this->get_domain_all_summary();
|
|
}else{
|
|
$this->bind = new system_bind();
|
|
$this->domainList = $dom->get_domain_all_summary();
|
|
}
|
|
|
|
// Attempts to retrieve zone list
|
|
$this->zonesList = $this->getZonesList();
|
|
|
|
// Writes the dns slaves
|
|
$this->writeSectionData (self::SECTION_SLAVES,$this->getSlaves());
|
|
|
|
// Writes the domains list
|
|
$this->writeSectionData (self::SECTION_LIST,$this->domainList);
|
|
|
|
// Writes the domains hosts
|
|
$this->writeSectionData (self::SECTION_HOST, $this->getHosts());
|
|
|
|
// Writes the domains nameservers
|
|
$this->writeSectionData (self::SECTION_NAMESERVERS,$this->getNameservers());
|
|
|
|
// Writes the domains zones
|
|
$this->writeSectionData (self::SECTION_ZONES,$this->zonesList);
|
|
|
|
// Writes the domains zones locked
|
|
$this->writeSectionData (self::SECTION_ZONES_LOCKED,$this->getZonesLocked());
|
|
|
|
// Writes the domains zones with custom records
|
|
$this->writeSectionData (self::SECTION_ZONES_LOCKED,$this->getZonesCustomRecords());
|
|
|
|
return $this->data;
|
|
}
|
|
|
|
/**
|
|
* Local override if not available (1.0)
|
|
* @return array
|
|
*/
|
|
function get_domain_all_summary() {
|
|
global $db, $err;
|
|
$res = array();
|
|
$db->query("SELECT domaine, gesdns, gesmx, dns_action FROM domaines ORDER BY domaine");
|
|
while ($db->next_record()) {
|
|
$res[$db->f("domaine")] = array(
|
|
"gesdns" => $db->f("gesdns"),
|
|
"gesmx" => $db->f("gesmx"),
|
|
"dns_action" => $db->f("dns_action"),
|
|
);
|
|
}
|
|
return $res;
|
|
}
|
|
|
|
/**
|
|
* Lists domains `host $DOMAIN` data
|
|
* @return array
|
|
*/
|
|
function getHosts(){
|
|
$resultArray = array();
|
|
foreach ($this->domainList as $domain => $domainInfo) {
|
|
try{
|
|
$resultArray[$domain] = $this->execCmd("host {$domain}");
|
|
}catch( \Exception $e){
|
|
echo $e->getMessage()."\n";
|
|
}
|
|
}
|
|
return $resultArray;
|
|
}
|
|
|
|
/**
|
|
* Lists domains NS
|
|
*
|
|
* @return array
|
|
*/
|
|
function getNameservers(){
|
|
$resultArray = array();
|
|
foreach ($this->domainList as $domain => $domainInfo) {
|
|
try{
|
|
$resultArray[$domain] = $this->execCmd("dig NS {$domain} +short");
|
|
}catch( \Exception $e){
|
|
echo $e->getMessage()."\n";
|
|
}
|
|
}
|
|
return $resultArray;
|
|
}
|
|
|
|
/**
|
|
* Lists zones content
|
|
*
|
|
* @return array
|
|
*/
|
|
function getZonesList(){
|
|
$resultArray = array();
|
|
foreach ($this->domainList as $domain => $domainInfo) {
|
|
try{
|
|
$resultArray[$domain] = $this->bind->get_zone_file($domain);
|
|
}catch( \Exception $e){
|
|
echo $e->getMessage()."\n";
|
|
}
|
|
}
|
|
return $resultArray;
|
|
}
|
|
|
|
/**
|
|
* Lists which domains zones are locked
|
|
*
|
|
* @return array
|
|
*/
|
|
function getZonesLocked(){
|
|
$resultArray = array();
|
|
foreach ($this->domainList as $domain => $domainInfo) {
|
|
try{
|
|
$resultArray[$domain] = $this->bind->is_locked($domain);
|
|
}catch( \Exception $e){
|
|
echo $e->getMessage()."\n";
|
|
}
|
|
}
|
|
return $resultArray;
|
|
}
|
|
|
|
/**
|
|
* Lists which domains zones have custom records
|
|
*
|
|
* @return array
|
|
*/
|
|
function getZonesCustomRecords(){
|
|
$resultArray = array();
|
|
$regexp = ";;; END ALTERNC AUTOGENERATE CONFIGURATION\n(.+\w+.+)";
|
|
foreach ($this->zonesList as $domain => $zone) {
|
|
$is_custom = false;
|
|
try{
|
|
if(preg_match("/$regexp/ms", $zone, $matches)){
|
|
$is_custom = $matches[1];
|
|
}
|
|
}catch( \Exception $e){
|
|
echo $e->getMessage()."\n";
|
|
}
|
|
$resultArray[$domain] = $is_custom;
|
|
}
|
|
return $resultArray;
|
|
}
|
|
|
|
/**
|
|
* Lists servers DNS slaves accounts
|
|
*
|
|
* @return array
|
|
*/
|
|
function getSlaves(){
|
|
return $this->dom->enum_slave_account();
|
|
}
|
|
|
|
}
|