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 |   79 +++++++++++++++++++++++++++++++++++----
 1 files changed, 70 insertions(+), 9 deletions(-)

diff --git a/server/mods-available/dns_module.inc.php b/server/mods-available/dns_module.inc.php
index 72ae1df..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,11 +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');
 		
 	}
 	
@@ -95,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);
@@ -105,24 +119,71 @@
 	
 	
 	function restartBind($action = 'restart') {
-		global $app;
+		global $app,$conf;
 		
-		$command = '';
-		if(is_file('/etc/init.d/bind9')) {
-			$command = '/etc/init.d/bind9';
+		$daemon = '';
+		if(is_file($conf['init_scripts'] . '/' . 'bind9')) {
+			$daemon = 'bind9';
 		} else {
-			$command = '/etc/init.d/named';
+			$daemon = 'named';
 		}
 		
 		if($action == 'restart') {
-			exec($command.' restart');
+			exec($conf['init_scripts'] . '/' . $daemon . ' restart');
 		} else {
-			exec($command.' reload');
+			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