libddwaf 1.3.0.2.0 → 1.5.1.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,230 @@
1
+ module Datadog
2
+ module AppSec
3
+ module WAF
4
+ module LibDDWAF
5
+ class Error < StandardError
6
+ attr_reader ruleset_info: Hash[Symbol, untyped] | nil
7
+
8
+ def initialize: (::String msg, ?ruleset_info: Hash[Symbol, untyped]?) -> void
9
+ end
10
+
11
+ extend ::FFI::Library
12
+
13
+ def self.local_os: () -> ::String
14
+ def self.local_cpu: () -> ::String
15
+ def self.local_version: () -> (::String | nil)
16
+ def self.source_dir: () -> ::String
17
+ def self.vendor_dir: () -> ::String
18
+ def self.libddwaf_vendor_dir: () -> ::String
19
+ def self.shared_lib_triplet: (?version: ::String?) -> ::String
20
+ def self.libddwaf_dir: () -> ::String
21
+ def self.shared_lib_extname: () -> ::String
22
+ def self.shared_lib_path: () -> ::String
23
+
24
+ # version
25
+
26
+ def self.ddwaf_get_version: () -> ::String
27
+
28
+ # ddwaf::object data structure
29
+
30
+ DDWAF_OBJ_TYPE: ::FFI::Enum
31
+
32
+ class UInt32Ptr < ::FFI::Struct
33
+ end
34
+
35
+ class UInt64Ptr < ::FFI::Struct
36
+ end
37
+
38
+ class SizeTPtr < ::FFI::Struct
39
+ end
40
+
41
+ class ObjectValueUnion < ::FFI::Union
42
+ end
43
+
44
+ class Object < ::FFI::Struct
45
+ end
46
+
47
+ # setters
48
+
49
+ def self.ddwaf_object_invalid: (LibDDWAF::Object) -> ::FFI::Pointer
50
+ def self.ddwaf_object_string: (LibDDWAF::Object, ::String) -> ::FFI::Pointer
51
+ def self.ddwaf_object_stringl: (LibDDWAF::Object, ::String, ::Integer) -> ::FFI::Pointer
52
+ def self.ddwaf_object_stringl_nc: (LibDDWAF::Object, ::String, ::Integer) -> ::FFI::Pointer
53
+ def self.ddwaf_object_unsigned: (LibDDWAF::Object, ::Integer) -> ::FFI::Pointer
54
+ def self.ddwaf_object_signed: (LibDDWAF::Object, ::Integer) -> ::FFI::Pointer
55
+ def self.ddwaf_object_unsigned_force: (LibDDWAF::Object, ::Integer) -> ::FFI::Pointer
56
+ def self.ddwaf_object_signed_force: (LibDDWAF::Object, ::Integer) -> ::FFI::Pointer
57
+ def self.ddwaf_object_bool: (LibDDWAF::Object, bool) -> ::FFI::Pointer
58
+
59
+ def self.ddwaf_object_array: (LibDDWAF::Object) -> ::FFI::Pointer
60
+ def self.ddwaf_object_array_add: (LibDDWAF::Object, LibDDWAF::Object) -> bool
61
+
62
+ def self.ddwaf_object_map: (LibDDWAF::Object) -> ::FFI::Pointer
63
+ def self.ddwaf_object_map_add: (LibDDWAF::Object, ::String, LibDDWAF::Object) -> bool
64
+ def self.ddwaf_object_map_addl: (LibDDWAF::Object, ::String, ::Integer, LibDDWAF::Object) -> bool
65
+ def self.ddwaf_object_map_addl_nc: (LibDDWAF::Object, ::String, ::Integer, LibDDWAF::Object) -> bool
66
+
67
+ # getters
68
+
69
+ def self.ddwaf_object_type: (LibDDWAF::Object) -> ::FFI::Enum
70
+ def self.ddwaf_object_size: (LibDDWAF::Object) -> ::Integer
71
+ def self.ddwaf_object_length: (LibDDWAF::Object) -> ::Integer
72
+ def self.ddwaf_object_get_key: (LibDDWAF::Object, SizeTPtr) -> ::String
73
+ def self.ddwaf_object_get_string: (LibDDWAF::Object, SizeTPtr) -> ::String
74
+ def self.ddwaf_object_get_unsigned: (LibDDWAF::Object, SizeTPtr) -> ::Integer
75
+ def self.ddwaf_object_get_signed: (LibDDWAF::Object, SizeTPtr) -> ::Integer
76
+ def self.ddwaf_object_get_index: (LibDDWAF::Object, ::Integer) -> LibDDWAF::Object
77
+
78
+ # freeers
79
+
80
+ def self.ddwaf_object_free: (LibDDWAF::Object) -> void
81
+
82
+ ObjectFree: ::FFI::Function
83
+ ObjectNoFree: ::FFI::Pointer
84
+
85
+ # main handle
86
+
87
+ class Config < ::FFI::Struct
88
+ class Limits < ::FFI::Struct
89
+ end
90
+
91
+ class Obfuscator < ::FFI::Struct
92
+ end
93
+ end
94
+
95
+ class RuleSetInfo < ::FFI::Struct
96
+ end
97
+
98
+ RuleSetInfoNone: ::Datadog::AppSec::WAF::LibDDWAF::RuleSetInfo
99
+
100
+ def self.ddwaf_ruleset_info_free: (RuleSetInfo) -> void
101
+
102
+ def self.ddwaf_init: (top, Config, RuleSetInfo) -> ::FFI::Pointer
103
+ def self.ddwaf_destroy: (::FFI::Pointer) -> void
104
+
105
+ def self.ddwaf_required_addresses: (::FFI::Pointer, UInt32Ptr) -> ::FFI::Pointer
106
+ def self.ddwaf_rule_data_ids: (::FFI::Pointer, UInt32Ptr) -> ::FFI::Pointer
107
+
108
+ # updating
109
+
110
+ DDWAF_RET_CODE: ::FFI::Enum
111
+
112
+ def self.ddwaf_update_rule_data: (::FFI::Pointer, LibDDWAF::Object) -> ::Symbol
113
+ def self.ddwaf_toggle_rules: (::FFI::Pointer, LibDDWAF::Object) -> ::Symbol
114
+
115
+ # running
116
+
117
+ def self.ddwaf_context_init: (::FFI::Pointer) -> ::FFI::Pointer
118
+ def self.ddwaf_context_destroy: (::FFI::Pointer) -> void
119
+
120
+ class ResultActions < ::FFI::Struct
121
+ end
122
+
123
+ class Result < ::FFI::Struct
124
+ end
125
+
126
+ def self.ddwaf_run: (::FFI::Pointer, Object, Result, ::Integer) -> ::Symbol
127
+ def self.ddwaf_result_free: (Result) -> void
128
+
129
+ # logging
130
+
131
+ DDWAF_LOG_LEVEL: ::FFI::Enum
132
+
133
+ type ddwaf_log_level = ::Symbol
134
+
135
+ # TODO: signature is as below but steep 1.1 does not yet support method/proc/block mapping
136
+ # type ddwaf_log_cb = ^(ddwaf_log_level, ::String, ::String, ::Integer, ::FFI::Pointer, ::Integer) -> void
137
+ type ddwaf_log_cb = ::Method | ::Proc
138
+ def self.ddwaf_set_log_cb: (ddwaf_log_cb, ddwaf_log_level) -> bool
139
+
140
+ DEFAULT_MAX_CONTAINER_SIZE: ::Integer
141
+ DEFAULT_MAX_CONTAINER_DEPTH: ::Integer
142
+ DEFAULT_MAX_STRING_LENGTH: ::Integer
143
+
144
+ DDWAF_MAX_CONTAINER_SIZE: ::Integer
145
+ DDWAF_MAX_CONTAINER_DEPTH: ::Integer
146
+ DDWAF_MAX_STRING_LENGTH: ::Integer
147
+
148
+ DDWAF_RUN_TIMEOUT: ::Integer
149
+ end
150
+
151
+ def self.version: () -> ::String
152
+
153
+ type data = String | Symbol | Integer | Float | TrueClass | FalseClass | Array[data] | Hash[String | Symbol, data] | nil
154
+
155
+ def self.ruby_to_object: (data val, ?max_container_size: ::Integer?, ?max_container_depth: ::Integer?, ?max_string_length: ::Integer?, ?coerce: bool?) -> ::Datadog::AppSec::WAF::LibDDWAF::Object
156
+ def self.object_to_ruby: (::Datadog::AppSec::WAF::LibDDWAF::Object obj) -> data
157
+
158
+ self.@logger: ::Logger
159
+ self.@log_callback: LibDDWAF::ddwaf_log_cb
160
+
161
+ def self.log_callback: (LibDDWAF::ddwaf_log_level, ::String, ::String, ::Integer, ::FFI::Pointer, ::Integer) -> void
162
+ def self.logger: () -> ::Logger
163
+ def self.logger=: (::Logger logger) -> void
164
+
165
+ RESULT_CODE: ::Hash[::Symbol, ::Symbol]
166
+
167
+ class Handle
168
+ attr_reader handle_obj: ::FFI::Pointer
169
+ attr_reader ruleset_info: Hash[Symbol, untyped]
170
+
171
+ def initialize: (data rule, ?limits: ::Hash[::Symbol, ::Integer], ?obfuscator: ::Hash[::Symbol, ::String]) -> void
172
+ def finalize: () -> untyped
173
+ def required_addresses: () -> ::Array[::String]
174
+ def update_rule_data: (::Array[untyped]) -> ::Symbol
175
+ def toggle_rules: (::Hash[::String, bool]) -> ::Symbol
176
+
177
+ private
178
+
179
+ @valid: bool
180
+
181
+ def validate!: () -> void
182
+ def invalidate!: () -> void
183
+ def valid?: () -> (nil | bool)
184
+ def valid!: () -> void
185
+
186
+ @retained: Array[untyped]
187
+
188
+ def retained: () -> Array[untyped]
189
+ def retain: (top object) -> void
190
+ def release: (top object) -> void
191
+ end
192
+
193
+ type result_data = Array[untyped] | nil
194
+
195
+ class Result
196
+ attr_reader status: ::Symbol
197
+ attr_reader data: untyped
198
+ attr_reader total_runtime: ::Float
199
+ attr_reader timeout: bool
200
+ attr_reader actions: ::Array[::String]
201
+
202
+ def initialize: (::Symbol, result_data, ::Float, bool, ::Array[::String]) -> void
203
+ end
204
+
205
+ class Context
206
+ attr_reader context_obj: ::FFI::Pointer
207
+
208
+ def initialize: (Handle handle) -> void
209
+ def finalize: () -> void
210
+
211
+ def run: (data input, ?::Integer timeout) -> ::Array[top]
212
+
213
+ private
214
+
215
+ @valid: bool
216
+
217
+ def validate!: () -> void
218
+ def invalidate!: () -> void
219
+ def valid?: () -> (nil | bool)
220
+ def valid!: () -> void
221
+
222
+ @retained: Array[untyped]
223
+
224
+ def retained: () -> Array[untyped]
225
+ def retain: (top object) -> void
226
+ def release: (top object) -> void
227
+ end
228
+ end
229
+ end
230
+ end
data/sig/libddwaf.rbs ADDED
File without changes
@@ -0,0 +1,62 @@
1
+ module FFI
2
+ module Type
3
+ class Builtin
4
+ end
5
+
6
+ class Mapped
7
+ end
8
+ end
9
+
10
+ class AbstractMemory
11
+ def get_array_of_string: (::Integer, ::Integer) -> Array[String]
12
+ def read_bytes: (::Integer) -> ::String
13
+ end
14
+
15
+ class Pointer < AbstractMemory
16
+ NULL: Pointer
17
+
18
+ def null?: () -> bool
19
+ end
20
+
21
+ class MemoryPointer < Pointer
22
+ def self.from_string: (::String) -> MemoryPointer
23
+ end
24
+
25
+ class Enum
26
+ end
27
+
28
+ class Union
29
+ def self.layout: (*(Symbol | Integer)) -> void
30
+ end
31
+
32
+ type union = top # TODO: handle user-defined unions
33
+
34
+ class Struct
35
+ # TODO: layout args are actually "Symbol | Union, Integer, *(Symbol | Union, Integer)"
36
+ def self.layout: (*(Symbol | Integer | union)) -> void
37
+ def self.by_ref: () -> Type::Mapped
38
+ def self.size: () -> Integer
39
+
40
+ def null?: () -> bool
41
+ def initialize: (?Pointer) -> void
42
+ def []: (Symbol) -> untyped
43
+ def []=: (Symbol, untyped) -> untyped
44
+ def pointer: () -> Pointer
45
+ end
46
+
47
+ class Function < Pointer
48
+ end
49
+
50
+ module Library
51
+ # these can be worked around by typedef'ing to a Symbol
52
+ type enum = top # TODO: handle user-defined enum constants
53
+ type ref = top # TODO: handle by_ref references
54
+ type typedef = top # TODO: handle non-builtin types
55
+
56
+ def ffi_lib: (Array[String]) -> void
57
+ def typedef: (ref | Symbol, Symbol) -> (Type::Builtin | Type::Mapped | typedef)
58
+ def attach_function: (Symbol, Array[Symbol | Struct | enum], Symbol | Enum, ?blocking: bool) -> Function
59
+ def callback: (Symbol, Array[Symbol | Enum | Struct], Symbol | Enum) -> Function
60
+ def enum: (*untyped) -> Enum
61
+ end
62
+ end
@@ -0,0 +1,7 @@
1
+ class Gem::Platform
2
+ def self.local: () -> Gem::Platform
3
+
4
+ def os: () -> String
5
+ def cpu: () -> String
6
+ def version: () -> String
7
+ end
@@ -0,0 +1,3 @@
1
+ module Kernel
2
+ def java: () -> untyped
3
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: libddwaf
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.0.2.0
4
+ version: 1.5.1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Datadog, Inc.
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-05-20 00:00:00.000000000 Z
11
+ date: 2022-10-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ffi
@@ -33,9 +33,11 @@ executables: []
33
33
  extensions: []
