libddwaf 1.0.14.2.0.beta1 → 1.3.0.0.0.beta1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7b29660223d4cbaa2ae55fa533ab6f4b5693f9a398b8eaeb5591f44185a9dde3
4
- data.tar.gz: 8a49e7b4b1c300b24383045bb6186d2bb82e7865b0b42e6eea56ea08078d923d
3
+ metadata.gz: 16ccaee2b6e8daaf1f8e9a36735efcbae676e9187b9f05b4e5fe71caebb56e14
4
+ data.tar.gz: 65b0daae53f934308f54f8d5eb68a9364b41a79d663e861ab3f467717468df6c
5
5
  SHA512:
6
- metadata.gz: 0d1b055dad77321607a85b4c9cdf363dc9720c0a68545243f71d76c0f673c8f2ddddd0df10e3b8a48496e33e67b620e5a88b0d880b1686b7847d1da1388f4c13
7
- data.tar.gz: 7246775ac2c4fbe7336efdd4e4a3e278b739725e054865f8ad7200289f8f10de368a8caa0b324d05b5018fecf8f56c5a585e0308786006ae0de5c8e7a9b64c2e
6
+ metadata.gz: 0b88329d06a6418bd932019f3d68a8802728f240733f7961e38b9c28282eebc93d83c9dd6d8d2fbd626fbfbec0b2c20886b9985621c33031dac8fd104ef48814
7
+ data.tar.gz: 46315d9182a5ed04064e9599a6df3fc2cbfbdc2a5a0f2a47df55a5c734b3ed2ad9cbaa033916615539d7d6fcc70ba40048e2d972e86a7ea6774bbc79d24653aa
@@ -2,8 +2,8 @@ module Datadog
2
2
  module AppSec
3
3
  module WAF
4
4
  module VERSION
5
- BASE_STRING = '1.0.14'
6
- STRING = "#{BASE_STRING}.2.0.beta1"
5
+ BASE_STRING = '1.3.0'
6
+ STRING = "#{BASE_STRING}.0.0.beta1"
7
7
  MINIMUM_RUBY_VERSION = '2.1'
8
8
  end
9
9
  end
@@ -73,6 +73,25 @@ module Datadog
73
73
  :ddwaf_obj_map, 1 << 4
74
74
 
75
75
  typedef :pointer, :charptr
76
+ typedef :pointer, :charptrptr
77
+
78
+ class UInt32Ptr < ::FFI::Struct
79
+ layout :value, :uint32
80
+ end
81
+
82
+ typedef UInt32Ptr.by_ref, :uint32ptr
83
+
84
+ class UInt64Ptr < ::FFI::Struct
85
+ layout :value, :uint64
86
+ end
87
+
88
+ typedef UInt64Ptr.by_ref, :uint64ptr
89
+
90
+ class SizeTPtr < ::FFI::Struct
91
+ layout :value, :size_t
92
+ end
93
+
94
+ typedef SizeTPtr.by_ref, :sizeptr
76
95
 
77
96
  class ObjectValueUnion < ::FFI::Union
78
97
  layout :stringValue, :charptr,
@@ -91,6 +110,8 @@ module Datadog
91
110
 
92
111
  typedef Object.by_ref, :ddwaf_object
93
112
 
113
+ ## setters
114
+
94
115
  attach_function :ddwaf_object_invalid, [:ddwaf_object], :ddwaf_object
95
116
  attach_function :ddwaf_object_string, [:ddwaf_object, :string], :ddwaf_object
96
117
  attach_function :ddwaf_object_stringl, [:ddwaf_object, :charptr, :size_t], :ddwaf_object
@@ -108,6 +129,19 @@ module Datadog
108
129
  attach_function :ddwaf_object_map_addl, [:ddwaf_object, :charptr, :size_t, :pointer], :bool
109
130
  attach_function :ddwaf_object_map_addl_nc, [:ddwaf_object, :charptr, :size_t, :pointer], :bool
110
131
 
132
+ ## getters
133
+
134
+ attach_function :ddwaf_object_type, [:ddwaf_object], DDWAF_OBJ_TYPE
135
+ attach_function :ddwaf_object_size, [:ddwaf_object], :uint64
136
+ attach_function :ddwaf_object_length, [:ddwaf_object], :size_t
137
+ attach_function :ddwaf_object_get_key, [:ddwaf_object, :sizeptr], :charptr
138
+ attach_function :ddwaf_object_get_string, [:ddwaf_object, :sizeptr], :charptr
139
+ attach_function :ddwaf_object_get_unsigned, [:ddwaf_object], :uint64
140
+ attach_function :ddwaf_object_get_signed, [:ddwaf_object], :int64
141
+ attach_function :ddwaf_object_get_index, [:ddwaf_object, :size_t], :ddwaf_object
142
+
143
+ ## freeers
144
+
111
145
  ObjectFree = attach_function :ddwaf_object_free, [:ddwaf_object], :void
