libddwaf 1.7.0.0.0-arm64-darwin → 1.9.0.0.0-arm64-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: 6a86102661b2802b6529f9b31ae4aed0ae4177a754909ae8e7946bdd3e20b1e0
4
- data.tar.gz: fa1d2e4a3868adf8d276909a4bb428d32166049594f33bfd59f6ce6d4a1ab43b
3
+ metadata.gz: 18acb731273f2a665f29c35cc0c26439793e05447efa97c947ddf265b689eaa6
4
+ data.tar.gz: 67e3d1ddad8b95994387bb6dbf6779d230d357b87ce0d9adfcdea284b9c56462
5
5
  SHA512:
6
- metadata.gz: a4875e3cc1983a73b0b4fc81f04ded91670d438df4fe08dbd6f4221cad7d544a6a4fac4f27d9c7db26d8fc39508018efebc4546ed5912b9160d3a113e2fbe826
7
- data.tar.gz: e3d6b96c3e7f2ea57d7ff0e68d741a3cb264c204462f98da7799026cd003202b7a1cce78f4c8d8778e290f6e62df7872feae98aa35c6ad5e422fea2395e16f3f
6
+ metadata.gz: 9a30225d0d85e0d9986b6047b0f84b3ecb7fe9c308c59ce3df5e61bfc1aa41d242f78dcd7732c50037038bd73ad1c1ef4926e4c473d5aea59f94ebde2ff62472
7
+ data.tar.gz: 1563fdfa7c38ca57cd6116d92dcb363aefc26e61aedca3077ceeb12cf60809e7d8793d1b25090b543e9b852aae7764787ff956bc1698a6f86c0f0536bbde85bd
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.9.0'
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.9.0.0.0
5
5
  platform: arm64-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-05-17 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-arm64/lib/libddwaf.dylib
45
+ - vendor/libddwaf/libddwaf-1.9.0-darwin-arm64/lib/libddwaf.dylib
46
46
  homepage: https://github.com/DataDog/libddwaf-rb
47
47
  licenses:
48
48
  - BSD-3-Clause
@@ -63,7 +63,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
63
63
  - !ruby/object:Gem::Version
64
64
  version: 2.0.0
65
65
  requirements: []
66
- rubygems_version: 3.4.7
66
+ rubygems_version: 3.4.12
67
67
  signing_key:
68
68
  specification_version: 4
69
69
  summary: Datadog WAF