libddwaf 1.7.0.0.0-x86_64-darwin → 1.8.2.0.0-x86_64-darwin

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: 6036d798d24992fa793e69fcefd621d448de78c3a20fd25cf3f1bd40f676a4f2
4
- data.tar.gz: e59bd2920b42f8ac3f4918cd056dfdb9893947c597955b03b73038232b9b1f0a
3
+ metadata.gz: 192230eb7277c8c2e0407fad725e1d53cc322c201aef53bc6b83253abc9cb334
4
+ data.tar.gz: ed4ddd1838d98e7efc178e1bc14fcbc44b2d796b7467feb9de46940d2feb1a84
5
5
  SHA512:
6
- metadata.gz: b84a32afd2ed4602defb2fb5e4fb42d51a00a6983cd905d79c2f871e9573f59bbbf87ff21fee472280a1bfedb7322536b4a66e50a795d1e58c1a669e6979b8b5
7
- data.tar.gz: b1fbaefaf814d6caec1ce158c2ffc2f4ad91b78a52951474a6fab57e7622cb6c7d2e75d3e3e215135cfcb2a711db605ca6bb37038cc27262b6b20f760eb92204
6
+ metadata.gz: 638c819b2b4f881b41a783bbf87cdcf5dabfd2aa9f9b8a0c7115cb5efcfe9a53f7fd816139763e2b2241a90d48626cf9db995d16e2d9306b6a03b42dbab0e86d
7
+ data.tar.gz: 5de45a95559462efcfb1c9c16ae4e1e40803747a66b9235e813f0ea4e06d63f81b6e4ec03c846fa3f78a01dd0e124fa9fe4baa70eb43564f6a543a5f5b7ec761
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
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: x86_64-darwin
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
@@ -42,7 +42,7 @@ files:
42
42
  - lib/datadog/appsec/waf.rb
43
43
  - lib/datadog/appsec/waf/version.rb
44
44
  - lib/libddwaf.rb
45
- - vendor/libddwaf/libddwaf-1.7.0-darwin-x86_64/lib/libddwaf.dylib
45
+ - vendor/libddwaf/libddwaf-1.8.2-darwin-x86_64/lib/libddwaf.dylib
46
46
  homepage: https://github.com/DataDog/libddwaf-rb
47
47
  licenses:
48
48
  - BSD-3-Clause