function check_ipv4($path, $needgw) { anchor($path); $static = query("static"); if ($static != "1") { set("static", "0"); } TRACE_debug("FATLADY: INET_IPV4: static = " . $static); if ($static == "1") { $ip = query("ipaddr"); $mask = query("mask"); $dhcps4 = INF_getinfinfo($_GLOBALS["FATLADY_INF_UID"], "dhcps4"); TRACE_debug("FATLADY: INET_IPV4: ip = " . $ip); TRACE_debug("FATLADY: INET_IPV4: mask = " . $mask); if (INET_validv4addr($ip) == 0) { set_result("FAILED", $path . "/ipaddr", i18n("Invalid IP address")); return; } if ($mask == "") { set_result("FAILED", $path . "/mask", i18n("No Subnet Mask value")); return; } if ($mask < 0 || $mask > 32) { set_result("FAILED", $path . "/mask", i18n("Invalid Subnet Mask value")); return; } if (INET_validv4host($ip, $mask) == 0) { set_result("FAILED", $path . "/ipaddr", i18n("Invalid IP address")); return; } if (INET_addr_strip0($gw) == $ip) { set_result("FAILED", $path . "/gateway", i18n("The IP address and gateway address cannot be the same")); return; } set("ipaddr", INET_addr_strip0($ip)); $ip = query("ipaddr"); $gw = query("gateway"); TRACE_debug("FATLADY: INET_IPV4: gw=" . $gw); if ($gw == "") { if ($needgw == "1" && $static == "1") { set_result("FAILED", $path . "/gateway", i18n("No default gateway IP address")); return; } } else { if (INET_validv4host($gw, $mask) == 0) { set_result("FAILED", $path . "/gateway", i18n("Invalid default gateway IP address")); return; } if (ipv4networkid($gw, $mask) != ipv4networkid($ip, $mask)) { set_result("FAILED", $path . "/gateway", i18n("The default gateway should be in the same network")); return; } if (INET_addr_strip0($gw) == $ip) { set_result("FAILED", $path . "/gateway", i18n("The IP address and gateway address cannot be the same")); return; } set("gateway", INET_addr_strip0($gw)); } } else { if (query("dhcpplus/enable") != "") { /* User Name & Password */ if (query("dhcpplus/enable") == "1" && query("dhcpplus/username") == "") { set_result("FAILED", $path . "/dhcpplus/username", i18n("The user name cannot be empty")); return; } } } $cnt = query("dns/count"); $i = 0; while ($i < $cnt) { $i++; $value = query("dns/entry:" . $i); TRACE_debug("FATLADY: INET_IPV4: dns" . $i . "=" . $value); if (INET_validv4addr($value) == 0) { set_result("FAILED", $path . "/dns/entry:" . $i, i18n("Invalid DNS address")); return; } set("dns/entry:" . $i, INET_addr_strip0($value)); if ($static == "1") { if (ipv4networkid($value, $mask) == ipv4networkid($ip, $mask)) { TRACE_debug("FATLADY: INET_IPV4: dns" . $i . "=" . $value . " is in the same network as IP:" . $ip); if (INET_validv4host($value, $mask) == 0) { set_result("FAILED", $path . "/dns/entry:" . $i, i18n("Invalid DNS address")); return; } if ($value == $ip) { set_result("FAILED", $path . "/dns/entry:" . $i, i18n("Invalid DNS address")); return; } } } if ($i > 1) { $j = $i - 1; $k = 0; while ($k < $j) { $k++; $dns = query("dns/entry:" . $k); if ($value == $dns) { set_result("FAILED", $path . "/dns/entry:2", i18n("Secondary DNS server should not be the same as Primary DNS server.")); return; } } } } $mtu = query("mtu"); TRACE_debug("FATLADY: INET_IPV4: mtu=" . $mtu); if ($mtu != "") { if (isdigit($mtu) == "0") { set_result("FAILED", $path . "/mtu", i18n("The MTU value is invalid.")); return; } if ($mtu < 576) { set_result("FAILED", $path . "/mtu", i18n("The MTU value is too small, the valid value is 576 ~ 1500.")); return; } if ($mtu > 1500) { set_result("FAILED", $path . "/mtu", i18n("The MTU value is too large, the valid value is 576 ~ 1500.")); return; } } set_result("OK", "", ""); }
function check_ppp4($path) { anchor($path); $over = query("over"); if ($over != "eth" && $over != "pptp" && $over != "l2tp" && $over != "tty") { /* Internal error, no i18n. */ set_result("FAILED", $path . "/ipaddr", "Illegal value for over : " . $over); return; } /* IP address */ $static = query("static"); if ($static == "1") { $ipaddr = query("ipaddr"); if (INET_validv4addr($ipaddr) == 0) { set_result("FAILED", $path . "/ipaddr", i18n("Invalid IP address")); return; } } else { /* if static is not 1, it should be 0. */ set("static", "0"); del("ipaddr"); } /* DNS */ $cnt = query("dns/count"); $i = 0; while ($i < $cnt) { $i++; $value = query("dns/entry:" . $i); if (INET_validv4addr($value) == 0) { set_result("FAILED", $path . "/dns:" . $i, i18n("Invalid DNS address")); return; } set("dns/entry:" . $i, INET_addr_strip0($value)); } /* MTU/MRU */ $mtu = query("mtu"); if ($mtu != "") { if (isdigit($mtu) == "0") { set_result("FAILED", $path . "/mtu", i18n("The MTU value is invalid.")); return; } if ($mtu < 576) { set_result("FAILED", $path . "/mtu", i18n("The MTU value is too small, the valid value cannot be smaller than 576.")); return; } if ($over == "pptp" && $mtu > 1460) { set_result("FAILED", $path . "/mtu", i18n("The MTU value is too large, the valid value for pptp is 576 ~ 1460.")); return; } else { if ($over == "l2tp" && $mtu > 1460) { set_result("FAILED", $path . "/mtu", i18n("The MTU value is too large, the valid value for l2tp is 576 ~ 1460.")); return; } else { if ($mtu > 1492) { if ($over == "tty") { if ($mtu > 1500) { set_result("FAILED", $path . "/mtu", i18n("The MTU value is too large, the valid value for 3G is 576 ~ 1500.")); return; } } else { set_result("FAILED", $path . "/mtu", i18n("The MTU value is too large, the valid value is 576 ~ 1492.")); return; } } } } $mtu = $mtu + 1 - 1; /* convert to number */ set("mtu", $mtu); } $mru = query("mru"); if ($mru != "") { if (isdigit($mru) == "0") { set_result("FAILED", $path . "/mtu", i18n("Invalid MRU value.")); return; } if ($mru < 576) { set_result("FAILED", $path . "/mru", i18n("The MRU value is too small, the valid value is 576 ~ 1492.")); return; } if ($mru > 1492) { set_result("FAILED", $path . "/mru", i18n("The MRU value is too large, the valid value is 576 ~ 1492.")); return; } $mru = $mru + 1 - 1; /* convert to number */ set("mru", $mru); } /* User Name & Password */ if (query("username") == "" && $over != "tty") { set_result("FAILED", $path . "/username", i18n("The user name cannot be empty")); return; } /* dialup */ $mode = query("dialup/mode"); if ($mode != "auto" && $mode != "manual" && $mode != "ondemand") { /* no i18n */ set_result("FAILED", $path . "/dialup/mode", "Invalid value for dial up mode - " . $mode); return; } $tout = query("dialup/idletimeout"); if ($tout != "") { if (isdigit($tout) == "0" || $tout < 0 || $tout >= 10000) { set_result("FAILED", $path . "/dialup/mode", i18n("Invalid value for idle timeout.")); return; } } if ($over == "eth") { /* should check service name & ac name here. */ } else { if ($over == "pptp") { $server = query("pptp/server"); if ($server == "") { set_result("FAILED", $path . "/pptp/server", i18n("No PPTP server.")); return; } if (cut_count($server, ".") == 4 && isdigit(cut($server, 0, ".")) == 1 && isdigit(cut($server, 1, ".")) == 1 && isdigit(cut($server, 2, ".")) == 1 && isdigit(cut($server, 3, ".")) == 1) { if (INET_validv4addr($server) == 0) { set_result("FAILED", $path . "/pptp/server", i18n("Invalid server IP address")); return; } else { set("pptp/server", INET_addr_strip0($server)); } } else { if (isdomain($server) != 1) { set_result("FAILED", $path . "/pptp/server", i18n("Invalid server IP address")); return; } } } else { if ($over == "l2tp") { $server = query("l2tp/server"); if ($server == "") { set_result("FAILED", $path . "/l2tp/server", i18n("No L2TP server.")); return; } if (cut_count($server, ".") == 4 && isdigit(cut($server, 0, ".")) == 1 && isdigit(cut($server, 1, ".")) == 1 && isdigit(cut($server, 2, ".")) == 1 && isdigit(cut($server, 3, ".")) == 1) { if (INET_validv4addr($server) == 0) { set_result("FAILED", $path . "/l2tp/server", i18n("Invalid server IP address")); return; } else { set("l2tp/server", INET_addr_strip0($server)); } } else { if (isdomain($server) != 1) { set_result("FAILED", $path . "/l2tp/server", i18n("Invalid server IP address")); return; } } } } } set_result("OK", "", ""); }
function check_ipv4($path, $needgw) { include "/htdocs/webinc/feature.php"; anchor($path); $static = query("static"); $ipipmode = query($path . "/ipv4in6/mode"); if ($ipipmode != "") { TRACE_debug("FATLADY: INET_IPV4: IPIP mode :" . $ipipmode); $ipipremote = query($path . "/ipv4in6/remote"); if ($ipipremote != "") { TRACE_debug("FATLADY: IPIP remote IPv6 address :" . $ipipremote); //if(INET_validv6addr($ipipremote) == 0) if (ipv6checkip($ipipremote) != 1) { set_result("FAILED", $path . "/ipaddr", i18n("Invalid IPv6 address")); return; } //$type = INET_v6addrtype($ipipremote); $type = ipv6addrtype($ipipremote); TRACE_debug("FATLADY: IPIP remote IPv6 address type :" . $type); if ($type == "ANY" || $type == "MULTICAST" || $type == "LOOPBACK") { set_result("FAILED", $path . "/ipaddr", i18n("Invalid IPv6 address type")); return; } } $ip = query("ipaddr"); /* ip address of B4 */ if ($ip != "") { $ip_part = cut($ip, 3, '.'); if ($ip_part < 2 || $ip_part > 7) { set_result("FAILED", $path . "/ipaddr", i18n("The range of B4 IPv4 address is from 192.0.0.2 to 192.0.0.7")); return; } } set_result("OK", "", ""); return; } if ($static != "1") { set("static", "0"); } TRACE_debug("FATLADY: INET_IPV4: static = " . $static); if ($static == "1") { $ip = query("ipaddr"); $mask = query("mask"); $dhcps4 = INF_getinfinfo($_GLOBALS["FATLADY_INF_UID"], "dhcps4"); TRACE_debug("FATLADY: INET_IPV4: ip = " . $ip); TRACE_debug("FATLADY: INET_IPV4: mask = " . $mask); if (INET_validv4addr($ip) == 0) { set_result("FAILED", $path . "/ipaddr", i18n("Invalid IP Address")); return; } if ($mask == "") { set_result("FAILED", $path . "/mask", i18n("No Subnet Mask value")); return; } if ($mask < 0 || $mask > 32) { set_result("FAILED", $path . "/mask", i18n("Invalid Subnet Mask value")); return; } if ($mask < 8) { set_result("FAILED", $path . "/mask", i18n("The router would not support the subnet mask which length is less than Class A.")); return; } if (INET_validv4host($ip, $mask) == 0) { set_result("FAILED", $path . "/ipaddr", i18n("Invalid IP Address")); return; } if (INET_addr_strip0($gw) == $ip) { set_result("FAILED", $path . "/gateway", i18n("The IP address can not be equal to the gateway address")); return; } set("ipaddr", INET_addr_strip0($ip)); $ip = query("ipaddr"); $gw = query("gateway"); TRACE_debug("FATLADY: INET_IPV4: gw=" . $gw); if ($gw == "") { if ($needgw == "1" && $static == "1") { set_result("FAILED", $path . "/gateway", i18n("No gateway address")); return; } } else { if (INET_validv4host($gw, $mask) == 0) { set_result("FAILED", $path . "/gateway", i18n("Invalid Default Gateway address")); return; } if (ipv4networkid($gw, $mask) != ipv4networkid($ip, $mask)) { set_result("FAILED", $path . "/gateway", i18n("The default gateway should be in the same network")); return; } if (INET_addr_strip0($gw) == $ip) { set_result("FAILED", $path . "/gateway", i18n("The IP address can not be equal to the Default Gateway address")); return; } set("gateway", INET_addr_strip0($gw)); } } else { if (query("dhcpplus/enable") != "") { /* User Name & Password */ if (query("dhcpplus/enable") == "1" && query("dhcpplus/username") == "") { set_result("FAILED", $path . "/dhcpplus/username", i18n("The user name can not be empty")); return; } } } $cnt = query("dns/count"); $i = 0; while ($i < $cnt) { $i++; $value = query("dns/entry:" . $i); TRACE_debug("FATLADY: INET_IPV4: dns" . $i . "=" . $value); if (INET_validv4addr($value) == 0) { set_result("FAILED", $path . "/dns/entry:" . $i, i18n("Invalid DNS address")); return; } set("dns/entry:" . $i, INET_addr_strip0($value)); if ($static == "1") { if (ipv4networkid($value, $mask) == ipv4networkid($ip, $mask)) { TRACE_debug("FATLADY: INET_IPV4: dns" . $i . "=" . $value . " is in the same network as IP:" . $ip); if (INET_validv4host($value, $mask) == 0) { set_result("FAILED", $path . "/dns/entry:" . $i, i18n("Invalid DNS address")); return; } if ($value == $ip) { set_result("FAILED", $path . "/dns/entry:" . $i, i18n("Invalid DNS address")); return; } } } if ($i > 1) { $j = $i - 1; $k = 0; while ($k < $j) { $k++; $dns = query("dns/entry:" . $k); if ($value == $dns) { set_result("FAILED", $path . "/dns/entry:2", i18n("Secondary DNS server should not be the same as Primary DNS server.")); return; } } } } $mtu = query("mtu"); TRACE_debug("FATLADY: INET_IPV4: mtu=" . $mtu); if ($mtu != "") { if (isdigit($mtu) == "0") { set_result("FAILED", $path . "/mtu", i18n("The MTU value is invalid.")); return; } if ($mtu < 576 && $FEATURE_NOIPV6 == 1) { set_result("FAILED", $path . "/mtu", i18n("The MTU value is too small, the valid value is 576 ~ 1500.")); return; } if ($mtu < 1280 && $FEATURE_NOIPV6 == 0) { set_result("FAILED", $path . "/mtu", i18n("The MTU value is too small, the valid value is 1280 ~ 1500.")); return; } if ($mtu > 1500) { if ($FEATURE_NOIPV6 == 0) { set_result("FAILED", $path . "/mtu", i18n("The MTU value is too large, the valid value is 1280 ~ 1500.")); } else { set_result("FAILED", $path . "/mtu", i18n("The MTU value is too large, the valid value is 576 ~ 1500.")); } return; } } set_result("OK", "", ""); }