Add(print_r($_SESSION['pfimport'], true)); unset($_SESSION['pfimport']); $action = ACT_DEFAULT; break; default: $g_error->Add(submit_error($submit)); $valid = FALSE; } // ========== ACTIONS END ===================================================== $smarty->assign("scripts", 'checkbox.js'); include("header.php"); if ($action == ACT_DEFAULT): // ========== VARIANT: default behavior ======================================= $smarty->display("import.tpl"); elseif ($action == ACT_EDIT): // ========== VARIANT: edit display options =================================== $smarty->assign("xmlfile",$_FILES['xmlfile']['name']); $smarty->assign("xmlfiletype", $_FILES['xmlfile']['type']); $smarty->assign("xmltmp", $_FILES['xmlfile']['tmp_name']); $uploadfile = '/var/www/html/ipreg/import/'. basename($_FILES['xmlfile']['tmp_name']); if (! move_uploaded_file($_FILES['xmlfile']['tmp_name'], $uploadfile)) { $smarty->display("import.tpl"); $smarty->display('footer.tpl'); exit; } $xml = simplexml_load_file($uploadfile); $conf_alias = $xml->xpath('/pfsense/aliases/alias'); $alias = array(); foreach ($conf_alias as $a) { if ($a->type == 'host') { $host = explode(' ', $a->address); if (count($host) == 1) { $alias[(string) $a->name] = $host[0]; } } } $wanip = (string) $xml->xpath('/pfsense/interfaces/wan/ipaddr')[0]; $nat = $xml->xpath('/pfsense/nat/rule'); $res = array(); $ruleid = 0; // for database checks $sql = "SELECT COUNT(*) FROM nat JOIN node AS n1 ON nat.nat_ext=n1.node_id JOIN node AS n2 ON nat.nat_int=n2.node_id WHERE n1.node_ip=? AND n2.node_ip=?"; $sth = $dbh->prepare($sql); foreach ($nat as $n) { if (! $n->destination->address) { if ($n->destination->network == 'wanip') { $nat_ext = ip2long($wanip); } else { $nat_ext = ip2long((string) $n->destination->network); } } else { $nat_ext = ip2long((string) $n->destination->address); }; $nat_ext_port = (int) $n->destination->port; $tgt = (string) $n->target; if (array_key_exists($tgt, $alias)) { $tgt = $alias[$tgt]; } $nat_int = ip2long($tgt); $nat_int_port = (int) $n->{'local-port'}; $description = (string) $n->descr; // check if data already exists $sth->execute([long2ip($nat_ext), long2ip($nat_int)]); $dupe = $sth->fetchColumn() == 0; $ruleid += 1; $res[] = ['id' => $ruleid, 'ext' => $nat_ext, 'ext_port' => $nat_ext_port, 'int' => $nat_int, 'int_port' => $nat_int_port, 'description' => $description, 'dupe' => $dupe]; } // store importdata for next selection step $_SESSION['pfimport'] = $res; $smarty->assign("natlist", $res); $smarty->display("importpfsense.tpl"); else: // ========== ERROR UNKNOWN VARIANT =========================================== echo "

Unknown function call: Please report to system development!

\n"; endif; // $action == ... // ========== END OF VARIANTS ================================================= $smarty->display('footer.tpl');