tbrehm
2011-09-07 c719dc0b1dd696e0cd6b51f09ee13c8263375f7c
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
?>
?>