libddwaf 1.3.0.0.0 → 1.5.1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,13 @@
1
+ module Datadog
2
+ module AppSec
3
+ module WAF
4
+ module VERSION
5
+ BASE_STRING: ::String
6
+
7
+ STRING: ::String
8
+
9
+ MINIMUM_RUBY_VERSION: ::String
10
+ end
11
+ end
12
+ end
13
+ end
@@ -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.0.0
4
+ version: 1.5.1.0.1
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-04-29 00:00:00.000000000 Z
11
+ date: 2023-02-01 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: