function importPTRData() { assertUIntArg('addrcount'); $nbad = $ngood = 0; for ($i = 1; $i <= $_REQUEST['addrcount']; $i++) { $inputname = "import_{$i}"; if (!isCheckSet($inputname)) { continue; } $ip_bin = assertIPv4Arg("addr_{$i}"); assertStringArg("descr_{$i}", TRUE); assertStringArg("rsvd_{$i}"); // Non-existent addresses will not have this argument set in request. $rsvd = 'no'; if ($_REQUEST["rsvd_{$i}"] == 'yes') { $rsvd = 'yes'; } if (updateV4Address($ip_bin, $_REQUEST["descr_{$i}"], $rsvd) == '') { $ngood++; } else { $nbad++; } } if (!$nbad) { return showFuncMessage(__FUNCTION__, 'OK', array($ngood)); } else { return showFuncMessage(__FUNCTION__, 'ERR', array($nbad, $ngood)); } }
function importPTRData() { $net = spotEntity('ipv4net', getBypassValue()); assertUIntArg('addrcount'); $nbad = $ngood = 0; for ($i = 1; $i <= $_REQUEST['addrcount']; $i++) { $inputname = "import_{$i}"; if (!isCheckSet($inputname)) { continue; } $ip_bin = assertIPv4Arg("addr_{$i}"); assertStringArg("descr_{$i}", TRUE); assertStringArg("rsvd_{$i}"); // Non-existent addresses will not have this argument set in request. $rsvd = 'no'; if ($_REQUEST["rsvd_{$i}"] == 'yes') { $rsvd = 'yes'; } try { if (!ip_in_range($ip_bin, $net)) { throw new InvalidArgException('ip_bin', $ip_bin); } updateAddress($ip_bin, $_REQUEST["descr_{$i}"], $rsvd); $ngood++; } catch (RackTablesError $e) { $nbad++; } } if (!$nbad) { showFuncMessage(__FUNCTION__, 'OK', array($ngood)); } else { showFuncMessage(__FUNCTION__, 'ERR', array($nbad, $ngood)); } }
function genericAssertion($argname, $argtype) { global $sic; switch ($argtype) { case 'string': assertStringArg($argname); break; case 'string0': assertStringArg($argname, TRUE); break; case 'uint': assertUIntArg($argname); break; case 'uint-uint': assertStringArg($argname); if (1 != preg_match('/^[1-9][0-9]*-[1-9][0-9]*$/', $_REQUEST[$argname])) { throw new InvalidRequestArgException($argname, $_REQUEST[$argname], 'illegal format'); } break; case 'uint0': assertUIntArg($argname, TRUE); break; case 'inet': assertIPArg($argname); break; case 'inet4': assertIPv4Arg($argname); break; case 'inet6': assertIPv6Arg($argname); break; case 'l2address': assertStringArg($argname); case 'l2address0': assertStringArg($argname, TRUE); try { l2addressForDatabase($sic[$argname]); } catch (InvalidArgException $e) { throw new InvalidRequestArgException($argname, $sic[$argname], 'malformed MAC/WWN address'); } break; case 'tag': assertStringArg($argname); if (!validTagName($sic[$argname])) { throw new InvalidRequestArgException($argname, $sic[$argname], 'Invalid tag name'); } break; case 'pcre': assertPCREArg($argname); break; case 'json': assertStringArg($argname); if (NULL === json_decode($sic[$argname], TRUE)) { throw new InvalidRequestArgException($argname, '(omitted)', 'Invalid JSON code received from client'); } break; case 'array': if (!array_key_exists($argname, $_REQUEST)) { throw new InvalidRequestArgException($argname, '(missing argument)'); } if (!is_array($_REQUEST[$argname])) { throw new InvalidRequestArgException($argname, '(omitted)', 'argument is not an array'); } break; case 'enum/attr_type': assertStringArg($argname); if (!in_array($sic[$argname], array('uint', 'float', 'string', 'dict', 'date'))) { throw new InvalidRequestArgException($argname, $sic[$argname], 'Unknown value'); } break; case 'enum/vlan_type': assertStringArg($argname); // "Alien" type is not valid until the logic is fixed to implement it in full. if (!in_array($sic[$argname], array('ondemand', 'compulsory'))) { throw new InvalidRequestArgException($argname, $sic[$argname], 'Unknown value'); } break; case 'enum/wdmstd': assertStringArg($argname); global $wdm_packs; if (!array_key_exists($sic[$argname], $wdm_packs)) { throw new InvalidRequestArgException($argname, $sic[$argname], 'Unknown value'); } break; case 'enum/ipproto': assertStringArg($argname); global $vs_proto; if (!array_key_exists($sic[$argname], $vs_proto)) { throw new InvalidRequestArgException($argname, $sic[$argname], 'Unknown value'); } break; case 'enum/alloc_type': assertStringArg($argname); if (!in_array($sic[$argname], array('regular', 'shared', 'virtual', 'router'))) { throw new InvalidRequestArgException($argname, $sic[$argname], 'Unknown value'); } break; case 'enum/dqcode': assertStringArg($argname); global $dqtitle; if (!array_key_exists($sic[$argname], $dqtitle)) { throw new InvalidRequestArgException($argname, $sic[$argname], 'Unknown value'); } break; case 'iif': if (!array_key_exists($sic[$argname], getPortIIFOptions())) { throw new InvalidRequestArgException($argname, $sic[$argname], 'Unknown value'); } break; case 'vlan': case 'vlan1': genericAssertion($argname, 'uint'); if ($argtype == 'vlan' and $sic[$argname] == VLAN_DFL_ID) { throw new InvalidRequestArgException($argname, $sic[$argname], 'default VLAN cannot be changed'); } if ($sic[$argname] > VLAN_MAX_ID or $sic[$argname] < VLAN_MIN_ID) { throw new InvalidRequestArgException($argname, $sic[$argname], 'out of valid range'); } break; case 'rackcode/expr': genericAssertion($argname, 'string0'); if ($sic[$argname] == '') { return; } $parse = spotPayload($sic[$argname], 'SYNT_EXPR'); if ($parse['result'] != 'ACK') { throw new InvalidRequestArgException($argname, $sic[$argname], 'RackCode parsing error'); } break; default: throw new InvalidArgException('argtype', $argtype); // comes not from user's input } }