From 2cb1563f63386b35a69e460051aa9b4a2851d104 Mon Sep 17 00:00:00 2001 From: ftimme <ft@falkotimme.com> Date: Wed, 30 May 2012 07:30:44 -0400 Subject: [PATCH] - Added (clickable) placeholders to client messaging function. - Added check so that the client password isn't inserted into the message (for security reasons). --- server/mods-available/dns_module.inc.php | 88 +++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 86 insertions(+), 2 deletions(-) diff --git a/server/mods-available/dns_module.inc.php b/server/mods-available/dns_module.inc.php index 79b0e5b..01c4526 100644 --- a/server/mods-available/dns_module.inc.php +++ b/server/mods-available/dns_module.inc.php @@ -35,6 +35,9 @@ var $actions_available = array( 'dns_soa_insert', 'dns_soa_update', 'dns_soa_delete', + 'dns_slave_insert', + 'dns_slave_update', + 'dns_slave_delete', 'dns_rr_insert', 'dns_rr_update', 'dns_rr_delete'); @@ -44,7 +47,11 @@ function onInstall() { global $conf; - return true; + if($conf['services']['dns'] == true) { + return true; + } else { + return false; + } } @@ -73,7 +80,13 @@ */ $app->modules->registerTableHook('dns_soa',$this->module_name,'process'); + $app->modules->registerTableHook('dns_slave',$this->module_name,'process'); $app->modules->registerTableHook('dns_rr',$this->module_name,'process'); + + + // Register service + $app->services->registerService('bind','dns_module','restartBind'); + $app->services->registerService('powerdns','dns_module','restartPowerDNS'); } @@ -91,6 +104,11 @@ if($action == 'u') $app->plugins->raiseEvent('dns_soa_update',$data); if($action == 'd') $app->plugins->raiseEvent('dns_soa_delete',$data); break; + case 'dns_slave': + if($action == 'i') $app->plugins->raiseEvent('dns_slave_insert',$data); + if($action == 'u') $app->plugins->raiseEvent('dns_slave_update',$data); + if($action == 'd') $app->plugins->raiseEvent('dns_slave_delete',$data); + break; case 'dns_rr': if($action == 'i') $app->plugins->raiseEvent('dns_rr_insert',$data); if($action == 'u') $app->plugins->raiseEvent('dns_rr_update',$data); @@ -99,7 +117,73 @@ } // end switch } // end function + + function restartBind($action = 'restart') { + global $app,$conf; + + $daemon = ''; + if(is_file($conf['init_scripts'] . '/' . 'bind9')) { + $daemon = 'bind9'; + } else { + $daemon = 'named'; + } + + if($action == 'restart') { + exec($conf['init_scripts'] . '/' . $daemon . ' restart'); + } else { + exec($conf['init_scripts'] . '/' . $daemon . ' reload'); + } + + } + + function restartPowerDNS($action = 'restart') { + global $app,$conf; + + $app->log("restartPDNS called.",LOGLEVEL_DEBUG); + +/** Since PowerDNS does not currently allow to limit AXFR for specific zones to specific +* IP addresses, we create a list of IPs allowed of AXFR transfers from our PowerDNS, +* however any of these IPs is allowed to AXFR transfer any of the zones we are masters +* for. +*/ + $tmps = $app->db->queryAllRecords("SELECT DISTINCT xfer FROM dns_soa WHERE active = 'Y' UNION SELECT DISTINCT xfer FROM dns_slave WHERE active = 'Y' "); + + //* Make sure the list is never empty + $options='127.0.0.1'; + foreach($tmps as $tmp) { + if (trim($tmp['xfer'])!='') { + if ($options=='') { + $options.=$tmp['xfer']; + } else { + $options=$options.",".$tmp['xfer']; + } + } + } + + //* Remove duplicate IPs from the array + $options = "allow-axfr-ips=".implode(",",array_unique(explode(",",$options))); + $app->log("".$options,LOGLEVEL_DEBUG); + +/** Not an ideal way to use a hardcoded path like that, but currently +* we have no way to find out where powerdns' configuration files are +* located, so we have to work on assumption. +*/ + file_put_contents('/etc/powerdns/pdns.d/pdns.ispconfig-axfr',$options."\n"); + + $daemon= ''; + if (is_file($conf['init_scripts'] . '/' . 'powerdns')) { + $daemon = 'powerdns'; + } else { + $daemon = 'pdns'; + } + + exec($conf['init_scripts'] . '/' . $daemon . ' restart'); + +// unset $tmps; + + } + } // end class -?> \ No newline at end of file +?> -- Gitblit v1.9.1