libddwaf 1.7.0.0.0 → 1.8.2.0.0

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: bc99efc2a92fb6a560b3e25c8e8b47ebeee5ff1af3e176b70e881d75ad1ade45
4
- data.tar.gz: d121fba8c9f42105f7fef0f40d70670c3d76af98bf935471cf6149ab5e937146
3
+ metadata.gz: 30f298fcc92fb8b2489965b0b4710e22de5b3350a53a7bcd2cde8b08ba093cbc
4
+ data.tar.gz: 88e66343e82297fdb2cb5471be19dbd84642128c8e899c77b98f67932688a21a
5
5
  SHA512:
6
- metadata.gz: ea81a4b721acc2f0bd3d4d46575c89125a0c63660ea80c0afe6f2d54feb1cc1f07aa1e55ea8a4c263dd84319483aa15037f593efe70e220d4ebe0a90232cb168
7
- data.tar.gz: cc6e611202a9f8c978932e5a05051c0b60c51c8009ccf9fbc022c977a332fdcaf7d8befa793c7c7685c298dec0e1e753ea656b65bb2da2d83fdf0a5520702935
6
+ metadata.gz: b6518befb55b60e1ac680a588ebaa30b913e775e54af30d1b99529fefd05d1943c4bc6c09adcaa2683a4a3367c987adda9fdf309f1967d29a8b41ec1a5c152e9
7
+ data.tar.gz: 561d74e78f7699287a2981599fb448438dadd6f76424d1822adf6f3d2ebe76cfc56f93c19bbac9ee3d4b501040fc0c54e533919d3b57a87a11ad8d13d042bcd5
data/CHANGELOG.md CHANGED
@@ -1,3 +1,10 @@
1
+ # 2023-03-03 v1.8.2.0.0
2
+
3
+ - Update to libddwaf 1.8.2
4
+ - Added Waf::Handle#merge method
5
+ - Remove Waf::Handle#update_rule_data and Waf::Handle#toggle_rules methods
6
+ - Remove WAF::LibDDWAF.ddwaf_required_rule_data_ids method
7
+
1
8
  # 2023-02-03 v1.7.0.0.0
2
9
 
3
10
  - Update to libddwaf 1.7.0
@@ -2,7 +2,7 @@ module Datadog
2
2
  module AppSec
3
3
  module WAF
4
4
  module VERSION
5
- BASE_STRING = '1.7.0'
5
+ BASE_STRING = '1.8.2'
6
6
  STRING = "#{BASE_STRING}.0.0"
7
7
  MINIMUM_RUBY_VERSION = '2.1'
8
8
  end
@@ -228,10 +228,10 @@ module Datadog
228
228
  attach_function :ddwaf_ruleset_info_free, [:ddwaf_ruleset_info], :void
229
229
 
230
230
  attach_function :ddwaf_init, [:ddwaf_rule, :ddwaf_config, :ddwaf_ruleset_info], :ddwaf_handle
231
+ attach_function :ddwaf_update, [:ddwaf_handle, :ddwaf_object, :ddwaf_ruleset_info], :ddwaf_handle
231
232
  attach_function :ddwaf_destroy, [:ddwaf_handle], :void
232
233
 
233
234
  attach_function :ddwaf_required_addresses, [:ddwaf_handle, UInt32Ptr], :charptrptr
234
- attach_function :ddwaf_required_rule_data_ids, [:ddwaf_handle, UInt32Ptr], :charptrptr
235
235
 
236
236
  # updating
237
237
 
@@ -242,9 +242,6 @@ module Datadog
242
242
  :ddwaf_match, 1
243
243
  typedef DDWAF_RET_CODE, :ddwaf_ret_code
244
244
 
245
- attach_function :ddwaf_update_rule_data, [:ddwaf_handle, :ddwaf_object], :ddwaf_ret_code
246
- attach_function :ddwaf_toggle_rules, [:ddwaf_handle, :ddwaf_object], :ddwaf_ret_code
247
-
248
245
  # running
249
246
 
250
247
  typedef :pointer, :ddwaf_context
@@ -478,9 +475,7 @@ module Datadog
478
475
  }
479
476
 
480
477
  class Handle
481
- attr_reader :handle_obj
482
-
483
- attr_reader :ruleset_info
478
+ attr_reader :handle_obj, :ruleset_info, :config
484
479
 
485
480
  def initialize(rule, limits: {}, obfuscator: {})
486
481
  rule_obj = Datadog::AppSec::WAF.ruby_to_object(rule)
@@ -492,7 +487,6 @@ module Datadog
492
487
  if config_obj.null?
493
488
  fail LibDDWAF::Error, 'Could not create config struct'
494
489
  end
495
- retain(config_obj)
496
490
 
497
491
  config_obj[:limits][:max_container_size] = limits[:max_container_size] || LibDDWAF::DEFAULT_MAX_CONTAINER_SIZE
498
492
  config_obj[:limits][:max_container_depth] = limits[:max_container_depth] || LibDDWAF::DEFAULT_MAX_CONTAINER_DEPTH
@@ -501,6 +495,8 @@ module Datadog
501
495
  config_obj[:obfuscator][:value_regex] = FFI::MemoryPointer.from_string(obfuscator[:value_regex]) if obfuscator[:value_regex]
502
496
  config_obj[:free_fn] = Datadog::AppSec::WAF::LibDDWAF::ObjectNoFree
503
497
 
498
+ @config = config_obj
499
+
504
500
  ruleset_info = LibDDWAF::RuleSetInfo.new
505
501
 
506
502
  @handle_obj = Datadog::AppSec::WAF::LibDDWAF.ddwaf_init(rule_obj, config_obj, ruleset_info)
