X-Git-Url: http://ftp.carnet.hr/carnet-debian/scm?a=blobdiff_plain;f=src%2Fos_regex%2Fos_regex.h;h=62d21eca1319811aea8ad7c579501e3950b0080a;hb=3f728675941dc69d4e544d3a880a56240a6e394a;hp=24a600ff8ffc11cd8f77d8efd76eb03b815f0141;hpb=301048b51990573e58a30dc4a5bb4ec285cad554;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 24a600f..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,179 +9,183 @@ /* 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 - +#define OS_PATTERN_MAXSIZE 2048 /* Error codes */ #define OS_REGEX_REG_NULL 1 -#define OS_REGEX_PATTERN_NULL 2 +#define OS_REGEX_PATTERN_NULL 2 #define OS_REGEX_MAXSIZE 3 #define OS_REGEX_OUTOFMEMORY 4 #define OS_REGEX_STR_NULL 5 #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; - char ***prts_closure; - 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; - int *size; - char **patterns; - int (**match_fp)(char *str, char *str2, int str_len, int 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 * Returns 1 on success or 0 on error. * The error code is set on reg->error. */ -int OSRegex_Compile(char *pattern, OSRegex *reg, int flags); - +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. */ -char *OSRegex_Execute(char *str, OSRegex *reg); - +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. - */ -void OSRegex_FreePattern(OSRegex *reg); +/* 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. - */ -void OSRegex_FreeSubStrings(OSRegex *reg); - +/* 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(char *pattern, char *str); +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. * The error code is set on reg->error. */ -int OSMatch_Compile(char *pattern, OSMatch *reg, int flags); - +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(char *str, int str_len, OSMatch *reg); +int OSMatch_Execute(const char *str, size_t str_len, OSMatch *reg) __attribute__((nonnull(3))); +/* Release all the memory created by the compilation/execution phases */ +void OSMatch_FreePattern(OSMatch *reg) __attribute__((nonnull)); -/** int OSMatch_FreePattern(OSMatch *reg) v0.1 - * Release all the memory created by the compilation/executation - * phases. - * Returns void. - */ -void OSMatch_FreePattern(OSMatch *reg); +int OS_Match2(const char *pattern, const char *str) __attribute__((nonnull(2))); +/* Searches for pattern in the string */ +int OS_WordMatch(const char *pattern, const char *str) __attribute__((nonnull)); +#define OS_Match OS_WordMatch -int OS_Match2(char *pattern, char *str); +/* 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(char *pattern, char *str); -#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); + +/* 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); -/** char **OS_StrBreak(char match, char *str, int size) v0.2 - * Split a string into multiples pieces, divided by a char "match". +/* 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, char *str, int size); - +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). */ -int OS_StrHowClosedMatch(char *str1, char *str2); +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. */ -#include -#define startswith(x,y) (strncmp(x,y,strlen(y)) == 0?1:0) -#define OS_StrStartsWith startswith - - -/** int OS_StrIsNum(char *str) v0.1 - * Checks if a specific string is numeric (like "129544") - */ -int OS_StrIsNum(char *str); +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 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 */