new upstream release (3.3.0); modify package compatibility for Stretch
[ossec-hids.git] / src / os_regex / os_regex.h
old mode 100755 (executable)
new mode 100644 (file)
index 981044e..62d21ec
@@ -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.
  *
 
 /* See README for details */
 
-
 #ifndef __OS_REGEX_H
 #define __OS_REGEX_H
 
 /* size_t */
 #include <stddef.h>
 
+#define PCRE2_CODE_UNIT_WIDTH 8
+#include <pcre2.h>
 
 /* 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
 #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 */