function serviceUpdateDHCP($smarty, $module_name, $local_templates_dir, &$oForm) { $in_ip_ini_1 = trim($_POST['in_ip_ini_1']); $in_ip_ini_2 = trim($_POST['in_ip_ini_2']); $in_ip_ini_3 = trim($_POST['in_ip_ini_3']); $in_ip_ini_4 = trim($_POST['in_ip_ini_4']); $ip_ini = "{$in_ip_ini_1}.{$in_ip_ini_2}.{$in_ip_ini_3}.{$in_ip_ini_4}"; $in_ip_fin_1 = trim($_POST['in_ip_fin_1']); $in_ip_fin_2 = trim($_POST['in_ip_fin_2']); $in_ip_fin_3 = trim($_POST['in_ip_fin_3']); $in_ip_fin_4 = trim($_POST['in_ip_fin_4']); $ip_fin = "{$in_ip_fin_1}.{$in_ip_fin_2}.{$in_ip_fin_3}.{$in_ip_fin_4}"; $in_dns1_1 = trim($_POST['in_dns1_1']); $in_dns1_2 = trim($_POST['in_dns1_2']); $in_dns1_3 = trim($_POST['in_dns1_3']); $in_dns1_4 = trim($_POST['in_dns1_4']); $ip_dns1 = "{$in_dns1_1}.{$in_dns1_2}.{$in_dns1_3}.{$in_dns1_4}"; $in_dns2_1 = trim($_POST['in_dns2_1']); $in_dns2_2 = trim($_POST['in_dns2_2']); $in_dns2_3 = trim($_POST['in_dns2_3']); $in_dns2_4 = trim($_POST['in_dns2_4']); $ip_dns2 = "{$in_dns2_1}.{$in_dns2_2}.{$in_dns2_3}.{$in_dns2_4}"; $in_wins_1 = trim($_POST['in_wins_1']); $in_wins_2 = trim($_POST['in_wins_2']); $in_wins_3 = trim($_POST['in_wins_3']); $in_wins_4 = trim($_POST['in_wins_4']); $ip_wins = "{$in_wins_1}.{$in_wins_2}.{$in_wins_3}.{$in_wins_4}"; $in_gw_1 = trim($_POST['in_gw_1']); $in_gw_2 = trim($_POST['in_gw_2']); $in_gw_3 = trim($_POST['in_gw_3']); $in_gw_4 = trim($_POST['in_gw_4']); $ip_gw = "{$in_gw_1}.{$in_gw_2}.{$in_gw_3}.{$in_gw_4}"; /*$in_gw_nm_1 = trim($_POST['in_gwm_1']); $in_gw_nm_2 = trim($_POST['in_gwm_2']); $in_gw_nm_3 = trim($_POST['in_gwm_3']); $in_gw_nm_4 = trim($_POST['in_gwm_4']); $ip_gw_nm = "$in_gw_nm_1.$in_gw_nm_2.$in_gw_nm_3.$in_gw_nm_4";*/ $ip_gw_nm = ""; $in_lease_time = trim($_POST['in_lease_time']); // Rango de IPs $val = new PaloValidar(); $val->clear(); $continuar = $val->validar(_tr("Start range of IPs"), $ip_ini, "ip") && $val->validar(_tr("End range of IPs"), $ip_fin, "ip"); //si las IPs son válidas continuo validando si concuerdan con alguna interfaz //obtener las interfaces del sistema y verificar que el rango de ips pertenecen a alguna de las interfases $paloNet = new paloNetwork(); $paloDHCP = new PaloSantoDHCP(); $interfazEncontrada = FALSE; $configuracion_de_red_actual = array(); if ($continuar) { $interfases = $paloNet->obtener_interfases_red(); $valorIP = ""; $valorMask = ""; $IpSubred = ""; foreach ($interfases as $dev => $datos) { if ($dev != "lo" && !$interfazEncontrada) { $valorIP = $datos["Inet Addr"]; $valorMask = $datos["Mask"]; if (isset($val->arrErrores[_tr("Start range of IPs")]['mensaje'])) { unset($val->arrErrores[_tr("Start range of IPs")]); } if (isset($val->arrErrores[_tr("End range of IPs")]['mensaje'])) { unset($val->arrErrores[_tr("End range of IPs")]); } $IPSubnet = $paloDHCP->calcularIpSubred($valorIP, $valorMask); //verificar si la IP inicial pertenece a esa red //si no pertenece se guarda mensaje de error, sino se verifica la Ip final $IpSubredIni = $paloDHCP->calcularIpSubred($ip_ini, $valorMask); if ($IpSubredIni != $IPSubnet) { $val->arrErrores[_tr("Start range of IPs")]['mensaje'] = _tr("The start IP is outside the LAN network"); } else { $IpSubredFin = $paloDHCP->calcularIpSubred($ip_fin, $valorMask); if ($IpSubredFin != $IPSubnet) { $val->arrErrores[_tr("End range of IPs")]['mensaje'] = _tr("The final IP is outside the LAN network"); } else { //encontro una interfaz, esta se adopta $configuracion_de_red_actual["lan_mask"] = $valorMask; $configuracion_de_red_actual["lan_ip"] = $valorIP; $interfazEncontrada = TRUE; break; } } } } } if (!$interfazEncontrada) { //el rango de Ips proporcionado no pertenece a ninguna de las interfases $val->arrErrores[_tr("DHCP Server")]['mensaje'] = _tr("IP Range is invalid for available devices"); } if ($ip_dns1 != "...") { $val->validar("DNS 1", $ip_dns1, "ip"); } if ($ip_dns2 != "...") { $val->validar("DNS 2", $ip_dns2, "ip"); } if ($ip_wins != "...") { $val->validar("WINS", $ip_wins, "ip"); } if ($ip_gw != "...") { if ($val->validar("Gateway", $ip_gw, "ip")) { if ($interfazEncontrada) { $IPSubnet = $paloDHCP->calcularIpSubred($configuracion_de_red_actual["lan_ip"], $configuracion_de_red_actual["lan_mask"]); $IpSubredGw = $paloDHCP->calcularIpSubred($ip_gw, $configuracion_de_red_actual["lan_mask"]); if ($IpSubredGw != $IPSubnet) { $val->arrErrores['Gateway']['mensaje'] = _tr("Gateway is outside the LAN network"); } } } } $val->validar(_tr('Time of client refreshment'), $in_lease_time, "numeric"); if ($in_lease_time > 50000 or $in_lease_time < 1) { $val->arrErrores[_tr('Time of client refreshment')]['mensaje'] = _tr("Value outside the range (1-50000)"); } //Veo si hubieron errores $msgErrorVal = ""; $huboError = false; if ($val->existenErroresPrevios() || !$interfazEncontrada) { foreach ($val->arrErrores as $nombreVar => $arrVar) { $msgErrorVal .= "<b>" . $nombreVar . "</b>: " . $arrVar['mensaje'] . "<br>"; } $smarty->assign("mb_title", _tr("The following fields contain errors")); $smarty->assign("mb_message", $msgErrorVal); $huboError = true; } else { // Pase la validacion, empiezo a generar la data que constituira el archivo de configuracion nuevo if (!$paloDHCP->updateFileConfDHCP($ip_gw, $ip_gw_nm, $ip_wins, $ip_dns1, $ip_dns2, $IPSubnet, $configuracion_de_red_actual, $ip_ini, $ip_fin, $in_lease_time)) { $smarty->assign("mb_title", _tr("Update Error") . ":"); $smarty->assign("mb_message", $paloDHCP->errMsg); $huboError = true; } } if ($huboError) { $statusDHCP = $paloDHCP->getStatusServiceDHCP(); if ($statusDHCP == "active") { $smarty->assign("DHCP_STATUS", "<font color='#00AA00'>" . _tr('Active') . "</font>"); $smarty->assign("SERVICE_STARING", true); } else { if ($statusDHCP == "desactive") { $smarty->assign("DHCP_STATUS", "<font color='#FF0000'>" . _tr('Inactive') . "</font>"); $smarty->assign("SERVICE_STARING", false); } } return $oForm->fetchForm("{$local_templates_dir}/dhcp.tpl", _tr("DHCP Configuration"), $_POST); } header("Location: ?menu={$module_name}"); }