oso-oso 0.14.1 → 0.14.2
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/Gemfile.lock +1 -1
- data/ext/oso-oso/lib/libpolar.dylib +0 -0
- data/ext/oso-oso/lib/libpolar.so +0 -0
- data/ext/oso-oso/lib/polar.dll +0 -0
- data/lib/oso/polar/ffi/error.rb +8 -1
- data/lib/oso/polar/ffi/message.rb +2 -1
- data/lib/oso/polar/ffi/polar.rb +16 -10
- data/lib/oso/polar/ffi/query.rb +13 -7
- data/lib/oso/polar/host.rb +7 -1
- data/lib/oso/polar/polar.rb +2 -1
- data/lib/oso/polar/query.rb +6 -1
- data/lib/oso/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 73973c0ee45c628fe89e2310f004d6d10312a40f
|
4
|
+
data.tar.gz: f8365839689e9eac4caedaa04c85eda33ed09836
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: edc94997d13562f6e989d07d59edf528223c82733263ab988ab679356c82618de505976731d12050e08dd2a12521b243a913ea7cf89b84f59e327bcf0f89eb70
|
7
|
+
data.tar.gz: 50d4be1eeb6b17490336c372ff7617f756ba83315529c3f060d6e11e543a30b8b79b2d6e4c02ce5a45e8d3130526a661c3f89623ac20251e73aa3cc6c65e6937
|
data/Gemfile.lock
CHANGED
Binary file
|
data/ext/oso-oso/lib/libpolar.so
CHANGED
Binary file
|
data/ext/oso-oso/lib/polar.dll
CHANGED
Binary file
|
data/lib/oso/polar/ffi/error.rb
CHANGED
@@ -24,7 +24,7 @@ module Oso
|
|
24
24
|
#
|
25
25
|
# @return [::Oso::Polar::Error] if there's an FFI error.
|
26
26
|
# @return [::Oso::Polar::FFIErrorNotFound] if there isn't one.
|
27
|
-
def self.get # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/MethodLength
|
27
|
+
def self.get(enrich_message) # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/MethodLength, Metrics/PerceivedComplexity
|
28
28
|
error = Rust.get
|
29
29
|
return ::Oso::Polar::FFIErrorNotFound if error.null?
|
30
30
|
|
@@ -40,6 +40,13 @@ module Oso
|
|
40
40
|
subkind, details = nil
|
41
41
|
end
|
42
42
|
|
43
|
+
# Enrich error message and stack trace
|
44
|
+
msg = enrich_message.call(msg) if msg
|
45
|
+
if details
|
46
|
+
details['stack_trace'] = enrich_message.call(details['stack_trace']) if details['stack_trace']
|
47
|
+
details['msg'] = enrich_message.call(details['msg']) if details['msg']
|
48
|
+
end
|
49
|
+
|
43
50
|
case kind
|
44
51
|
when 'Parse'
|
45
52
|
parse_error(subkind, msg: msg, details: details)
|
@@ -19,10 +19,11 @@ module Oso
|
|
19
19
|
attach_function :free, :string_free, [Message], :int32
|
20
20
|
end
|
21
21
|
|
22
|
-
def process
|
22
|
+
def process(enrich_message)
|
23
23
|
message = JSON.parse(to_s)
|
24
24
|
kind = message['kind']
|
25
25
|
msg = message['msg']
|
26
|
+
msg = enrich_message.call(msg)
|
26
27
|
|
27
28
|
case kind
|
28
29
|
when 'Print'
|
data/lib/oso/polar/ffi/polar.rb
CHANGED
@@ -7,6 +7,8 @@ module Oso
|
|
7
7
|
module FFI
|
8
8
|
# Wrapper class for Polar FFI pointer + operations.
|
9
9
|
class Polar < ::FFI::AutoPointer
|
10
|
+
attr_accessor :enrich_message
|
11
|
+
|
10
12
|
Rust = Module.new do
|
11
13
|
extend ::FFI::Library
|
12
14
|
ffi_lib FFI::LIB_PATH
|
@@ -30,7 +32,7 @@ module Oso
|
|
30
32
|
# @raise [FFI::Error] if the FFI call returns an error.
|
31
33
|
def self.create
|
32
34
|
polar = Rust.new
|
33
|
-
|
35
|
+
handle_error if polar.null?
|
34
36
|
|
35
37
|
polar
|
36
38
|
end
|
@@ -39,14 +41,14 @@ module Oso
|
|
39
41
|
def enable_roles
|
40
42
|
result = Rust.enable_roles(self)
|
41
43
|
process_messages
|
42
|
-
|
44
|
+
handle_error if result.zero?
|
43
45
|
end
|
44
46
|
|
45
47
|
# @raise [FFI::Error] if the FFI call returns an error.
|
46
48
|
def validate_roles_config(config)
|
47
49
|
result = Rust.validate_roles_config(self, JSON.dump(config))
|
48
50
|
process_messages
|
49
|
-
|
51
|
+
handle_error if result.zero?
|
50
52
|
end
|
51
53
|
|
52
54
|
# @param src [String]
|
@@ -55,14 +57,14 @@ module Oso
|
|
55
57
|
def load(src, filename: nil)
|
56
58
|
loaded = Rust.load(self, src, filename)
|
57
59
|
process_messages
|
58
|
-
|
60
|
+
handle_error if loaded.zero?
|
59
61
|
end
|
60
62
|
|
61
63
|
# @raise [FFI::Error] if the FFI call returns an error.
|
62
64
|
def clear_rules
|
63
65
|
cleared = Rust.clear_rules(self)
|
64
66
|
process_messages
|
65
|
-
|
67
|
+
handle_error if cleared.zero?
|
66
68
|
end
|
67
69
|
|
68
70
|
# @return [FFI::Query] if there are remaining inline queries.
|
@@ -80,7 +82,7 @@ module Oso
|
|
80
82
|
id = Rust.new_id(self)
|
81
83
|
# TODO(gj): I don't think this error check is correct. If getting a new ID fails on the
|
82
84
|
# Rust side, it'll probably surface as a panic (e.g., the KB lock is poisoned).
|
83
|
-
|
85
|
+
handle_error if id.zero?
|
84
86
|
|
85
87
|
id
|
86
88
|
end
|
@@ -91,7 +93,7 @@ module Oso
|
|
91
93
|
def new_query_from_str(str)
|
92
94
|
query = Rust.new_query_from_str(self, str, 0)
|
93
95
|
process_messages
|
94
|
-
|
96
|
+
handle_error if query.null?
|
95
97
|
|
96
98
|
query
|
97
99
|
end
|
@@ -102,7 +104,7 @@ module Oso
|
|
102
104
|
def new_query_from_term(term)
|
103
105
|
query = Rust.new_query_from_term(self, JSON.dump(term), 0)
|
104
106
|
process_messages
|
105
|
-
|
107
|
+
handle_error if query.null?
|
106
108
|
|
107
109
|
query
|
108
110
|
end
|
@@ -112,7 +114,7 @@ module Oso
|
|
112
114
|
# @raise [FFI::Error] if the FFI call returns an error.
|
113
115
|
def register_constant(value, name:)
|
114
116
|
registered = Rust.register_constant(self, name, JSON.dump(value))
|
115
|
-
|
117
|
+
handle_error if registered.zero?
|
116
118
|
end
|
117
119
|
|
118
120
|
def next_message
|
@@ -124,9 +126,13 @@ module Oso
|
|
124
126
|
message = next_message
|
125
127
|
break if message.null?
|
126
128
|
|
127
|
-
message.process
|
129
|
+
message.process(enrich_message)
|
128
130
|
end
|
129
131
|
end
|
132
|
+
|
133
|
+
def handle_error
|
134
|
+
raise FFI::Error.get(enrich_message)
|
135
|
+
end
|
130
136
|
end
|
131
137
|
end
|
132
138
|
end
|
data/lib/oso/polar/ffi/query.rb
CHANGED
@@ -7,6 +7,8 @@ module Oso
|
|
7
7
|
module FFI
|
8
8
|
# Wrapper class for Query FFI pointer + operations.
|
9
9
|
class Query < ::FFI::AutoPointer
|
10
|
+
attr_accessor :enrich_message
|
11
|
+
|
10
12
|
Rust = Module.new do
|
11
13
|
extend ::FFI::Library
|
12
14
|
ffi_lib FFI::LIB_PATH
|
@@ -27,7 +29,7 @@ module Oso
|
|
27
29
|
def debug_command(cmd)
|
28
30
|
res = Rust.debug_command(self, cmd)
|
29
31
|
process_messages
|
30
|
-
|
32
|
+
handle_error if res.zero?
|
31
33
|
end
|
32
34
|
|
33
35
|
# @param result [String]
|
@@ -35,7 +37,7 @@ module Oso
|
|
35
37
|
# @raise [FFI::Error] if the FFI call returns an error.
|
36
38
|
def call_result(result, call_id:)
|
37
39
|
res = Rust.call_result(self, call_id, result)
|
38
|
-
|
40
|
+
handle_error if res.zero?
|
39
41
|
end
|
40
42
|
|
41
43
|
# @param result [Boolean]
|
@@ -44,7 +46,7 @@ module Oso
|
|
44
46
|
def question_result(result, call_id:)
|
45
47
|
result = result ? 1 : 0
|
46
48
|
res = Rust.question_result(self, call_id, result)
|
47
|
-
|
49
|
+
handle_error if res.zero?
|
48
50
|
end
|
49
51
|
|
50
52
|
# @param result [Boolean]
|
@@ -52,7 +54,7 @@ module Oso
|
|
52
54
|
# @raise [FFI::Error] if the FFI call returns an error.
|
53
55
|
def application_error(message)
|
54
56
|
res = Rust.application_error(self, message)
|
55
|
-
|
57
|
+
handle_error if res.zero?
|
56
58
|
end
|
57
59
|
|
58
60
|
# @return [::Oso::Polar::QueryEvent]
|
@@ -60,7 +62,7 @@ module Oso
|
|
60
62
|
def next_event
|
61
63
|
event = Rust.next_event(self)
|
62
64
|
process_messages
|
63
|
-
|
65
|
+
handle_error if event.null?
|
64
66
|
|
65
67
|
::Oso::Polar::QueryEvent.new(JSON.parse(event.to_s))
|
66
68
|
end
|
@@ -74,7 +76,7 @@ module Oso
|
|
74
76
|
message = next_message
|
75
77
|
break if message.null?
|
76
78
|
|
77
|
-
message.process
|
79
|
+
message.process(enrich_message)
|
78
80
|
end
|
79
81
|
end
|
80
82
|
|
@@ -82,10 +84,14 @@ module Oso
|
|
82
84
|
# @raise [FFI::Error] if the FFI call returns an error.
|
83
85
|
def source
|
84
86
|
res = Rust.source(self)
|
85
|
-
|
87
|
+
handle_error if res.null?
|
86
88
|
|
87
89
|
res.to_s
|
88
90
|
end
|
91
|
+
|
92
|
+
def handle_error
|
93
|
+
raise FFI::Error.get(enrich_message)
|
94
|
+
end
|
89
95
|
end
|
90
96
|
end
|
91
97
|
end
|
data/lib/oso/polar/host.rb
CHANGED
@@ -242,7 +242,7 @@ module Oso
|
|
242
242
|
{ 'Pattern' => { 'Instance' => { 'tag' => value.tag, 'fields' => dict['Dictionary'] } } }
|
243
243
|
end
|
244
244
|
else
|
245
|
-
{ 'ExternalInstance' => { 'instance_id' => cache_instance(value), 'repr' =>
|
245
|
+
{ 'ExternalInstance' => { 'instance_id' => cache_instance(value), 'repr' => nil } }
|
246
246
|
end
|
247
247
|
{ 'value' => value }
|
248
248
|
end
|
@@ -308,6 +308,12 @@ module Oso
|
|
308
308
|
raise UnexpectedPolarTypeError, tag
|
309
309
|
end
|
310
310
|
end
|
311
|
+
|
312
|
+
def enrich_message(msg)
|
313
|
+
msg.gsub(/\^\{id: ([0-9]+)\}/) do
|
314
|
+
get_instance(Regexp.last_match[1].to_i).to_s
|
315
|
+
end
|
316
|
+
end
|
311
317
|
end
|
312
318
|
end
|
313
319
|
end
|
data/lib/oso/polar/polar.rb
CHANGED
@@ -34,9 +34,10 @@ module Oso
|
|
34
34
|
# @return [Host]
|
35
35
|
attr_reader :host
|
36
36
|
|
37
|
-
def initialize
|
37
|
+
def initialize # rubocop:disable Metrics/MethodLength
|
38
38
|
@ffi_polar = FFI::Polar.create
|
39
39
|
@host = Host.new(ffi_polar)
|
40
|
+
@ffi_polar.enrich_message = @host.method(:enrich_message)
|
40
41
|
@polar_roles_enabled = false
|
41
42
|
|
42
43
|
# Register global constants.
|
data/lib/oso/polar/query.rb
CHANGED
@@ -13,6 +13,7 @@ module Oso
|
|
13
13
|
def initialize(ffi_query, host:)
|
14
14
|
@calls = {}
|
15
15
|
@ffi_query = ffi_query
|
16
|
+
ffi_query.enrich_message = host.method(:enrich_message)
|
16
17
|
@host = host
|
17
18
|
end
|
18
19
|
|
@@ -147,7 +148,11 @@ module Oso
|
|
147
148
|
answer = host.isa?(instance, class_tag: class_tag)
|
148
149
|
question_result(answer, call_id: event.data['call_id'])
|
149
150
|
when 'Debug'
|
150
|
-
|
151
|
+
msg = event.data['message']
|
152
|
+
if msg
|
153
|
+
msg = host.enrich_message(msg) if msg
|
154
|
+
puts msg
|
155
|
+
end
|
151
156
|
print 'debug> '
|
152
157
|
begin
|
153
158
|
input = $stdin.readline.chomp.chomp(';')
|
data/lib/oso/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: oso-oso
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.14.
|
4
|
+
version: 0.14.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Oso Security, Inc.
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-08-
|
11
|
+
date: 2021-08-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ffi
|