diff options
Diffstat (limited to 'frontends/php/include/validate.inc.php')
| -rw-r--r-- | frontends/php/include/validate.inc.php | 95 |
1 files changed, 83 insertions, 12 deletions
diff --git a/frontends/php/include/validate.inc.php b/frontends/php/include/validate.inc.php index 659935bc..04ebac59 100644 --- a/frontends/php/include/validate.inc.php +++ b/frontends/php/include/validate.inc.php @@ -47,7 +47,7 @@ return eval($exec); } - function unset_all(&$fields) + function unset_not_in_list(&$fields) { foreach($_REQUEST as $key => $val) { @@ -59,12 +59,36 @@ } } + function unset_action_vars($fields) + { + foreach($fields as $field => $checks) + { + list($type,$opt,$flags,$validation,$exception)=$checks; + + if(($flags&P_ACT)&&(isset($_REQUEST[$field]))) + { + info("Unset:".$field); + unset($_REQUEST[$field]); + } + } + } + + function unset_all() + { + foreach($_REQUEST as $key => $val) + { + unset($_REQUEST[$key]); + } + } + function check_fields(&$fields) { global $_REQUEST; $ret = TRUE; + $critical = FALSE; + foreach($fields as $field => $checks) { list($type,$opt,$flags,$validation,$exception)=$checks; @@ -83,9 +107,16 @@ { if(!isset($_REQUEST[$field])) { - info("Field [".$field."] is mandatory"); $ret = FALSE; - continue; + info("Warning. Field [".$field."] is mandatory"); + if($flags&P_SYS) + { + info("Critical error. Field [".$field."] is mandatory"); + unset_all(); + $critical = TRUE; + break; + } + else continue; } } @@ -93,9 +124,16 @@ { if(isset($_REQUEST[$field])) { - info("Field [".$field."] must be missing"); $ret = FALSE; - continue; + info("Warning. Field [".$field."] must be missing"); + if($flags&P_SYS) + { + info("Critical error. Field [".$field."] must be missing"); + unset_all(); + $critical = TRUE; + break; + } + else continue; } else continue; } @@ -107,15 +145,29 @@ if( ($type == T_ZBX_INT) && !is_numeric($_REQUEST[$field])) { - info("Field [".$field."] is not integer"); $ret = FALSE; - continue; + info("Warning. Field [".$field."] is not integer"); + if($flags&P_SYS) + { + info("Critical error. Field [".$field."] is not integer"); + unset_all(); + $critical = TRUE; + break; + } + else continue; } if( ($type == T_ZBX_DBL) && !is_numeric($_REQUEST[$field])) { - info("Field [".$field."] is not double"); $ret = FALSE; - continue; + info("Warning. Field [".$field."] is not double"); + if($flags&P_SYS) + { + info("Critical error. Field [".$field."] is not double"); + unset_all(); + $critical = TRUE; + break; + } + else continue; } if(($exception==NULL)||($except==TRUE)) @@ -125,13 +177,32 @@ if(!$valid) { - info("Incorrect value for [".$field."]"); $ret = FALSE; - continue; + info("Warning. Incorrect value for [".$field."]"); + if($flags&P_SYS) + { + info("Critical error. Incorrect value for [".$field."]"); + unset_all(); + $critical = TRUE; + break; + } + else continue; } } } - unset_all($fields); + unset_not_in_list($fields); + if($critical) + { + show_messages(FALSE, "", "Invalid URL"); + show_page_footer(); + exit; + } + if(!$ret) + { + info("zzz"); + unset_action_vars($fields); + } + show_messages(); return $ret; } ?> |
