plugins->registerEvent('server_insert','network_settings_plugin','insert'); $app->plugins->registerEvent('server_update','network_settings_plugin','update'); $app->plugins->registerEvent('server_ip_insert','network_settings_plugin','insert'); $app->plugins->registerEvent('server_ip_update','network_settings_plugin','update'); } function insert($event_name,$data) { global $app, $conf; $this->update($event_name,$data); } // The purpose of this plugin is to rewrite the main.cf file function update($event_name,$data) { global $app, $conf; // get the config $app->uses("getconf"); $server_config = $app->getconf->get_server_config($conf["server_id"], 'server'); // Configure the debian network card settings if(is_file('/etc/debian_version') && $server_config['auto_network_configuration'] == 'y') { copy('/etc/network/interfaces','/etc/network/interfaces~'); $app->load('tpl'); $network_tpl = new tpl(); $network_tpl->newTemplate("debian_network_interfaces.master"); $network_tpl->setVar('ip_address',$server_config["ip_address"]); $network_tpl->setVar('netmask',$server_config["netmask"]); $network_tpl->setVar('gateway',$server_config["gateway"]); $network_tpl->setVar('broadcast',$this->broadcast($server_config["ip_address"],$server_config["netmask"])); $network_tpl->setVar('network',$this->network($server_config["ip_address"],$server_config["netmask"])); $records = $app->db->queryAllRecords("SELECT ip_address FROM server_ip WHERE server_id = ".intval($conf["server_id"])); $ip_records = array(); $additionl_ip_records = 0; $n = 0; if(is_array($records)) { foreach($records as $rec) { $ip_records[] = array( 'id' => $n, 'ip_address' => $rec['ip_address'], 'netmask' => $server_config["netmask"], 'gateway' => $server_config["gateway"], 'broadcast' => $this->broadcast($rec['ip_address'],$server_config["netmask"]), 'network' => $this->network($rec['ip_address'],$server_config["netmask"]) ); $additionl_ip_records = 1; $n++; } } $network_tpl->setVar('additionl_ip_records',$additionl_ip_records); $network_tpl->setLoop('interfaces',$ip_records); file_put_contents('/etc/network/interfaces',$network_tpl->grab()); unset($network_tpl); $app->log("Changed Network settings",LOGLEVEL_DEBUG); exec('/etc/init.d/networking force-reload'); } else { if(is_file('/etc/debian_version')) { $app->log("Network configuration disabled in server settings.",LOGLEVEL_WARN); } else { $app->log("Network configuration not available for this linux distribution.",LOGLEVEL_DEBUG); } } } function network($ip, $netmask){ $netmask = $this->netmask($netmask); list($f1,$f2,$f3,$f4) = explode(".", $netmask); $netmask_bin = str_pad(decbin($f1),8,"0",STR_PAD_LEFT).str_pad(decbin($f2),8,"0",STR_PAD_LEFT).str_pad(decbin($f3),8,"0",STR_PAD_LEFT).str_pad(decbin($f4),8,"0",STR_PAD_LEFT); list($f1,$f2,$f3,$f4) = explode(".", $ip); $ip_bin = str_pad(decbin($f1),8,"0",STR_PAD_LEFT).str_pad(decbin($f2),8,"0",STR_PAD_LEFT).str_pad(decbin($f3),8,"0",STR_PAD_LEFT).str_pad(decbin($f4),8,"0",STR_PAD_LEFT); for($i=0;$i<32;$i++){ $network_bin .= substr($netmask_bin,$i,1) * substr($ip_bin,$i,1); } $network_bin = wordwrap($network_bin, 8, ".", 1); list($f1,$f2,$f3,$f4) = explode(".", trim($network_bin)); return bindec($f1).".".bindec($f2).".".bindec($f3).".".bindec($f4); } function broadcast($ip, $netmask){ $netmask = $this->netmask($netmask); $binary_netmask = $this->binary_netmask($netmask); list($f1,$f2,$f3,$f4) = explode(".", $ip); $ip_bin = str_pad(decbin($f1),8,"0",STR_PAD_LEFT).str_pad(decbin($f2),8,"0",STR_PAD_LEFT).str_pad(decbin($f3),8,"0",STR_PAD_LEFT).str_pad(decbin($f4),8,"0",STR_PAD_LEFT); $broadcast_bin = str_pad(substr($ip_bin, 0, $binary_netmask),32,"1",STR_PAD_RIGHT); $broadcast_bin = wordwrap($broadcast_bin, 8, ".", 1); list($f1,$f2,$f3,$f4) = explode(".", trim($broadcast_bin)); return bindec($f1).".".bindec($f2).".".bindec($f3).".".bindec($f4); } function netmask($netmask){ list($f1,$f2,$f3,$f4) = explode(".", trim($netmask)); $bin = str_pad(decbin($f1),8,"0",STR_PAD_LEFT).str_pad(decbin($f2),8,"0",STR_PAD_LEFT).str_pad(decbin($f3),8,"0",STR_PAD_LEFT).str_pad(decbin($f4),8,"0",STR_PAD_LEFT); $parts = explode("0", $bin); $bin = str_pad($parts[0], 32, "0", STR_PAD_RIGHT); $bin = wordwrap($bin, 8, ".", 1); list($f1,$f2,$f3,$f4) = explode(".", trim($bin)); return bindec($f1).".".bindec($f2).".".bindec($f3).".".bindec($f4); } function binary_netmask($netmask){ list($f1,$f2,$f3,$f4) = explode(".", trim($netmask)); $bin = str_pad(decbin($f1),8,"0",STR_PAD_LEFT).str_pad(decbin($f2),8,"0",STR_PAD_LEFT).str_pad(decbin($f3),8,"0",STR_PAD_LEFT).str_pad(decbin($f4),8,"0",STR_PAD_LEFT); $parts = explode("0", $bin); return substr_count($parts[0], "1"); } } // end class ?>