112
146
  ObjectNoFree = ::FFI::Pointer::NULL
113
147
 
@@ -117,17 +151,39 @@ module Datadog
117
151
  typedef Object.by_ref, :ddwaf_rule
118
152
 
119
153
  class Config < ::FFI::Struct
120
- layout :maxArrayLength, :uint64,
121
- :maxMapDepth, :uint64,
122
- :maxTimeStore, :uint64
154
+ class Limits < ::FFI::Struct
155
+ layout :max_container_size, :uint32,
156
+ :max_container_depth, :uint32,
157
+ :max_string_length, :uint32
158
+ end
159
+
160
+ class Obfuscator < ::FFI::Struct
161
+ layout :key_regex, :string,
162
+ :value_regex, :string
163
+ end
164
+
165
+ layout :limits, Limits,
166
+ :obfuscator, Obfuscator
123
167
  end
124
168
 
125
169
  typedef Config.by_ref, :ddwaf_config
126
170
 
127
- attach_function :ddwaf_init, [:ddwaf_rule, :ddwaf_config], :ddwaf_handle
171
+ class RuleSetInfo < ::FFI::Struct
172
+ layout :loaded, :uint16,
173
+ :failed, :uint16,
174
+ :errors, Object,
175
+ :version, :string
176
+ end
177
+
178
+ typedef RuleSetInfo.by_ref, :ddwaf_ruleset_info
179
+ RuleSetInfoNone = Datadog::AppSec::WAF::LibDDWAF::RuleSetInfo.new(::FFI::Pointer::NULL)
180
+
181
+ attach_function :ddwaf_ruleset_info_free, [:ddwaf_ruleset_info], :void
182
+
183
+ attach_function :ddwaf_init, [:ddwaf_rule, :ddwaf_config, :ddwaf_ruleset_info], :ddwaf_handle
128
184
  attach_function :ddwaf_destroy, [:ddwaf_handle], :void
129
185
 
130
- attach_function :ddwaf_required_addresses, [:ddwaf_handle, :pointer], :pointer
186
+ attach_function :ddwaf_required_addresses, [:ddwaf_handle, :uint32ptr], :charptrptr
131
187
 
132
188
  # running
133
189
 
@@ -138,19 +194,17 @@ module Datadog
138
194
  attach_function :ddwaf_context_init, [:ddwaf_handle, :ddwaf_object_free_fn], :ddwaf_context
139
195
  attach_function :ddwaf_context_destroy, [:ddwaf_context], :void
140
196
 
141
- DDWAF_RET_CODE = enum :ddwaf_err_internal, -4,
142
- :ddwaf_err_invalid_object, -3,
143
- :ddwaf_err_invalid_argument, -2,
144
- :ddwaf_err_timeout, -1,
197
+ DDWAF_RET_CODE = enum :ddwaf_err_internal, -3,
198
+ :ddwaf_err_invalid_object, -2,
199
+ :ddwaf_err_invalid_argument, -1,
145
200
  :ddwaf_good, 0,
146
201
  :ddwaf_monitor, 1,
147
202
  :ddwaf_block, 2
148
203
 
149
204
  class Result < ::FFI::Struct
150
- layout :action, DDWAF_RET_CODE,
205
+ layout :timeout, :bool,
151
206
  :data, :string,
152
- :perfData, :string,
153
- :perfTotalRuntime, :uint32 # in us
207
+ :total_runtime, :uint64
154
208
  end
155
209
 
156
210
  typedef Result.by_ref, :ddwaf_result
@@ -253,13 +307,7 @@ module Datadog
253
307
 
254
308
  obj
255
309
  else
256
- obj = LibDDWAF::Object.new
257
- res = LibDDWAF.ddwaf_object_invalid(obj)
258
- if res.null?
259
- fail LibDDWAF::Error, "Could not convert into object: #{val}"
260
- end
261
-
262
- obj
310
+ ruby_to_object(''.freeze)
263
311
  end
264
312
  end
265
313
 
@@ -293,7 +341,7 @@ module Datadog
293
341
 
294
342
  def self.logger=(logger)
295
343
  @log_cb = proc do |level, func, file, line, message, len|
296
- logger.debug { { level: level, func: func, file: file, message: message.read_bytes(len) }.inspect }
344
+ logger.debug { { level: level, func: func, file: file, line: line, message: message.read_bytes(len) }.inspect }
297
345
  end