34
34
  extra_rdoc_files: []
35
35
  files:
36
+ - ".github/workflows/lint.yml"
36
37
  - ".github/workflows/package.yml"
37
38
  - ".github/workflows/test.yml"
38
39
  - ".gitignore"
40
+ - CHANGELOG.md
39
41
  - CONTRIBUTING.md
40
42
  - LICENSE
41
43
  - LICENSE-3rdparty.csv
@@ -43,11 +45,18 @@ files:
43
45
  - LICENSE.BSD3
44
46
  - NOTICE
45
47
  - README.md
48
+ - Steepfile
46
49
  - lib/datadog/appsec/waf.rb
47
50
  - lib/datadog/appsec/waf/version.rb
48
51
  - lib/libddwaf.rb
49
52
  - libddwaf.gemspec
50
- homepage: https://github.com/DataDog/libddwaf
53
+ - sig/datadog/appsec/waf.rbs
54
+ - sig/datadog/appsec/waf/version.rbs
55
+ - sig/libddwaf.rbs
56
+ - vendor/rbs/ffi/0/ffi.rbs
57
+ - vendor/rbs/gem/0/gem.rbs
58
+ - vendor/rbs/jruby/0/jruby.rbs
59
+ homepage: https://github.com/DataDog/libddwaf-rb
51
60
  licenses:
52
61
  - BSD-3-Clause
53
62
  metadata: