X-Git-Url: http://ftp.carnet.hr/carnet-debian/scm?a=blobdiff_plain;ds=sidebyside;f=src%2Fos_regex%2Fos_regex.h;fp=src%2Fos_regex%2Fos_regex.h;h=62d21eca1319811aea8ad7c579501e3950b0080a;hb=3f728675941dc69d4e544d3a880a56240a6e394a;hp=981044ecae048de738eaeb561d315d463249400b;hpb=927951d1c1ad45ba9e7325f07d996154a91c911b;p=ossec-hids.git diff --git a/src/os_regex/os_regex.h b/src/os_regex/os_regex.h old mode 100755 new mode 100644 index 981044e..62d21ec --- a/src/os_regex/os_regex.h +++ b/src/os_regex/os_regex.h @@ -1,5 +1,3 @@ -/* $OSSEC, os_regex.h, v0.3, 2005/04/05, Daniel B. Cid$ */ - /* Copyright (C) 2009 Trend Micro Inc. * All right reserved. * @@ -11,23 +9,22 @@ /* See README for details */ - #ifndef __OS_REGEX_H #define __OS_REGEX_H /* size_t */ #include +#define PCRE2_CODE_UNIT_WIDTH 8 +#include /* OSRegex_Compile flags */ #define OS_RETURN_SUBSTRING 0000200 #define OS_CASE_SENSITIVE 0000400 - /* Pattern maximum size */ #define OS_PATTERN_MAXSIZE 2048 - /* Error codes */ #define OS_REGEX_REG_NULL 1 #define OS_REGEX_PATTERN_NULL 2 @@ -37,35 +34,55 @@ #define OS_REGEX_BADREGEX 6 #define OS_REGEX_BADPARENTHESIS 7 #define OS_REGEX_NO_MATCH 8 +#define OS_REGEX_NO_JIT 9 +#define OS_CONVERT_REGEX 1 +#define OS_CONVERT_MATCH 2 /* OSRegex structure */ -typedef struct _OSRegex -{ +typedef struct _OSRegex { int error; - int *flags; - char **patterns; char **sub_strings; - const char ***prts_closure; - const char ***prts_str; -}OSRegex; - + pcre2_code *regex; + pcre2_match_data *match_data; + size_t pattern_len; + char *pattern; + const char *(*exec_function)(const char *, struct _OSRegex *); +} OSRegex; /* OSmatch structure */ -typedef struct _OSMatch -{ +typedef struct _OSMatch { int error; - size_t *size; - char **patterns; - int (**match_fp)(const char *str, const char *str2, size_t str_len, size_t size); -}OSMatch; - + pcre2_code *regex; + pcre2_match_data *match_data; + size_t pattern_len; + char *pattern; + int (*exec_function)(const char *, size_t, struct _OSMatch *); +} OSMatch; + +/* OSPcre2 structure */ +typedef struct _OSPcre2 { + int error; + char **sub_strings; + pcre2_code *regex; + pcre2_match_data *match_data; + size_t pattern_len; + char *pattern; + const char *(*exec_function)(const char *, struct _OSPcre2 *); +} OSPcre2; /*** Prototypes ***/ +/* Convert an Ossec pattern, match or regex, + * to a PCRE2 pattern + * Allowed map are: + * - OS_CONVERT_REGEX + * - OS_CONVERT_MATCH + * Returns 1 on success or 0 on error. + */ +int OSRegex_Convert(const char *pattern, char **converted_pattern, uint32_t map); -/** int OSRegex_Compile(char *pattern, OSRegex *reg, int flags) v0.1 - * Compile a regular expression to be used later. +/* Compile a regular expression to be used later * Allowed flags are: * - OS_CASE_SENSITIVE * - OS_RETURN_SUBSTRING @@ -74,43 +91,28 @@ typedef struct _OSMatch */ int OSRegex_Compile(const char *pattern, OSRegex *reg, int flags); - -/** char *OSRegex_Execute(char *str, OSRegex *reg) v0.1 - * Compare an already compiled regular expression with +/* Compare an already compiled regular expression with * a not NULL string. * Returns end of str on success or NULL on error. * The error code is set on reg->error. */ const char *OSRegex_Execute(const char *str, OSRegex *reg) __attribute__((nonnull(2))); - -/** int OSRegex_FreePattern(SRegex *reg) v0.1 - * Release all the memory created by the compilation/executation - * phases. - * Returns void. - */ +/* Release all the memory created by the compilation/execution phases */ void OSRegex_FreePattern(OSRegex *reg) __attribute__((nonnull)); -/** int OSRegex_FreeSubStrings(OSRegex *reg) v0.1 - * Release all the memory created to store the sub strings. - * Returns void. - */ +/* Release all the memory created to store the sub strings */ void OSRegex_FreeSubStrings(OSRegex *reg) __attribute__((nonnull)); - -/** int OS_Regex(char *pattern, char *str) v0.4 - * This function is a wrapper around the compile/execute +/* This function is a wrapper around the compile/execute * functions. It should only be used when the pattern is * only going to be used once. * Returns 1 on success or 0 on failure. */ int OS_Regex(const char *pattern, const char *str); - - -/** int OSMatch_Compile(char *pattern, OSMatch *reg, int flags) v0.1 - * Compile a pattern to be used later. +/* Compile a pattern to be used later. * Allowed flags are: * - OS_CASE_SENSITIVE * Returns 1 on success or 0 on error. @@ -118,75 +120,72 @@ int OS_Regex(const char *pattern, const char *str); */ int OSMatch_Compile(const char *pattern, OSMatch *reg, int flags); - -/** int OSMatch_Execute(char *str, int str_len, OSMatch *reg) v0.1 - * Compare an already compiled pattern with - * a not NULL string. +/* Compare an already compiled pattern with a not NULL string. * Returns 1 on success or 0 on error. * The error code is set on reg->error. */ int OSMatch_Execute(const char *str, size_t str_len, OSMatch *reg) __attribute__((nonnull(3))); - -/** int OSMatch_FreePattern(OSMatch *reg) v0.1 - * Release all the memory created by the compilation/executation - * phases. - * Returns void. - */ +/* Release all the memory created by the compilation/execution phases */ void OSMatch_FreePattern(OSMatch *reg) __attribute__((nonnull)); - int OS_Match2(const char *pattern, const char *str) __attribute__((nonnull(2))); -int OS_Match3(char *pattern, char *str, char* delimiter); +/* Searches for pattern in the string */ +int OS_WordMatch(const char *pattern, const char *str) __attribute__((nonnull)); +#define OS_Match OS_WordMatch +/* Compile a PCRE2 expression to be used later + * Allowed flags are the same as option in pcre2_compile + * Returns 1 on success or 0 on error. + * The error code is set on reg->error. + */ +int OSPcre2_Compile(const char *pattern, OSPcre2 *reg, int flags); -/* OS_WordMatch v0.3: - * Searches for pattern in the string +/* Compare an already compiled PCRE2 expression with + * a not NULL string. + * Returns end of str on success or NULL on error. + * The error code is set on reg->error. */ -int OS_WordMatch(const char *pattern, const char *str) __attribute__((nonnull)); -#define OS_Match OS_WordMatch +const char *OSPcre2_Execute(const char *str, OSPcre2 *reg); + +/* Release all the memory created by the compilation/execution phases */ +void OSPcre2_FreePattern(OSPcre2 *reg); +/* Release all the memory created to store the sub strings */ +void OSPcre2_FreeSubStrings(OSPcre2 *reg); -/** char **OS_StrBreak(char match, char *str, int size) v0.2 - * Split a string into multiples pieces, divided by a char "match". +/* This function is a wrapper around the compile/execute + * functions. It should only be used when the pattern is + * only going to be used once. + * Returns 1 on success or 0 on failure. + */ +int OS_Pcre2(const char *pattern, const char *str); + +/* Split a string into multiples pieces, divided by a char "match". * Returns a NULL terminated array on success or NULL on error. */ char **OS_StrBreak(char match, const char *str, size_t size); - -/** int OS_StrHowClosedMatch(char *str1, char *str2) v0.1 - * Returns the number of characters that both strings +/* Returns the number of characters that both strings * have in similar (start at the beginning of them). */ size_t OS_StrHowClosedMatch(const char *str1, const char *str2); - /** Inline prototypes **/ - -/** int OS_StrStartsWith(char *str, char *pattern) v0.1 - * Verifies if a string starts with the provided pattern. +/* Verifies if a string starts with the provided pattern. * Returns 1 on success or 0 on failure. */ int OS_StrStartsWith(const char *str, const char *pattern) __attribute__((nonnull)); +/* Checks if a specific string is numeric (like "129544") */ +int OS_StrIsNum(const char *str); -/** int OS_StrIsNum(char *str) v0.1 - * Checks if a specific string is numeric (like "129544") - */ -int OS_StrIsNum(const char *str) __attribute__((nonnull)); - - -/** int isValidChar(char c) - * Checks if a specified char is in the following range: +/* Checks if a specified char is in the following range: * a-z, A-Z, 0-9, _-. */ -#include "os_regex_maps.h" +extern const unsigned char hostname_map[256]; #define isValidChar(x) (hostname_map[(unsigned char)x]) - -#endif - - -/* EOF */ +#endif /* __OS_REGEX_H */