298
346
 
299
347
  Datadog::AppSec::WAF::LibDDWAF.ddwaf_set_log_cb(@log_cb, :ddwaf_log_trace)
@@ -302,9 +350,9 @@ module Datadog
302
350
  class Handle
303
351
  attr_reader :handle_obj
304
352
 
305
- DEFAULT_MAX_ARRAY_LENGTH = 0
306
- DEFAULT_MAX_MAP_DEPTH = 0
307
- DEFAULT_MAX_TIME_STORE = 0
353
+ DEFAULT_MAX_CONTAINER_SIZE = 0
354
+ DEFAULT_MAX_CONTAINER_DEPTH = 0
355
+ DEFAULT_MAX_STRING_LENGTH = 0
308
356
 
309
357
  def initialize(rule, config = {})
310
358
  rule_obj = Datadog::AppSec::WAF.ruby_to_object(rule)
@@ -317,17 +365,20 @@ module Datadog
317
365
  fail LibDDWAF::Error, 'Could not create config struct'
318
366
  end
319
367
 
320
- config_obj[:maxArrayLength] = config[:max_array_length] || DEFAULT_MAX_ARRAY_LENGTH
321
- config_obj[:maxMapDepth] = config[:max_map_depth] || DEFAULT_MAX_MAP_DEPTH
322
- config_obj[:maxTimeStore] = config[:max_time_store] || DEFAULT_MAX_TIME_STORE
368
+ config_obj[:limits][:max_container_size] = config[:max_container_size] || DEFAULT_MAX_CONTAINER_SIZE
369
+ config_obj[:limits][:max_container_depth] = config[:max_container_depth] || DEFAULT_MAX_CONTAINER_DEPTH
370
+ config_obj[:limits][:max_string_length] = config[:max_string_length] || DEFAULT_MAX_STRING_LENGTH
371
+
372
+ ruleset_info = LibDDWAF::RuleSetInfoNone
323
373
 
324
- @handle_obj = Datadog::AppSec::WAF::LibDDWAF.ddwaf_init(rule_obj, config_obj)
374
+ @handle_obj = Datadog::AppSec::WAF::LibDDWAF.ddwaf_init(rule_obj, config_obj, ruleset_info)
325
375
  if @handle_obj.null?
326
376
  fail LibDDWAF::Error, 'Could not create handle'
327
377
  end
328
378
 
329
379
  ObjectSpace.define_finalizer(self, Handle.finalizer(handle_obj))
330
380
  ensure
381
+ Datadog::AppSec::WAF::LibDDWAF.ddwaf_ruleset_info_free(ruleset_info) if ruleset_info
331
382
  Datadog::AppSec::WAF::LibDDWAF.ddwaf_object_free(rule_obj) if rule_obj
332
383
  end
333
384
 
@@ -338,7 +389,7 @@ module Datadog
338
389
  end
339
390
  end
340
391
 
341
- Result = Struct.new(:action, :data, :perf_data, :perf_total_runtime)
392
+ Result = Struct.new(:action, :data, :total_runtime, :timeout)
342
393
 
343
394
  class Context
344
395
  attr_reader :context_obj
@@ -371,7 +422,6 @@ module Datadog
371
422
  ddwaf_err_internal: :err_internal,
372
423
  ddwaf_err_invalid_object: :err_invalid_object,
373
424
  ddwaf_err_invalid_argument: :err_invalid_argument,
374
- ddwaf_err_timeout: :err_invalid_object,
375
425
  ddwaf_good: :good,
376
426
  ddwaf_monitor: :monitor,
377
427
  ddwaf_block: :block,
@@ -394,10 +444,10 @@ module Datadog
394
444
  code = Datadog::AppSec::WAF::LibDDWAF.ddwaf_run(@context_obj, input_obj, result_obj, timeout)
395
445
 
396
446
  result = Result.new(
397
- ACTION_MAP_OUT[result_obj[:action]],
447
+ ACTION_MAP_OUT[code],
398
448
  (JSON.parse(result_obj[:data]) if result_obj[:data] != nil),
399
- (JSON.parse(result_obj[:perfData]) if result_obj[:perfData] != nil),
400
- result_obj[:perfTotalRuntime],
449
+ result_obj[:total_runtime],
450
+ result_obj[:timeout],
401
451
  )
402
452
 
403
453
  [ACTION_MAP_OUT[code], result]
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.0.14.2.0.beta1
4
+ version: 1.3.0.0.0.beta1
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-02-07 00:00:00.000000000 Z
11
+ date: 2022-04-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ffi