libsqreen 0.3.0.0.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,4 @@
1
+ LIBSQREEN_EXTENSION {
2
+ global: Init_libsqreen_extension; libsqreen_*;
3
+ local: *;
4
+ };
data/lib/libsqreen.rb ADDED
@@ -0,0 +1,27 @@
1
+ # Copyright (c) 2015 Sqreen. All Rights Reserved.
2
+ # Please refer to our terms for more information: https://www.sqreen.com/terms.html
3
+
4
+ require 'libsqreen/version'
5
+
6
+ module LibSqreen
7
+ (@load_order ||= []).push(:'libsqreen.rb')
8
+
9
+ def self.extension_path
10
+ RUBY_VERSION =~ /^(\d+\.\d+)/ && "ext/#{RUBY_PLATFORM}/#{$1}"
11
+ end
12
+
13
+ def self.require_extension
14
+ begin
15
+ require "#{extension_path}/libsqreen.so"
16
+ rescue LoadError
17
+ require "libsqreen.so"
18
+ end
19
+ begin
20
+ require "#{extension_path}/libsqreen_extension.so"
21
+ rescue LoadError
22
+ require "libsqreen_extension.so"
23
+ end
24
+ end
25
+
26
+ require_extension
27
+ end
@@ -0,0 +1,6 @@
1
+ # Copyright (c) 2015 Sqreen. All Rights Reserved.
2
+ # Please refer to our terms for more information: https://www.sqreen.com/terms.html
3
+
4
+ module LibSqreen
5
+ VERSION = "0.3.0.0.3"
6
+ end
data/libsqreen.gemspec ADDED
@@ -0,0 +1,29 @@
1
+ $:.unshift File.expand_path("../lib", __FILE__)
2
+ require "libsqreen/version"
3
+
4
+ Gem::Specification.new do |s|
5
+ s.name = "libsqreen"
6
+ s.version = LibSqreen::VERSION
7
+ s.platform = Gem::Platform::RUBY
8
+ s.authors = ["Sqreen"]
9
+ s.email = ["contact@sqreen.com"]
10
+ s.homepage = "https://www.sqreen.com"
11
+ s.summary = %q{Make the Sqreen agent faster}
12
+ s.description = %q{Distributes fast compiled functions for the Sqreen agent}
13
+ s.license = "Sqreen"
14
+
15
+ s.files = `git ls-files`.split("\n")
16
+ .reject { |f| f =~ /^release\// }
17
+ .reject { |f| f =~ /^vendor\// }
18
+ .reject { |f| f =~ /^.git\// }
19
+ .reject { |f| f =~ /^docker\// }
20
+ .reject { |f| f =~ /^test\// } + Dir.glob('vendor/lib*/**/*')
21
+
22
+ s.require_paths = ["lib"]
23
+ s.require_paths += ["lib/ext"]
24
+ s.extensions = ["ext/libsqreen/extconf.rb", "ext/libsqreen_extension/extconf.rb"]
25
+
26
+ s.add_development_dependency 'rake', '~> 11.0'
27
+ s.add_development_dependency 'rake-compiler', '~> 0'
28
+ end
29
+
data/s3get ADDED
@@ -0,0 +1,47 @@
1
+ #!/bin/bash
2
+
3
+ set -e
4
+ set -u
5
+
6
+ access_key="${AWS_ACCESS_KEY}"
7
+ secret_key="${AWS_SECRET_KEY}"
8
+
9
+ tgt="${*:$#}"
10
+ src=("${@:1:$# - 1}")
11
+ bucket="${src%%.*}"
12
+ host_bucket="${src%%/*}"
13
+ host_base="${host_bucket#*.}"
14
+ dst="${tgt}"
15
+
16
+ if [[ "${#src[@]}" = 0 ]]; then
17
+ exit 1
18
+ fi
19
+
20
+ if [[ ! "$dst" =~ .*/$ ]]; then
21
+ if [[ "${#src[@]}" -gt 1 ]]; then
22
+ exit 1
23
+ fi
24
+ fi
25
+
26
+ for s in "${src[@]}"; do
27
+ p="${s#*/}"
28
+ if [[ ! "$dst" =~ .*/$ ]]; then
29
+ f="${dst}"
30
+ else
31
+ f="${dst}${p}"
32
+ fi
33
+ d="${f%/*}"
34
+
35
+ resource="/${bucket}/${p}"
36
+ content_type='binary/octet-stream'
37
+ date="$(date -u -R)"
38
+ payload="GET\n\n${content_type}\n${date}\n${resource}"
39
+ signature=$(echo -en "${payload}" | openssl sha1 -hmac "${secret_key}" -binary | base64)
40
+ mkdir -p "$d"
41
+ curl -X GET -o "${f}" \
42
+ -H "Host: ${host_bucket}" \
43
+ -H "Date: ${date}" \
44
+ -H "Content-Type: ${content_type}" \
45
+ -H "Authorization: AWS ${access_key}:${signature}" \
46
+ "https://${host_bucket}/${p}"
47
+ done
@@ -0,0 +1,279 @@
1
+ ==============================================================================
2
+ The LLVM Project is under the Apache License v2.0 with LLVM Exceptions:
3
+ ==============================================================================
4
+
5
+ Apache License
6
+ Version 2.0, January 2004
7
+ http://www.apache.org/licenses/
8
+
9
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
10
+
11
+ 1. Definitions.
12
+
13
+ "License" shall mean the terms and conditions for use, reproduction,
14
+ and distribution as defined by Sections 1 through 9 of this document.
15
+
16
+ "Licensor" shall mean the copyright owner or entity authorized by
17
+ the copyright owner that is granting the License.
18
+
19
+ "Legal Entity" shall mean the union of the acting entity and all
20
+ other entities that control, are controlled by, or are under common
21
+ control with that entity. For the purposes of this definition,
22
+ "control" means (i) the power, direct or indirect, to cause the
23
+ direction or management of such entity, whether by contract or
24
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
25
+ outstanding shares, or (iii) beneficial ownership of such entity.
26
+
27
+ "You" (or "Your") shall mean an individual or Legal Entity
28
+ exercising permissions granted by this License.
29
+
30
+ "Source" form shall mean the preferred form for making modifications,
31
+ including but not limited to software source code, documentation
32
+ source, and configuration files.
33
+
34
+ "Object" form shall mean any form resulting from mechanical
35
+ transformation or translation of a Source form, including but
36
+ not limited to compiled object code, generated documentation,
37
+ and conversions to other media types.
38
+
39
+ "Work" shall mean the work of authorship, whether in Source or
40
+ Object form, made available under the License, as indicated by a
41
+ copyright notice that is included in or attached to the work
42
+ (an example is provided in the Appendix below).
43
+
44
+ "Derivative Works" shall mean any work, whether in Source or Object
45
+ form, that is based on (or derived from) the Work and for which the
46
+ editorial revisions, annotations, elaborations, or other modifications
47
+ represent, as a whole, an original work of authorship. For the purposes
48
+ of this License, Derivative Works shall not include works that remain
49
+ separable from, or merely link (or bind by name) to the interfaces of,
50
+ the Work and Derivative Works thereof.
51
+
52
+ "Contribution" shall mean any work of authorship, including
53
+ the original version of the Work and any modifications or additions
54
+ to that Work or Derivative Works thereof, that is intentionally
55
+ submitted to Licensor for inclusion in the Work by the copyright owner
56
+ or by an individual or Legal Entity authorized to submit on behalf of
57
+ the copyright owner. For the purposes of this definition, "submitted"
58
+ means any form of electronic, verbal, or written communication sent
59
+ to the Licensor or its representatives, including but not limited to
60
+ communication on electronic mailing lists, source code control systems,
61
+ and issue tracking systems that are managed by, or on behalf of, the
62
+ Licensor for the purpose of discussing and improving the Work, but
63
+ excluding communication that is conspicuously marked or otherwise
64
+ designated in writing by the copyright owner as "Not a Contribution."
65
+
66
+ "Contributor" shall mean Licensor and any individual or Legal Entity
67
+ on behalf of whom a Contribution has been received by Licensor and
68
+ subsequently incorporated within the Work.
69
+
70
+ 2. Grant of Copyright License. Subject to the terms and conditions of
71
+ this License, each Contributor hereby grants to You a perpetual,
72
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
73
+ copyright license to reproduce, prepare Derivative Works of,
74
+ publicly display, publicly perform, sublicense, and distribute the
75
+ Work and such Derivative Works in Source or Object form.
76
+
77
+ 3. Grant of Patent License. Subject to the terms and conditions of
78
+ this License, each Contributor hereby grants to You a perpetual,
79
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
80
+ (except as stated in this section) patent license to make, have made,
81
+ use, offer to sell, sell, import, and otherwise transfer the Work,
82
+ where such license applies only to those patent claims licensable
83
+ by such Contributor that are necessarily infringed by their
84
+ Contribution(s) alone or by combination of their Contribution(s)
85
+ with the Work to which such Contribution(s) was submitted. If You
86
+ institute patent litigation against any entity (including a
87
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
88
+ or a Contribution incorporated within the Work constitutes direct
89
+ or contributory patent infringement, then any patent licenses
90
+ granted to You under this License for that Work shall terminate
91
+ as of the date such litigation is filed.
92
+
93
+ 4. Redistribution. You may reproduce and distribute copies of the
94
+ Work or Derivative Works thereof in any medium, with or without
95
+ modifications, and in Source or Object form, provided that You
96
+ meet the following conditions:
97
+
98
+ (a) You must give any other recipients of the Work or
99
+ Derivative Works a copy of this License; and
100
+
101
+ (b) You must cause any modified files to carry prominent notices
102
+ stating that You changed the files; and
103
+
104
+ (c) You must retain, in the Source form of any Derivative Works
105
+ that You distribute, all copyright, patent, trademark, and
106
+ attribution notices from the Source form of the Work,
107
+ excluding those notices that do not pertain to any part of
108
+ the Derivative Works; and
109
+
110
+ (d) If the Work includes a "NOTICE" text file as part of its
111
+ distribution, then any Derivative Works that You distribute must
112
+ include a readable copy of the attribution notices contained
113
+ within such NOTICE file, excluding those notices that do not
114
+ pertain to any part of the Derivative Works, in at least one
115
+ of the following places: within a NOTICE text file distributed
116
+ as part of the Derivative Works; within the Source form or
117
+ documentation, if provided along with the Derivative Works; or,
118
+ within a display generated by the Derivative Works, if and
119
+ wherever such third-party notices normally appear. The contents
120
+ of the NOTICE file are for informational purposes only and
121
+ do not modify the License. You may add Your own attribution
122
+ notices within Derivative Works that You distribute, alongside
123
+ or as an addendum to the NOTICE text from the Work, provided
124
+ that such additional attribution notices cannot be construed
125
+ as modifying the License.
126
+
127
+ You may add Your own copyright statement to Your modifications and
128
+ may provide additional or different license terms and conditions
129
+ for use, reproduction, or distribution of Your modifications, or
130
+ for any such Derivative Works as a whole, provided Your use,
131
+ reproduction, and distribution of the Work otherwise complies with
132
+ the conditions stated in this License.
133
+
134
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
135
+ any Contribution intentionally submitted for inclusion in the Work
136
+ by You to the Licensor shall be under the terms and conditions of
137
+ this License, without any additional terms or conditions.
138
+ Notwithstanding the above, nothing herein shall supersede or modify
139
+ the terms of any separate license agreement you may have executed
140
+ with Licensor regarding such Contributions.
141
+
142
+ 6. Trademarks. This License does not grant permission to use the trade
143
+ names, trademarks, service marks, or product names of the Licensor,
144
+ except as required for reasonable and customary use in describing the
145
+ origin of the Work and reproducing the content of the NOTICE file.
146
+
147
+ 7. Disclaimer of Warranty. Unless required by applicable law or
148
+ agreed to in writing, Licensor provides the Work (and each
149
+ Contributor provides its Contributions) on an "AS IS" BASIS,
150
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
151
+ implied, including, without limitation, any warranties or conditions
152
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
153
+ PARTICULAR PURPOSE. You are solely responsible for determining the
154
+ appropriateness of using or redistributing the Work and assume any
155
+ risks associated with Your exercise of permissions under this License.
156
+
157
+ 8. Limitation of Liability. In no event and under no legal theory,
158
+ whether in tort (including negligence), contract, or otherwise,
159
+ unless required by applicable law (such as deliberate and grossly
160
+ negligent acts) or agreed to in writing, shall any Contributor be
161
+ liable to You for damages, including any direct, indirect, special,
162
+ incidental, or consequential damages of any character arising as a
163
+ result of this License or out of the use or inability to use the
164
+ Work (including but not limited to damages for loss of goodwill,
165
+ work stoppage, computer failure or malfunction, or any and all
166
+ other commercial damages or losses), even if such Contributor
167
+ has been advised of the possibility of such damages.
168
+
169
+ 9. Accepting Warranty or Additional Liability. While redistributing
170
+ the Work or Derivative Works thereof, You may choose to offer,
171
+ and charge a fee for, acceptance of support, warranty, indemnity,
172
+ or other liability obligations and/or rights consistent with this
173
+ License. However, in accepting such obligations, You may act only
174
+ on Your own behalf and on Your sole responsibility, not on behalf
175
+ of any other Contributor, and only if You agree to indemnify,
176
+ defend, and hold each Contributor harmless for any liability
177
+ incurred by, or claims asserted against, such Contributor by reason
178
+ of your accepting any such warranty or additional liability.
179
+
180
+ END OF TERMS AND CONDITIONS
181
+
182
+ APPENDIX: How to apply the Apache License to your work.
183
+
184
+ To apply the Apache License to your work, attach the following
185
+ boilerplate notice, with the fields enclosed by brackets "[]"
186
+ replaced with your own identifying information. (Don't include
187
+ the brackets!) The text should be enclosed in the appropriate
188
+ comment syntax for the file format. We also recommend that a
189
+ file or class name and description of purpose be included on the
190
+ same "printed page" as the copyright notice for easier
191
+ identification within third-party archives.
192
+
193
+ Copyright [yyyy] [name of copyright owner]
194
+
195
+ Licensed under the Apache License, Version 2.0 (the "License");
196
+ you may not use this file except in compliance with the License.
197
+ You may obtain a copy of the License at
198
+
199
+ http://www.apache.org/licenses/LICENSE-2.0
200
+
201
+ Unless required by applicable law or agreed to in writing, software
202
+ distributed under the License is distributed on an "AS IS" BASIS,
203
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
204
+ See the License for the specific language governing permissions and
205
+ limitations under the License.
206
+
207
+
208
+ ---- LLVM Exceptions to the Apache 2.0 License ----
209
+
210
+ As an exception, if, as a result of your compiling your source code, portions
211
+ of this Software are embedded into an Object form of such source code, you
212
+ may redistribute such embedded portions in such Object form without complying
213
+ with the conditions of Sections 4(a), 4(b) and 4(d) of the License.
214
+
215
+ In addition, if you combine or link compiled forms of this Software with
216
+ software that is licensed under the GPLv2 ("Combined Software") and if a
217
+ court of competent jurisdiction determines that the patent provision (Section
218
+ 3), the indemnity provision (Section 9) or other Section of the License
219
+ conflicts with the conditions of the GPLv2, you may retroactively and
220
+ prospectively choose to deem waived or otherwise exclude such Section(s) of
221
+ the License, but only in their entirety and only with respect to the Combined
222
+ Software.
223
+
224
+ ==============================================================================
225
+ Software from third parties included in the LLVM Project:
226
+ ==============================================================================
227
+ The LLVM Project contains third party software which is under different license
228
+ terms. All such code will be identified clearly using at least one of two
229
+ mechanisms:
230
+ 1) It will be in a separate directory tree with its own `LICENSE.txt` or
231
+ `LICENSE` file at the top containing the specific license and restrictions
232
+ which apply to that software, or
233
+ 2) It will contain specific license and restriction terms at the top of every
234
+ file.
235
+
236
+ ==============================================================================
237
+ Legacy LLVM License (https://llvm.org/docs/DeveloperPolicy.html#legacy):
238
+ ==============================================================================
239
+ University of Illinois/NCSA
240
+ Open Source License
241
+
242
+ Copyright (c) 2003-2019 University of Illinois at Urbana-Champaign.
243
+ All rights reserved.
244
+
245
+ Developed by:
246
+
247
+ LLVM Team
248
+
249
+ University of Illinois at Urbana-Champaign
250
+
251
+ http://llvm.org
252
+
253
+ Permission is hereby granted, free of charge, to any person obtaining a copy of
254
+ this software and associated documentation files (the "Software"), to deal with
255
+ the Software without restriction, including without limitation the rights to
256
+ use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
257
+ of the Software, and to permit persons to whom the Software is furnished to do
258
+ so, subject to the following conditions:
259
+
260
+ * Redistributions of source code must retain the above copyright notice,
261
+ this list of conditions and the following disclaimers.
262
+
263
+ * Redistributions in binary form must reproduce the above copyright notice,
264
+ this list of conditions and the following disclaimers in the
265
+ documentation and/or other materials provided with the distribution.
266
+
267
+ * Neither the names of the LLVM Team, University of Illinois at
268
+ Urbana-Champaign, nor the names of its contributors may be used to
269
+ endorse or promote products derived from this Software without specific
270
+ prior written permission.
271
+
272
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
273
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
274
+ FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
275
+ CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
276
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
277
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
278
+ SOFTWARE.
279
+
@@ -0,0 +1,18 @@
1
+ Permission is hereby granted, free of charge, to any person obtaining
2
+ a copy of this software and associated documentation files (the
3
+ "Software"), to deal in the Software without restriction, including
4
+ without limitation the rights to use, copy, modify, merge, publish,
5
+ distribute, sublicense, and/or sell copies of the Software, and to
6
+ permit persons to whom the Software is furnished to do so, subject to
7
+ the following conditions:
8
+
9
+ The above copyright notice and this permission notice shall be
10
+ included in all copies or substantial portions of the Software.
11
+
12
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
13
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
14
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
15
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
16
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
17
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
18
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Binary file
@@ -0,0 +1,216 @@
1
+ //
2
+ // PowerWAF
3
+ // Copyright © 2019 Sqreen. All rights reserved.
4
+ //
5
+
6
+ #ifndef PowerWAF_h
7
+ #define PowerWAF_h
8
+
9
+ #ifdef __cplusplus
10
+ extern "C" {
11
+ #endif
12
+
13
+ #include <stdint.h>
14
+ #include <stdbool.h>
15
+ #include <stdlib.h>
16
+
17
+ #define MAX_REGEX_STRING_LENGTH 4096
18
+
19
+ typedef enum
20
+ {
21
+ PWI_INVALID = 0,
22
+ PWI_SIGNED_NUMBER = 1 << 0, // `value` shall be decoded as a int64_t (or int32_t on 32bits platforms)
23
+ PWI_UNSIGNED_NUMBER = 1 << 1, // `value` shall be decoded as a uint64_t (or uint32_t on 32bits platforms)
24
+ PWI_STRING = 1 << 2, // `value` shall be decoded as a UTF-8 string of length `nbEntries`
25
+ PWI_ARRAY = 1 << 3, // `value` shall be decoded as an array of PWArgs of length `nbEntries`, each item having no `parameterName`
26
+ PWI_MAP = 1 << 4, // `value` shall be decoded as an array of PWArgs of length `nbEntries`, each item having a `parameterName`
27
+ } PW_INPUT_TYPE;
28
+
29
+ typedef struct
30
+ {
31
+ const char * parameterName;
32
+ uint64_t parameterNameLength;
33
+ const void * value;
34
+ uint64_t nbEntries;
35
+ PW_INPUT_TYPE type;
36
+ } PWArgs;
37
+
38
+ /// InitializePowerWAF
39
+ ///
40
+ /// Initialize a rule in the PowerWAF
41
+ /// Must be called before calling RunPowerWAF on this rule name
42
+ /// Will clear any existing rule with the same name
43
+ ///
44
+ /// @param ruleName Name the atom that provided the patterns we're about to initialize with
45
+ /// @param wafRule JSON blob containing the patterns to work with
46
+ /// @return The success (true) or faillure (false) of the init
47
+
48
+ extern bool powerwaf_initializePowerWAF(const char * ruleName, const char * wafRule);
49
+
50
+
51
+ typedef enum
52
+ {
53
+ PWD_PARSING_JSON = 0,
54
+ PWD_PARSING_RULE,
55
+ PWD_PARSING_RULE_FILTER,
56
+ PWD_OPERATOR_VALUE,
57
+ PWD_DUPLICATE_RULE,
58
+ PWD_PARSING_FLOW,
59
+ PWD_PARSING_FLOW_STEP,
60
+ PWD_MEANINGLESS_STEP,
61
+ PWD_DUPLICATE_FLOW,
62
+ PWD_DUPLICATE_FLOW_STEP,
63
+ } PW_DIAG_CODE;
64
+
65
+ /// powerwaf_initializePowerWAFWithDiag
66
+ ///
67
+ /// Initialize a rule in the PowerWAF
68
+ /// Must be called before calling RunPowerWAF on this rule name
69
+ /// Will clear any existing rule with the same name
70
+ /// If any error is encountered and an errors pointer is provided, it'll be populated with a report in JSON
71
+ ///
72
+ /// @param ruleName Name the atom that provided the patterns we're about to initialize with
73
+ /// @param wafRule JSON blob containing the patterns to work with
74
+ /// @param errors Pointer to the pointer to be populated with a potential error report. Set to NULL not to generate such a report
75
+ /// @return The success (true) or faillure (false) of the init
76
+
77
+
78
+ extern bool powerwaf_initializePowerWAFWithDiag(const char * ruleName, const char * wafRule, char ** errors);
79
+
80
+ /// powerwaf_freeDiagnotics
81
+ ///
82
+ /// Free the error report generated by powerwaf_initializePowerWAFWithDiag
83
+ ///
84
+ /// @param errors Pointer to a populated error report. NULL will be safely ignored
85
+
86
+
87
+ extern void powerwaf_freeDiagnotics(char * errors);
88
+
89
+ /// ClearRule
90
+ ///
91
+ /// Flush all context related to a rule
92
+ ///
93
+ /// @param ruleName Name of the rule to unload
94
+
95
+ extern void powerwaf_clearRule(const char * ruleName);
96
+
97
+ /// ClearAll
98
+ ///
99
+ /// Flush all context
100
+
101
+ extern void powerwaf_clearAll(void);
102
+
103
+
104
+ typedef enum
105
+ {
106
+ PW_ERR_INTERNAL = -6,
107
+ PW_ERR_TIMEOUT = -5,
108
+ PW_ERR_INVALID_CALL = -4,
109
+ PW_ERR_INVALID_RULE = -3,
110
+ PW_ERR_INVALID_FLOW = -2,
111
+ PW_ERR_NORULE = -1,
112
+ PW_GOOD = 0,
113
+ PW_MONITOR = 1,
114
+ PW_BLOCK = 2
115
+ } PW_RET_CODE;
116
+
117
+ typedef struct
118
+ {
119
+ PW_RET_CODE action;
120
+ const char * data;
121
+ } PWRet;
122
+
123
+ /// RunPowerWAF
124
+ ///
125
+ /// Run the patterns from a rule on a set of parameters
126
+ ///
127
+ /// Threading guarantees: When calling this API, a lock will be taken for a very short window as this call will take ownership of a shared smart pointer.
128
+ /// This pointer implement reference counting and can be owned by as many thread as you want.
129
+ /// If you call powerwaf_initializePowerWAF while evaluation of powerwaf_runPowerWAF is ongoing, the calls having already taken ownership will safely finish processing.
130
+ /// The shared pointer will be destroyed, without locking powerwaf_initializePowerWAF, when the last powerwaf_runPowerWAF finish processing.
131
+ ///
132
+ /// Maximum budget: The budget is internally stored in nanoseconds in an int64_t variable. This is then added to the current time, also coded in nano seconds.
133
+ /// Due to those convertions, the maximum safe value for the next 15 years is 2^52. After that, 2^51.
134
+ ///
135
+ /// @param ruleName Name of the rule you want to run
136
+ /// @param parameters The request's parameters
137
+ /// @param timeLeftInUs The maximum time in microsecond PowerWAF is allowed to take
138
+ /// @return Whether the pattern matched or whether we encountered an error
139
+
140
+ extern PWRet * powerwaf_runPowerWAF(const char * ruleName, const PWArgs * parameters, size_t timeLeftInUs);
141
+
142
+
143
+ typedef struct {
144
+ uint16_t major;
145
+ uint16_t minor;
146
+ uint16_t patch;
147
+ } PWVersion;
148
+
149
+ /// GetVersion
150
+ ///
151
+ /// Return the API version of PowerWAF
152
+ ///
153
+ /// @return The API version in SemVer form
154
+
155
+ extern const PWVersion powerwaf_getVersion(void);
156
+
157
+
158
+ typedef enum
159
+ {
160
+ PWL_TRACE,
161
+ PWL_DEBUG,
162
+ PWL_INFO,
163
+ PWL_WARN,
164
+ PWL_ERROR,
165
+
166
+ _PWL_AFTER_LAST,
167
+ } PW_LOG_LEVEL;
168
+
169
+ ///
170
+ /// Callback that powerwaf will call to relay messages to the binding.
171
+ ///
172
+ /// @param level The logging level
173
+ /// @param function The native function that emitted the message. Never NULL
174
+ /// @param file The file of the native function that emmitted the message. Never null
175
+ /// @param line The line where the message was emmitted. Non-negative
176
+ /// @param message The size of the logging message. NUL-terminated
177
+ /// @param message_len The length of the logging message (excluding NUL terminator)
178
+ ///
179
+
180
+ typedef void (*powerwaf_logging_cb_t)(
181
+ PW_LOG_LEVEL level, const char *function, const char *file, int line,
182
+ const char *message, size_t message_len);
183
+
184
+ ///
185
+ /// Sets up PowerWAF to rely logging messages to the binding
186
+ ///
187
+ /// @param cb The callback to call, or NULL to stop relaying messages
188
+ /// @param min_level The minimum logging level for which to relay messages (ignored if cb is NULL)
189
+ /// @return whether the logging sink was successfully replaced
190
+ ///
191
+ bool powerwaf_setupLogging(powerwaf_logging_cb_t cb, PW_LOG_LEVEL min_level);
192
+
193
+ /// PWArgs utils
194
+
195
+ extern PWArgs powerwaf_getInvalidPWArgs(void);
196
+ extern PWArgs powerwaf_createStringWithLength(const char * string, size_t length);
197
+ extern PWArgs powerwaf_createString(const char * string);
198
+ extern PWArgs powerwaf_createInt(int64_t value);
199
+ extern PWArgs powerwaf_createUint(uint64_t value);
200
+ extern PWArgs powerwaf_createArray(void);
201
+ extern PWArgs powerwaf_createMap(void);
202
+ extern bool powerwaf_addToPWArgsArray(PWArgs * array, PWArgs entry);
203
+ // Setting entryNameLength to 0 will result in the entryName length being re-computed with strlen
204
+ extern bool powerwaf_addToPWArgsMap(PWArgs * map, const char * entryName, size_t entryNameLength, PWArgs entry);
205
+ extern void powerwaf_freeInput(PWArgs *input, bool freeSelf);
206
+ extern void powerwaf_freeReturn(PWRet *output);
207
+
208
+ #ifdef __cplusplus
209
+ }
210
+ #ifdef TESTING
211
+ extern std::unordered_map<std::string, std::shared_ptr<PowerWAF>> & exportInternalRuleCollection();
212
+ #endif
213
+
214
+ #endif /* __cplusplus */
215
+
216
+ #endif /* PowerWAF_h */