$v) { // especify only one port for this host if($v['port']=="") $end=" " ; else $end = ":".$v['port'] ; $tunnels .= "target ".$v['ipaddress'].$end."\n" ; } # Write tunnels and targets configuration file $fd = fopen("/usr/local/etc/tunnels.zbd", "w"); $cfg_file = <<> /usr/local/etc/zebedee/".$_REQUEST['id'].".priv") ; $public_key = exec("/usr/local/bin/zebedee -P -f /usr/local/etc/zebedee/".$_REQUEST['id'].".priv") ; $private_key = exec("cat /usr/local/etc/zebedee/".$_REQUEST['id'].".priv ") ; } else { $private_key = exec("cat /usr/local/etc/zebedee/".$_REQUEST['id'].".priv ") ; $public_key = exec("/usr/local/bin/zebedee -P -f /usr/local/etc/zebedee/".$_REQUEST['id'].".priv") ; } $private_key = substr($private_key,12,40) ; $public_key = substr($public_key,0,40) ; $config['installedpackages']['zebedeekeys']['config'][$_REQUEST['id']]['private_key'] = $private_key ; $config['installedpackages']['zebedeekeys']['config'][$_REQUEST['id']]['public_key'] = $public_key ; write_config(); // write clients.id file foreach ($config['installedpackages']['zebedeekeys']['config'] as $key) { $clients .= $key["public_key"]." ".$key["ident"]."\n" ; } $fd = fopen("/usr/local/etc/clients.id", "w"); $cfg_file = << $value) { if (empty($value)) continue; if($key == "greet_time" && !preg_match("/(\d+),(\d+)(s|m|h|w)/",$value)) $input_errors[] = "Wrong greet time sintax."; if($key == "message_size_limit" && !is_numeric($value)) $input_errors[] = "Message size limit must be numeric."; if($key == "process_limit" && !is_numeric($value)) $input_errors[] = "Process limit must be numeric."; if($key == "freq" && (!preg_match("/^\d+(h|m|d)$/",$value) || $value == 0)) $input_errors[] = "A valid number with a time reference is required for the field 'Frequency'"; if (substr($key, 0, 2) == "dc" && !is_hostname($value)) $input_errors[] = "{$value} is not a valid host name."; if (substr($key, 0, 6) == "domain" && is_numeric(substr($key, 6))) { if (!is_domain($value)) $input_errors[] = "{$value} is not a valid domain name."; } else if (substr($key, 0, 12) == "mailserverip" && is_numeric(substr($key, 12))) { if (empty($post['domain' . substr($key, 12)])) $input_errors[] = "Domain for {$value} cannot be blank."; if (!is_ipaddr($value) && !is_hostname($value)) $input_errors[] = "{$value} is not a valid IP address or host name."; } } } function zebedee_php_install_command() { sync_package_zebedee(); } function zebedee_php_deinstall_command() { mwexec_bg("killall -9 zebedee"); sleep(1); conf_mount_rw(); unlink_if_exists("/usr/local/etc/rc.d/zebedee.sh"); conf_mount_ro(); } /* Uses XMLRPC to synchronize the changes to a remote node */ function zebedee_sync_on_changes() { global $config, $g; log_error("[zebedee] zebedee xml_rpc is starting."); $synconchanges = $config['installedpackages']['zebedeesync']['config'][0]['synconchanges']; if(!$synconchanges) return; foreach ($config['installedpackages']['zebedeesync']['config'] as $rs ){ foreach($rs['row'] as $sh){ $sync_to_ip = $sh['ipaddress']; $password = $sh['password']; if($password && $sync_to_ip) zebedee_do_xmlrpc_sync($sync_to_ip, $password); } } log_error("[zebedee] postfix_xmlrpc_sync.php is ending."); } /* Do the actual XMLRPC sync */ function zebedee_do_xmlrpc_sync($sync_to_ip, $password) { global $config, $g; if(!$password) return; if(!$sync_to_ip) return; $xmlrpc_sync_neighbor = $sync_to_ip; if($config['system']['webgui']['protocol'] != "") { $synchronizetoip = $config['system']['webgui']['protocol']; $synchronizetoip .= "://"; } $port = $config['system']['webgui']['port']; /* if port is empty lets rely on the protocol selection */ if($port == "") { if($config['system']['webgui']['protocol'] == "http") $port = "80"; else $port = "443"; } $synchronizetoip .= $sync_to_ip; /* xml will hold the sections to sync */ $xml = array(); $xml['zebedee'] = $config['installedpackages']['zebedee']; $xml['zebedeetunnels'] = $config['installedpackages']['zebedeetunnels']; $xml['zebedeekeys'] = $config['installedpackages']['zebedeekeys']; $xml['zebedeesync'] = $config['installedpackages']['zebedeesync']; /* assemble xmlrpc payload */ $params = array( XML_RPC_encode($password), XML_RPC_encode($xml) ); /* set a few variables needed for sync code borrowed from filter.inc */ $url = $synchronizetoip; log_error("Beginning Postfix XMLRPC sync to {$url}:{$port}."); $method = 'pfsense.merge_installedpackages_section_xmlrpc'; $msg = new XML_RPC_Message($method, $params); $cli = new XML_RPC_Client('/xmlrpc.php', $url, $port); $cli->setCredentials('admin', $password); if($g['debug']) $cli->setDebug(1); /* send our XMLRPC message and timeout after 250 seconds */ $resp = $cli->send($msg, "250"); if(!$resp) { $error = "A communications error occurred while attempting zebedee XMLRPC sync with {$url}:{$port}."; log_error($error); file_notice("sync_settings", $error, "Zebedee Settings Sync", ""); } elseif($resp->faultCode()) { $cli->setDebug(1); $resp = $cli->send($msg, "250"); $error = "An error code was received while attempting zebedee XMLRPC sync with {$url}:{$port} - Code " . $resp->faultCode() . ": " . $resp->faultString(); log_error($error); file_notice("sync_settings", $error, "Postfix Settings Sync", ""); } else { log_error("Zebedee XMLRPC sync successfully completed with {$url}:{$port}."); } /* tell zebedee to reload our settings on the destionation sync host. */ $method = 'pfsense.exec_php'; $execcmd = "require_once('/usr/local/pkg/zebedee.inc');\n"; $execcmd .= "sync_package_zebedee();"; /* assemble xmlrpc payload */ $params = array( XML_RPC_encode($password), XML_RPC_encode($execcmd) ); log_error("zebedee XMLRPC reload data {$url}:{$port}."); $msg = new XML_RPC_Message($method, $params); $cli = new XML_RPC_Client('/xmlrpc.php', $url, $port); $cli->setCredentials('admin', $password); $resp = $cli->send($msg, "250"); if(!$resp) { $error = "A communications error occurred while attempting zebedee XMLRPC sync with {$url}:{$port} (exec_php)."; log_error($error); file_notice("sync_settings", $error, "zebedee Settings Sync", ""); } elseif($resp->faultCode()) { $cli->setDebug(1); $resp = $cli->send($msg, "250"); $error = "An error code was received while attempting zebedee XMLRPC sync with {$url}:{$port} - Code " . $resp->faultCode() . ": " . $resp->faultString(); log_error($error); file_notice("sync_settings", $error, "zebedee Settings Sync", ""); } else { log_error("zebedee XMLRPC reload data success with {$url}:{$port} (exec_php)."); } } ?>