new upstream release (3.3.0); modify package compatibility for Stretch
[ossec-hids.git] / src / os_regex / os_match_execute.c
1 /* Copyright (C) 2009 Trend Micro Inc.
2  * All right reserved.
3  *
4  * This program is a free software; you can redistribute it
5  * and/or modify it under the terms of the GNU General Public
6  * License (version 2) as published by the FSF - Free Software
7  * Foundation
8  */
9
10 #include <stdio.h>
11 #include <string.h>
12 #include <stdlib.h>
13
14 #include "os_regex.h"
15
16 /* Compare an already compiled pattern with a not NULL string.
17  * Returns 1 on success or 0 on error.
18  * The error code is set on reg->error.
19  */
20 int OSMatch_Execute(const char *str, size_t str_len, OSMatch *reg)
21 {
22     return reg->exec_function(str, str_len, reg);
23 }
24
25 int OSMatch_Execute_true(const char *subject, size_t len, OSMatch *match)
26 {
27     (void)subject;
28     (void)len;
29     (void)match;
30     return (1);
31 }
32
33 int OSMatch_Execute_pcre2_match(const char *str, size_t str_len, OSMatch * reg)
34 {
35     int rc = 0;
36
37 #ifdef USE_PCRE2_JIT
38     rc = pcre2_jit_match(reg->regex, (PCRE2_SPTR)str, str_len, 0, 0, reg->match_data, NULL);
39 #else
40     rc = pcre2_match(reg->regex, (PCRE2_SPTR)str, str_len, 0, 0, reg->match_data, NULL);
41 #endif
42
43     return (rc >= 0);
44 }
45
46 int OSMatch_Execute_strcmp(const char *subject, size_t len, OSMatch *match)
47 {
48     //^literal$
49     (void)len;
50     return !strcmp(match->pattern, subject);
51 }
52
53 int OSMatch_Execute_strncmp(const char *subject, size_t len, OSMatch *match)
54 {
55     //^literal
56     (void)len;
57     return !strncmp(match->pattern, subject, match->pattern_len);
58 }
59
60 int OSMatch_Execute_strrcmp(const char *subject, size_t len, OSMatch *match)
61 {
62     // literal$
63     if (len >= match->pattern_len) {
64         return !strcmp(match->pattern, &subject[len - match->pattern_len]);
65     }
66     return (0);
67 }
68
69 int OSMatch_Execute_strcasecmp(const char *subject, size_t len, OSMatch *match)
70 {
71     return (len == match->pattern_len && !strcasecmp(match->pattern, subject));
72 }
73
74 int OSMatch_Execute_strncasecmp(const char *subject, size_t len, OSMatch *match)
75 {
76     (void)len;
77     return !strncasecmp(match->pattern, subject, match->pattern_len);
78 }
79
80 int OSMatch_Execute_strrcasecmp(const char *subject, size_t len, OSMatch *match) {
81     if (len >= match->pattern_len) {
82         return !strcasecmp(match->pattern, &subject[len - match->pattern_len]);
83     }
84     return (0);
85 }
86