@@ -539,26 +535,35 @@ module Datadog
539
535
  list.get_array_of_string(0, count[:value])
540
536
  end
541
537
 
542
- def update_rule_data(data)
538
+ def merge(data)
543
539
  data_obj = Datadog::AppSec::WAF.ruby_to_object(data, coerce: false)
544
- res = Datadog::AppSec::WAF::LibDDWAF.ddwaf_update_rule_data(@handle_obj, data_obj)
540
+ ruleset_info = LibDDWAF::RuleSetInfo.new
541
+ new_handle = Datadog::AppSec::WAF::LibDDWAF.ddwaf_update(handle_obj, data_obj, ruleset_info)
545
542
 
546
- RESULT_CODE[res]
543
+ return if new_handle.null?
544
+
545
+ info = {
546
+ loaded: ruleset_info[:loaded],
547
+ failed: ruleset_info[:failed],
548
+ errors: WAF.object_to_ruby(ruleset_info[:errors]),
549
+ version: ruleset_info[:version],
550
+ }
551
+ new_from_handle(new_handle, info, config)
547
552
  ensure
548
553
  Datadog::AppSec::WAF::LibDDWAF.ddwaf_object_free(data_obj) if data_obj
554
+ Datadog::AppSec::WAF::LibDDWAF.ddwaf_ruleset_info_free(ruleset_info) if ruleset_info
549
555
  end
550
556
 
551
- def toggle_rules(map)
552
- map_obj = Datadog::AppSec::WAF.ruby_to_object(map, coerce: false)
553
- res = Datadog::AppSec::WAF::LibDDWAF.ddwaf_toggle_rules(@handle_obj, map_obj)
557
+ private
554
558
 
555
- RESULT_CODE[res]
556
- ensure
557
- Datadog::AppSec::WAF::LibDDWAF.ddwaf_object_free(map_obj) if map_obj
559
+ def new_from_handle(handle_object, info, config)
560
+ obj = self.class.allocate
561
+ obj.instance_variable_set(:@handle_obj, handle_object)
562
+ obj.instance_variable_set(:@ruleset_info, info)
563
+ obj.instance_variable_set(:@config, config)
564
+ obj
558
565
  end
559
566
 
560
- private
561
-
562
567
  def validate!
563
568
  @valid = true
564
569
  end
@@ -576,18 +581,6 @@ module Datadog
576
581
 
577
582
  fail LibDDWAF::Error, "Attempt to use an invalid instance: #{inspect}"
578
583
  end
579
-
580
- def retained
581
- @retained ||= []
582
- end
583
-
584
- def retain(object)
585
- retained << object
586
- end
587
-
588
- def release(object)
589
- retained.delete(object)
590
- end
591
584
  end
592
585
 
593
586
  class Result
@@ -101,6 +101,7 @@ module Datadog
101
101
  def self.ddwaf_ruleset_info_free: (RuleSetInfo) -> void
102
102
 
103
103
  def self.ddwaf_init: (top, Config, RuleSetInfo) -> ::FFI::Pointer
104
+ def self.ddwaf_update: (::FFI::Pointer, LibDDWAF::Object, RuleSetInfo) -> ::FFI::Pointer
104
105
  def self.ddwaf_destroy: (::FFI::Pointer) -> void
105
106
 
106
107
  def self.ddwaf_required_addresses: (::FFI::Pointer, UInt32Ptr) -> ::FFI::Pointer
@@ -110,9 +111,6 @@ module Datadog
110
111
 
111
112
  DDWAF_RET_CODE: ::FFI::Enum
112
113
 
113
- def self.ddwaf_update_rule_data: (::FFI::Pointer, LibDDWAF::Object) -> ::Symbol
114
- def self.ddwaf_toggle_rules: (::FFI::Pointer, LibDDWAF::Object) -> ::Symbol
115
-
116
114
  # running
117
115
 
118
116
  def self.ddwaf_context_init: (::FFI::Pointer) -> ::FFI::Pointer
@@ -168,27 +166,22 @@ module Datadog
168
166
  class Handle
169
167
  attr_reader handle_obj: ::FFI::Pointer
170
168
  attr_reader ruleset_info: Hash[Symbol, untyped]
169
+ attr_reader config: WAF::LibDDWAF::Config
171
170
 
172
171
  def initialize: (data rule, ?limits: ::Hash[::Symbol, ::Integer], ?obfuscator: ::Hash[::Symbol, ::String]) -> void
173
172
  def finalize: () -> untyped
174
173
  def required_addresses: () -> ::Array[::String]
175
- def update_rule_data: (::Array[untyped]) -> ::Symbol
176
- def toggle_rules: (::Hash[::String, bool]) -> ::Symbol
174
+ def update: (untyped data) -> Handle
177
175
 
178
176
  private
179
177
 
180
178
  @valid: bool
181
179
 
180
+ def new_from_handle: (::FFI::Pointer handle_object, Hash[Symbol, untyped] info, WAF::LibDDWAF::Config config) -> untyped
182
181
  def validate!: () -> void
183
182
  def invalidate!: () -> void
184
183
  def valid?: () -> (nil | bool)
185
184
  def valid!: () -> void
186
-
187
- @retained: Array[untyped]
188
-
189
- def retained: () -> Array[untyped]
190
- def retain: (top object) -> void
191
- def release: (top object) -> void
192
185
  end
193
186
 
194
187
  type result_data = Array[untyped] | nil
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.7.0.0.0
4
+ version: 1.8.2.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: 2023-03-02 00:00:00.000000000 Z
11
+ date: 2023-03-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ffi