ddtrace 1.11.0 → 1.11.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +13 -1
- data/lib/datadog/appsec/assets/blocked.html +1 -1
- data/lib/datadog/appsec/processor/rule_loader.rb +3 -3
- data/lib/datadog/appsec/processor/rule_merger.rb +7 -27
- data/lib/datadog/appsec/remote.rb +6 -10
- data/lib/datadog/appsec/response.rb +18 -10
- data/lib/datadog/core/configuration/components.rb +9 -3
- data/lib/datadog/core/telemetry/client.rb +1 -1
- data/lib/datadog/core/telemetry/http/transport.rb +1 -0
- data/lib/ddtrace/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fab36ba8f93f2c9b067c2fcb4916d6aff5ef906d6608671f035490f3b287c6c9
|
4
|
+
data.tar.gz: 0f62cd63c95aa669f8981cb79c56e49228351a01920c142a36170a9443b60400
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6a747def8ca5cef1d31d72fff939567669c72db53b8c30a3b7cd14df8b52da21a4f5d18efbeba1a22686196923ed49195194b7a9136840428d73f4f8e985da67
|
7
|
+
data.tar.gz: 72f36c83fac54b4d503d38f40759a89d400c5d70b24fbcb7ebc8a291d603c0bab07f28ca58082b732afb66960fe9d6e7ab7148147f0e1b727bbaeb4f08a885a6
|
data/CHANGELOG.md
CHANGED
@@ -2,6 +2,14 @@
|
|
2
2
|
|
3
3
|
## [Unreleased]
|
4
4
|
|
5
|
+
## [1.11.1] - 2023-05-03
|
6
|
+
|
7
|
+
### Fixed
|
8
|
+
|
9
|
+
* Appsec: Remove misreported `ASM_CUSTOM_RULES` capability ([#2829][])
|
10
|
+
* Appsec: Fix block response content negotiation ([#2824][])
|
11
|
+
* Appsec: Fix incorrect remote configuration payload key handling ([#2822][])
|
12
|
+
|
5
13
|
## [1.11.0] - 2023-04-27
|
6
14
|
|
7
15
|
### Highlights
|
@@ -2402,7 +2410,8 @@ Release notes: https://github.com/DataDog/dd-trace-rb/releases/tag/v0.3.1
|
|
2402
2410
|
|
2403
2411
|
Git diff: https://github.com/DataDog/dd-trace-rb/compare/v0.3.0...v0.3.1
|
2404
2412
|
|
2405
|
-
[Unreleased]: https://github.com/DataDog/dd-trace-rb/compare/v1.11.
|
2413
|
+
[Unreleased]: https://github.com/DataDog/dd-trace-rb/compare/v1.11.1...master
|
2414
|
+
[1.11.1]: https://github.com/DataDog/dd-trace-rb/compare/v1.10.1...v1.11.1
|
2406
2415
|
[1.11.0]: https://github.com/DataDog/dd-trace-rb/compare/v1.10.1...v1.11.0
|
2407
2416
|
[1.11.0.beta1]: https://github.com/DataDog/dd-trace-rb/compare/v1.10.1...v1.11.0.beta1
|
2408
2417
|
[1.10.1]: https://github.com/DataDog/dd-trace-rb/compare/v1.10.0...v1.10.1
|
@@ -3457,6 +3466,9 @@ Git diff: https://github.com/DataDog/dd-trace-rb/compare/v0.3.0...v0.3.1
|
|
3457
3466
|
[#2805]: https://github.com/DataDog/dd-trace-rb/issues/2805
|
3458
3467
|
[#2806]: https://github.com/DataDog/dd-trace-rb/issues/2806
|
3459
3468
|
[#2810]: https://github.com/DataDog/dd-trace-rb/issues/2810
|
3469
|
+
[#2822]: https://github.com/DataDog/dd-trace-rb/issues/2822
|
3470
|
+
[#2824]: https://github.com/DataDog/dd-trace-rb/issues/2824
|
3471
|
+
[#2829]: https://github.com/DataDog/dd-trace-rb/issues/2829
|
3460
3472
|
[@AdrianLC]: https://github.com/AdrianLC
|
3461
3473
|
[@Azure7111]: https://github.com/Azure7111
|
3462
3474
|
[@BabyGroot]: https://github.com/BabyGroot
|
@@ -41,10 +41,10 @@ module Datadog
|
|
41
41
|
|
42
42
|
def load_data(ip_denylist: [], user_id_denylist: [])
|
43
43
|
data = []
|
44
|
-
data <<
|
45
|
-
data <<
|
44
|
+
data << [denylist_data('blocked_ips', ip_denylist)] if ip_denylist.any?
|
45
|
+
data << [denylist_data('blocked_users', user_id_denylist)] if user_id_denylist.any?
|
46
46
|
|
47
|
-
data
|
47
|
+
data
|
48
48
|
end
|
49
49
|
|
50
50
|
private
|
@@ -17,12 +17,12 @@ module Datadog
|
|
17
17
|
end
|
18
18
|
|
19
19
|
class << self
|
20
|
-
def merge(rules:, data:
|
20
|
+
def merge(rules:, data: [], overrides: [], exclusions: [])
|
21
21
|
combined_rules = combine_rules(rules)
|
22
22
|
|
23
|
-
rules_data = combine_data(data) if data
|
24
|
-
rules_overrides = combine_overrides(overrides) if overrides
|
25
|
-
rules_exclusions = combine_exclusions(exclusions) if exclusions
|
23
|
+
rules_data = combine_data(data) if data.any?
|
24
|
+
rules_overrides = combine_overrides(overrides) if overrides.any?
|
25
|
+
rules_exclusions = combine_exclusions(exclusions) if exclusions.any?
|
26
26
|
|
27
27
|
combined_rules['rules_data'] = rules_data if rules_data
|
28
28
|
combined_rules['rules_override'] = rules_overrides if rules_overrides
|
@@ -62,7 +62,7 @@ module Datadog
|
|
62
62
|
result = []
|
63
63
|
|
64
64
|
data.each do |data_entry|
|
65
|
-
data_entry
|
65
|
+
data_entry.each do |value|
|
66
66
|
existing_data = result.find { |x| x['id'] == value['id'] }
|
67
67
|
|
68
68
|
if existing_data && existing_data['type'] == value['type']
|
@@ -113,31 +113,11 @@ module Datadog
|
|
113
113
|
end
|
114
114
|
|
115
115
|
def combine_overrides(overrides)
|
116
|
-
|
117
|
-
|
118
|
-
overrides.each do |override|
|
119
|
-
override['rules_override'].each do |rule_override|
|
120
|
-
rules_override << rule_override
|
121
|
-
end
|
122
|
-
end
|
123
|
-
|
124
|
-
return if rules_override.empty?
|
125
|
-
|
126
|
-
rules_override
|
116
|
+
overrides.flatten
|
127
117
|
end
|
128
118
|
|
129
119
|
def combine_exclusions(exclusions)
|
130
|
-
|
131
|
-
|
132
|
-
exclusions.each do |exclusion|
|
133
|
-
exclusion['exclusions'].each do |rule_exclusion|
|
134
|
-
rules_exclusions << rule_exclusion
|
135
|
-
end
|
136
|
-
end
|
137
|
-
|
138
|
-
return if rules_exclusions.empty?
|
139
|
-
|
140
|
-
rules_exclusions
|
120
|
+
exclusions.flatten
|
141
121
|
end
|
142
122
|
end
|
143
123
|
end
|
@@ -26,7 +26,6 @@ module Datadog
|
|
26
26
|
ASM_CAPABILITIES = [
|
27
27
|
CAP_ASM_IP_BLOCKING,
|
28
28
|
CAP_ASM_USER_BLOCKING,
|
29
|
-
CAP_ASM_CUSTOM_RULES,
|
30
29
|
CAP_ASM_EXCLUSIONS,
|
31
30
|
CAP_ASM_REQUEST_BLOCKING,
|
32
31
|
CAP_ASM_RESPONSE_BLOCKING,
|
@@ -48,7 +47,6 @@ module Datadog
|
|
48
47
|
remote_features_enabled? ? ASM_PRODUCTS : []
|
49
48
|
end
|
50
49
|
|
51
|
-
# rubocop:disable Metrics/MethodLength
|
52
50
|
def receivers
|
53
51
|
return [] unless remote_features_enabled?
|
54
52
|
|
@@ -63,18 +61,17 @@ module Datadog
|
|
63
61
|
overrides = []
|
64
62
|
exclusions = []
|
65
63
|
|
66
|
-
asm_data_config_types = ['blocked_ips', 'blocked_users']
|
67
|
-
asm_overrides_config_types = ['blocking', 'disabled_rules']
|
68
|
-
|
69
64
|
repository.contents.each do |content|
|
65
|
+
parsed_content = parse_content(content)
|
66
|
+
|
70
67
|
case content.path.product
|
71
68
|
when 'ASM_DD'
|
72
|
-
rules <<
|
69
|
+
rules << parsed_content
|
73
70
|
when 'ASM_DATA'
|
74
|
-
data <<
|
71
|
+
data << parsed_content['rules_data'] if parsed_content['rules_data']
|
75
72
|
when 'ASM'
|
76
|
-
overrides <<
|
77
|
-
exclusions <<
|
73
|
+
overrides << parsed_content['rules_override'] if parsed_content['rules_override']
|
74
|
+
exclusions << parsed_content['exclusions'] if parsed_content['exclusions']
|
78
75
|
end
|
79
76
|
end
|
80
77
|
|
@@ -98,7 +95,6 @@ module Datadog
|
|
98
95
|
|
99
96
|
[receiver]
|
100
97
|
end
|
101
|
-
# rubocop:enable Metrics/MethodLength
|
102
98
|
|
103
99
|
private
|
104
100
|
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require_relative 'assets'
|
2
4
|
require_relative 'utils/http/media_range'
|
3
5
|
|
@@ -27,33 +29,39 @@ module Datadog
|
|
27
29
|
|
28
30
|
class << self
|
29
31
|
def negotiate(env)
|
32
|
+
content_type = content_type(env)
|
33
|
+
|
34
|
+
Datadog.logger.debug { "negotiated response content type: #{content_type}" }
|
35
|
+
|
30
36
|
Response.new(
|
31
37
|
status: 403,
|
32
|
-
headers: { 'Content-Type' =>
|
33
|
-
body: [Datadog::AppSec::Assets.blocked(format:
|
38
|
+
headers: { 'Content-Type' => content_type },
|
39
|
+
body: [Datadog::AppSec::Assets.blocked(format: FORMAT_MAP[content_type])]
|
34
40
|
)
|
35
41
|
end
|
36
42
|
|
37
43
|
private
|
38
44
|
|
39
45
|
FORMAT_MAP = {
|
46
|
+
'text/plain' => :text,
|
40
47
|
'text/html' => :html,
|
41
48
|
'application/json' => :json,
|
42
|
-
'text/plain' => :text,
|
43
49
|
}.freeze
|
44
50
|
|
45
|
-
|
51
|
+
DEFAULT_CONTENT_TYPE = 'text/plain'
|
46
52
|
|
47
|
-
def
|
48
|
-
return
|
53
|
+
def content_type(env)
|
54
|
+
return DEFAULT_CONTENT_TYPE unless env.key?('HTTP_ACCEPT')
|
49
55
|
|
50
|
-
accepted = env['HTTP_ACCEPT'].split(',').map { |m| Utils::HTTP::MediaRange.new(m) }.sort
|
56
|
+
accepted = env['HTTP_ACCEPT'].split(',').map { |m| Utils::HTTP::MediaRange.new(m) }.sort!.reverse!
|
51
57
|
|
52
|
-
accepted.each_with_object(
|
53
|
-
|
58
|
+
accepted.each_with_object(DEFAULT_CONTENT_TYPE) do |range, _default|
|
59
|
+
match = FORMAT_MAP.keys.find { |type| range === type }
|
54
60
|
|
55
|
-
return
|
61
|
+
return match if match
|
56
62
|
end
|
63
|
+
rescue Datadog::AppSec::Utils::HTTP::MediaRange::ParseError
|
64
|
+
DEFAULT_CONTENT_TYPE
|
57
65
|
end
|
58
66
|
end
|
59
67
|
end
|
@@ -52,8 +52,14 @@ module Datadog
|
|
52
52
|
Core::Workers::RuntimeMetrics.new(options)
|
53
53
|
end
|
54
54
|
|
55
|
-
def build_telemetry(settings)
|
56
|
-
|
55
|
+
def build_telemetry(settings, agent_settings, logger)
|
56
|
+
enabled = settings.telemetry.enabled
|
57
|
+
if agent_settings.adapter != Datadog::Transport::Ext::HTTP::ADAPTER
|
58
|
+
enabled = false
|
59
|
+
logger.debug { "Telemetry disabled. Agent network adapter not supported: #{agent_settings.adapter}" }
|
60
|
+
end
|
61
|
+
|
62
|
+
Telemetry::Client.new(enabled: enabled)
|
57
63
|
end
|
58
64
|
end
|
59
65
|
|
@@ -81,7 +87,7 @@ module Datadog
|
|
81
87
|
)
|
82
88
|
@runtime_metrics = self.class.build_runtime_metrics_worker(settings)
|
83
89
|
@health_metrics = self.class.build_health_metrics(settings)
|
84
|
-
@telemetry = self.class.build_telemetry(settings)
|
90
|
+
@telemetry = self.class.build_telemetry(settings, agent_settings, logger)
|
85
91
|
@appsec = Datadog::AppSec::Component.build_appsec_component(settings)
|
86
92
|
end
|
87
93
|
|
@@ -5,7 +5,7 @@ require_relative '../utils/forking'
|
|
5
5
|
module Datadog
|
6
6
|
module Core
|
7
7
|
module Telemetry
|
8
|
-
# Telemetry entrypoint, coordinates sending telemetry events at various points in app
|
8
|
+
# Telemetry entrypoint, coordinates sending telemetry events at various points in app lifecycle.
|
9
9
|
class Client
|
10
10
|
attr_reader \
|
11
11
|
:emitter,
|
data/lib/ddtrace/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ddtrace
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.11.
|
4
|
+
version: 1.11.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:
|
11
|
+
date: 1980-01-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: msgpack
|
@@ -883,7 +883,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
883
883
|
- !ruby/object:Gem::Version
|
884
884
|
version: 2.0.0
|
885
885
|
requirements: []
|
886
|
-
rubygems_version: 3.
|
886
|
+
rubygems_version: 3.3.20
|
887
887
|
signing_key:
|
888
888
|
specification_version: 4
|
889
889
|
summary: Datadog tracing code for your Ruby applications
|