function check_type(&$field, $flags, &$var, $type, $caption = null)
{
    if (is_null($caption)) {
        $caption = $field;
    }
    if (is_array($var) && $type != T_ZBX_IP) {
        $err = ZBX_VALID_OK;
        foreach ($var as $el) {
            $err |= check_type($field, $flags, $el, $type);
        }
        return $err;
    }
    if ($type == T_ZBX_IP) {
        if (!validate_ip($var, $arr)) {
            if ($flags & P_SYS) {
                info(_s('Critical error. Field "%1$s" is not IP.', $field));
                return ZBX_VALID_ERROR;
            } else {
                info(_s('Warning. Field "%1$s" is not IP.', $field));
                return ZBX_VALID_WARNING;
            }
        }
        return ZBX_VALID_OK;
    }
    if ($type == T_ZBX_IP_RANGE) {
        if (!validate_ip_range($var)) {
            if ($flags & P_SYS) {
                info(_s('Critical error. Field "%1$s" is not IP range.', $field));
                return ZBX_VALID_ERROR;
            } else {
                info(_s('Warning. Field "%1$s" is not IP range.', $field));
                return ZBX_VALID_WARNING;
            }
        }
        return ZBX_VALID_OK;
    }
    if ($type == T_ZBX_INT_RANGE) {
        if (!is_int_range($var)) {
            if ($flags & P_SYS) {
                info(_s('Critical error. Field "%1$s" is not integer list or range.', $field));
                return ZBX_VALID_ERROR;
            } else {
                info(_s('Warning. Field "%1$s" is not integer list or range.', $field));
                return ZBX_VALID_WARNING;
            }
        }
        return ZBX_VALID_OK;
    }
    if ($type == T_ZBX_INT && !zbx_is_int($var)) {
        if ($flags & P_SYS) {
            info(_s('Critical error. Field "%1$s" is not integer.', $field));
            return ZBX_VALID_ERROR;
        } else {
            info(_s('Warning. Field "%1$s" is not integer.', $field));
            return ZBX_VALID_WARNING;
        }
    }
    if ($type == T_ZBX_DBL && !is_numeric($var)) {
        if ($flags & P_SYS) {
            info(_s('Critical error. Field "%1$s" is not decimal number.', $field));
            return ZBX_VALID_ERROR;
        } else {
            info(_s('Warning. Field "%1$s" is not decimal number.', $field));
            return ZBX_VALID_WARNING;
        }
    }
    if ($type == T_ZBX_STR && !is_string($var)) {
        if ($flags & P_SYS) {
            info(_s('Critical error. Field "%1$s" is not string.', $field));
            return ZBX_VALID_ERROR;
        } else {
            info(_s('Warning. Field "%1$s" is not string.', $field));
            return ZBX_VALID_WARNING;
        }
    }
    if ($type == T_ZBX_STR && !defined('ZBX_ALLOW_UNICODE') && zbx_strlen($var) != zbx_strlen($var)) {
        if ($flags & P_SYS) {
            info(_s('Critical error. Field "%1$s" contains Multibyte chars.', $field));
            return ZBX_VALID_ERROR;
        } else {
            info(_s('Warning. Field "%1$s" multibyte chars are restricted.', $field));
            return ZBX_VALID_ERROR;
        }
    }
    if ($type == T_ZBX_CLR && !is_hex_color($var)) {
        $var = 'FFFFFF';
        if ($flags & P_SYS) {
            info(_s('Critical error. Field "%1$s" is not a colour.', $field));
            return ZBX_VALID_ERROR;
        } else {
            info(_s('Warning. Field "%1$s" is not a colour.', $caption));
            return ZBX_VALID_WARNING;
        }
    }
    return ZBX_VALID_OK;
}
Example #2
0
function check_type(&$field, $flags, &$var, $type)
{
    if (is_array($var) && $type != T_ZBX_IP) {
        $err = ZBX_VALID_OK;
        foreach ($var as $el) {
            $err |= check_type($field, $flags, $el, $type);
        }
        return $err;
    }
    if ($type == T_ZBX_IP) {
        if (!validate_ip($var, $arr)) {
            if ($flags & P_SYS) {
                info("Critical error. Field [" . $field . "] is not IP");
                return ZBX_VALID_ERROR;
            } else {
                info("Warning. Field [" . $field . "] is not IP");
                return ZBX_VALID_WARNING;
            }
        }
        return ZBX_VALID_OK;
    }
    if ($type == T_ZBX_IP_RANGE) {
        if (!validate_ip_range($var)) {
            if ($flags & P_SYS) {
                info("Critical error. Field [" . $field . "] is not IP range");
                return ZBX_VALID_ERROR;
            } else {
                info("Warning. Field [" . $field . "] is not IP range");
                return ZBX_VALID_WARNING;
            }
        }
        return ZBX_VALID_OK;
    }
    if ($type == T_ZBX_PORTS) {
        $err = ZBX_VALID_OK;
        foreach (explode(',', $var) as $el) {
            foreach (explode('-', $el) as $p) {
                $err |= check_type($field, $flags, $p, T_ZBX_INT);
            }
        }
        return $err;
    }
    if ($type == T_ZBX_INT_RANGE) {
        if (!is_int_range($var)) {
            if ($flags & P_SYS) {
                info("Critical error. Field [" . $field . "] is not integer range");
                return ZBX_VALID_ERROR;
            } else {
                info("Warning. Field [" . $field . "] is not integer range");
                return ZBX_VALID_WARNING;
            }
        }
        return ZBX_VALID_OK;
    }
    if ($type == T_ZBX_INT && !is_numeric($var)) {
        if ($flags & P_SYS) {
            info("Critical error. Field [" . $field . "] is not integer");
            return ZBX_VALID_ERROR;
        } else {
            info("Warning. Field [" . $field . "] is not integer");
            return ZBX_VALID_WARNING;
        }
    }
    if ($type == T_ZBX_DBL && !is_numeric($var)) {
        if ($flags & P_SYS) {
            info("Critical error. Field [" . $field . "] is not double");
            return ZBX_VALID_ERROR;
        } else {
            info("Warning. Field [" . $field . "] is not double");
            return ZBX_VALID_WARNING;
        }
    }
    if ($type == T_ZBX_STR && !is_string($var)) {
        if ($flags & P_SYS) {
            info("Critical error. Field [" . $field . "] is not string");
            return ZBX_VALID_ERROR;
        } else {
            info("Warning. Field [" . $field . "] is not string");
            return ZBX_VALID_WARNING;
        }
    }
    //*
    if ($type == T_ZBX_STR && !defined('ZBX_ALLOW_UNICODE') && strlen($var) != zbx_strlen($var)) {
        if ($flags & P_SYS) {
            info("Critical error. Field [" . $field . "] contains Multibyte chars");
            return ZBX_VALID_ERROR;
        } else {
            info("Warning. Field [" . $field . "] - multibyte chars are restricted");
            return ZBX_VALID_ERROR;
        }
    }
    //*/
    if ($type == T_ZBX_CLR && !is_hex_color($var)) {
        $var = 'FFFFFF';
        if ($flags & P_SYS) {
            info("Critical error. Field [" . $field . "] is not a colour");
            return ZBX_VALID_ERROR;
        } else {
            info("Warning. Field [" . $field . "] is not a colour");
            return ZBX_VALID_WARNING;
        }
    }
    return ZBX_VALID_OK;
}
function check_type(&$field, $flags, &$var, $type)
{
    if (is_array($var) && $type != T_ZBX_IP) {
        $err = ZBX_VALID_OK;
        foreach ($var as $el) {
            $err |= check_type($field, $flags, $el, $type);
        }
        return $err;
    }
    if ($type == T_ZBX_IP) {
        if (!validate_ip($var, $arr)) {
            if ($flags & P_SYS) {
                info('Critical error. Field [' . $field . '] is not IP');
                return ZBX_VALID_ERROR;
            } else {
                info('Warning. Field [' . $field . '] is not IP');
                return ZBX_VALID_WARNING;
            }
        }
        return ZBX_VALID_OK;
    }
    if ($type == T_ZBX_IP_RANGE) {
        if (!validate_ip_range($var)) {
            if ($flags & P_SYS) {
                info(S_CRITICAL_ERROR . '.' . SPACE . S_FIELD . SPACE . '[' . $field . ']' . SPACE . S_IS_NOT_IP_RANGE_SMALL);
                return ZBX_VALID_ERROR;
            } else {
                info(S_WARNING . '.' . SPACE . S_FIELD . SPACE . '[' . $field . ']' . SPACE . S_IS_NOT_IP_RANGE_SMALL);
                return ZBX_VALID_WARNING;
            }
        }
        return ZBX_VALID_OK;
    }
    if ($type == T_ZBX_PORTS) {
        $err = ZBX_VALID_OK;
        $type = $flags & P_SYS ? ZBX_VALID_ERROR : ZBX_VALID_WARNING;
        foreach (explode(',', $var) as $el) {
            foreach (explode('-', $el) as $p) {
                $err |= check_type($field, $flags, $p, T_ZBX_INT);
                if ($p > 65535 || $p < 0) {
                    $err |= $type;
                }
            }
        }
        if ($err == ZBX_VALID_ERROR) {
            info(S_CRITICAL_ERROR . '.' . SPACE . S_FIELD . SPACE . '[' . $field . ']' . SPACE . S_IS_NOT_PORT_RANGE_SMALL);
        } else {
            if ($err == ZBX_VALID_WARNING) {
                info(S_WARNING . '.' . SPACE . S_FIELD . SPACE . '[' . $field . ']' . SPACE . S_IS_NOT_PORT_RANGE_SMALL);
            }
        }
        return $err;
    }
    if ($type == T_ZBX_INT_RANGE) {
        if (!is_int_range($var)) {
            if ($flags & P_SYS) {
                info(S_CRITICAL_ERROR . '.' . SPACE . S_FIELD . SPACE . '[' . $field . ']' . SPACE . S_IS_NOT_INTEGER_RANGE_SMALL);
                return ZBX_VALID_ERROR;
            } else {
                info(S_WARNING . '.' . SPACE . S_FIELD . SPACE . '[' . $field . ']' . SPACE . S_IS_NOT_INTEGER_RANGE_SMALL);
                return ZBX_VALID_WARNING;
            }
        }
        return ZBX_VALID_OK;
    }
    if ($type == T_ZBX_INT && !zbx_is_int($var)) {
        if ($flags & P_SYS) {
            info(S_CRITICAL_ERROR . '.' . SPACE . S_FIELD . SPACE . '[' . $field . ']' . SPACE . S_IS_NOT_INTEGER_SMALL);
            return ZBX_VALID_ERROR;
        } else {
            info(S_WARNING . '.' . SPACE . S_FIELD . SPACE . '[' . $field . ']' . SPACE . S_IS_NOT_INTEGER_SMALL);
            return ZBX_VALID_WARNING;
        }
    }
    if ($type == T_ZBX_DBL && !is_numeric($var)) {
        if ($flags & P_SYS) {
            info(S_CRITICAL_ERROR . '.' . SPACE . S_FIELD . SPACE . '[' . $field . ']' . SPACE . S_IS_NOT_DOUBLE_SMALL);
            return ZBX_VALID_ERROR;
        } else {
            info(S_WARNING . '.' . SPACE . S_FIELD . SPACE . '[' . $field . ']' . SPACE . S_IS_NOT_DOUBLE_SMALL);
            return ZBX_VALID_WARNING;
        }
    }
    if ($type == T_ZBX_STR && !is_string($var)) {
        if ($flags & P_SYS) {
            info(S_CRITICAL_ERROR . '.' . SPACE . S_FIELD . SPACE . '[' . $field . ']' . SPACE . S_IS_NOT_STRING_SMALL);
            return ZBX_VALID_ERROR;
        } else {
            info(S_WARNING . '.' . SPACE . S_FIELD . SPACE . '[' . $field . ']' . SPACE . S_IS_NOT_STRING_SMALL);
            return ZBX_VALID_WARNING;
        }
    }
    //*
    if ($type == T_ZBX_STR && !defined('ZBX_ALLOW_UNICODE') && zbx_strlen($var) != zbx_strlen($var)) {
        if ($flags & P_SYS) {
            info(S_CRITICAL_ERROR . '.' . SPACE . S_FIELD . SPACE . '[' . $field . ']' . SPACE . S_CONTAINS_MULTIBYTE_CHARS_SMALL);
            return ZBX_VALID_ERROR;
        } else {
            info(S_WARNING . '.' . SPACE . S_FIELD . SPACE . '[' . $field . '] - ' . S_MULTIBYTE_CHARS_ARE_RESTRICTED_SMALL);
            return ZBX_VALID_ERROR;
        }
    }
    //*/
    if ($type == T_ZBX_CLR && !is_hex_color($var)) {
        $var = 'FFFFFF';
        if ($flags & P_SYS) {
            info(S_CRITICAL_ERROR . '.' . SPACE . S_FIELD . SPACE . '[' . $field . ']' . SPACE . S_IS_NOT_A_COLOUR_SMALL);
            return ZBX_VALID_ERROR;
        } else {
            info(S_WARNING . '.' . SPACE . S_FIELD . SPACE . '[' . $field . ']' . SPACE . S_IS_NOT_A_COLOUR_SMALL);
            return ZBX_VALID_WARNING;
        }
    }
    return ZBX_VALID_OK;
}