inspec-core 4.3.2 → 4.6.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +37 -21
- data/etc/deprecations.json +10 -0
- data/etc/plugin_filters.json +8 -0
- data/lib/bundles/inspec-compliance/api.rb +1 -1
- data/lib/bundles/inspec-compliance/configuration.rb +1 -1
- data/lib/bundles/inspec-compliance/http.rb +1 -1
- data/lib/bundles/inspec-compliance/support.rb +1 -1
- data/lib/bundles/inspec-compliance/target.rb +1 -1
- data/lib/bundles/inspec-supermarket.rb +3 -7
- data/lib/bundles/inspec-supermarket/api.rb +10 -13
- data/lib/bundles/inspec-supermarket/cli.rb +12 -15
- data/lib/bundles/inspec-supermarket/target.rb +7 -11
- data/lib/fetchers/git.rb +14 -15
- data/lib/fetchers/local.rb +6 -10
- data/lib/fetchers/mock.rb +3 -5
- data/lib/fetchers/url.rb +42 -44
- data/lib/inspec.rb +23 -24
- data/lib/inspec/archive/tar.rb +2 -6
- data/lib/inspec/archive/zip.rb +3 -7
- data/lib/inspec/backend.rb +8 -9
- data/lib/inspec/base_cli.rb +64 -65
- data/lib/inspec/cached_fetcher.rb +2 -3
- data/lib/inspec/cli.rb +136 -97
- data/lib/inspec/config.rb +71 -61
- data/lib/inspec/control_eval_context.rb +22 -18
- data/lib/inspec/dependencies/cache.rb +2 -3
- data/lib/inspec/dependencies/dependency_set.rb +2 -3
- data/lib/inspec/dependencies/lockfile.rb +8 -9
- data/lib/inspec/dependencies/requirement.rb +7 -8
- data/lib/inspec/dependencies/resolver.rb +5 -7
- data/lib/inspec/describe.rb +2 -6
- data/lib/inspec/dist.rb +20 -0
- data/lib/inspec/dsl.rb +4 -7
- data/lib/inspec/dsl_shared.rb +1 -2
- data/lib/inspec/env_printer.rb +11 -12
- data/lib/inspec/errors.rb +0 -4
- data/lib/inspec/exceptions.rb +0 -1
- data/lib/inspec/expect.rb +5 -8
- data/lib/inspec/fetcher.rb +7 -10
- data/lib/inspec/file_provider.rb +24 -24
- data/lib/inspec/formatters.rb +3 -3
- data/lib/inspec/formatters/base.rb +8 -8
- data/lib/inspec/globals.rb +2 -2
- data/lib/inspec/impact.rb +5 -7
- data/lib/inspec/input_registry.rb +84 -33
- data/lib/inspec/library_eval_context.rb +3 -6
- data/lib/inspec/log.rb +1 -5
- data/lib/inspec/metadata.rb +17 -16
- data/lib/inspec/method_source.rb +5 -9
- data/lib/inspec/objects.rb +10 -12
- data/lib/inspec/objects/control.rb +7 -9
- data/lib/inspec/objects/describe.rb +9 -11
- data/lib/inspec/objects/each_loop.rb +1 -3
- data/lib/inspec/objects/input.rb +24 -26
- data/lib/inspec/objects/list.rb +4 -6
- data/lib/inspec/objects/or_test.rb +2 -4
- data/lib/inspec/objects/ruby_helper.rb +3 -5
- data/lib/inspec/objects/tag.rb +0 -2
- data/lib/inspec/objects/test.rb +9 -11
- data/lib/inspec/objects/value.rb +3 -5
- data/lib/inspec/plugin/v1.rb +2 -2
- data/lib/inspec/plugin/v1/plugin_types/cli.rb +1 -5
- data/lib/inspec/plugin/v1/plugin_types/fetcher.rb +2 -5
- data/lib/inspec/plugin/v1/plugin_types/resource.rb +4 -6
- data/lib/inspec/plugin/v1/plugin_types/secret.rb +1 -5
- data/lib/inspec/plugin/v1/plugin_types/source_reader.rb +1 -5
- data/lib/inspec/plugin/v1/plugins.rb +15 -19
- data/lib/inspec/plugin/v1/registry.rb +0 -4
- data/lib/inspec/plugin/v2.rb +8 -8
- data/lib/inspec/plugin/v2/activator.rb +1 -1
- data/lib/inspec/plugin/v2/config_file.rb +6 -6
- data/lib/inspec/plugin/v2/filter.rb +13 -13
- data/lib/inspec/plugin/v2/installer.rb +36 -24
- data/lib/inspec/plugin/v2/loader.rb +28 -28
- data/lib/inspec/plugin/v2/plugin_base.rb +15 -2
- data/lib/inspec/plugin/v2/plugin_types/cli.rb +5 -5
- data/lib/inspec/plugin/v2/plugin_types/input.rb +34 -0
- data/lib/inspec/plugin/v2/plugin_types/mock.rb +1 -1
- data/lib/inspec/plugin/v2/registry.rb +7 -7
- data/lib/inspec/polyfill.rb +0 -3
- data/lib/inspec/profile.rb +55 -63
- data/lib/inspec/profile_context.rb +27 -30
- data/lib/inspec/profile_vendor.rb +6 -9
- data/lib/inspec/reporters.rb +24 -24
- data/lib/inspec/reporters/automate.rb +17 -19
- data/lib/inspec/reporters/base.rb +1 -1
- data/lib/inspec/reporters/cli.rb +88 -91
- data/lib/inspec/reporters/json.rb +2 -4
- data/lib/inspec/reporters/json_automate.rb +1 -3
- data/lib/inspec/reporters/json_min.rb +1 -3
- data/lib/inspec/reporters/junit.rb +26 -28
- data/lib/inspec/reporters/yaml.rb +1 -3
- data/lib/inspec/require_loader.rb +0 -4
- data/lib/inspec/resource.rb +4 -125
- data/lib/inspec/resources.rb +121 -0
- data/lib/{resources → inspec/resources}/aide_conf.rb +24 -25
- data/lib/{resources → inspec/resources}/apache.rb +13 -14
- data/lib/{resources → inspec/resources}/apache_conf.rb +16 -17
- data/lib/{resources → inspec/resources}/apt.rb +17 -17
- data/lib/{resources → inspec/resources}/audit_policy.rb +7 -6
- data/lib/{resources → inspec/resources}/auditd.rb +62 -64
- data/lib/{resources → inspec/resources}/auditd_conf.rb +7 -8
- data/lib/{resources → inspec/resources}/bash.rb +6 -8
- data/lib/{resources → inspec/resources}/bond.rb +15 -14
- data/lib/{resources → inspec/resources}/bridge.rb +8 -8
- data/lib/{resources → inspec/resources}/chocolatey_package.rb +10 -8
- data/lib/{resources → inspec/resources}/command.rb +11 -10
- data/lib/{resources → inspec/resources}/cpan.rb +12 -12
- data/lib/{resources → inspec/resources}/cran.rb +9 -9
- data/lib/{resources → inspec/resources}/crontab.rb +47 -48
- data/lib/{resources → inspec/resources}/csv.rb +5 -5
- data/lib/{resources → inspec/resources}/dh_params.rb +5 -7
- data/lib/{resources → inspec/resources}/directory.rb +5 -7
- data/lib/{resources → inspec/resources}/docker.rb +63 -63
- data/lib/{resources → inspec/resources}/docker_container.rb +6 -6
- data/lib/{resources → inspec/resources}/docker_image.rb +9 -9
- data/lib/{resources → inspec/resources}/docker_object.rb +8 -13
- data/lib/{resources → inspec/resources}/docker_plugin.rb +6 -6
- data/lib/{resources → inspec/resources}/docker_service.rb +7 -7
- data/lib/{resources → inspec/resources}/elasticsearch.rb +40 -42
- data/lib/{resources → inspec/resources}/etc_fstab.rb +23 -24
- data/lib/{resources → inspec/resources}/etc_group.rb +26 -27
- data/lib/{resources → inspec/resources}/etc_hosts.rb +11 -13
- data/lib/{resources → inspec/resources}/etc_hosts_allow_deny.rb +25 -27
- data/lib/{resources → inspec/resources}/file.rb +80 -79
- data/lib/{resources → inspec/resources}/filesystem.rb +20 -15
- data/lib/{resources → inspec/resources}/firewalld.rb +26 -26
- data/lib/{resources → inspec/resources}/gem.rb +12 -12
- data/lib/{resources → inspec/resources}/groups.rb +28 -27
- data/lib/{resources → inspec/resources}/grub_conf.rb +46 -48
- data/lib/{resources → inspec/resources}/host.rb +31 -29
- data/lib/{resources → inspec/resources}/http.rb +24 -24
- data/lib/{resources → inspec/resources}/iis_app.rb +6 -7
- data/lib/{resources → inspec/resources}/iis_app_pool.rb +21 -19
- data/lib/{resources → inspec/resources}/iis_site.rb +17 -15
- data/lib/{resources → inspec/resources}/inetd_conf.rb +9 -10
- data/lib/{resources → inspec/resources}/ini.rb +7 -8
- data/lib/{resources → inspec/resources}/interface.rb +30 -30
- data/lib/{resources → inspec/resources}/iptables.rb +8 -8
- data/lib/{resources → inspec/resources}/json.rb +8 -10
- data/lib/{resources → inspec/resources}/kernel_module.rb +15 -15
- data/lib/{resources → inspec/resources}/kernel_parameter.rb +8 -8
- data/lib/{resources → inspec/resources}/key_rsa.rb +8 -10
- data/lib/{resources → inspec/resources}/ksh.rb +6 -8
- data/lib/{resources → inspec/resources}/limits_conf.rb +8 -9
- data/lib/{resources/login_def.rb → inspec/resources/login_defs.rb} +9 -10
- data/lib/{resources → inspec/resources}/mount.rb +6 -8
- data/lib/{resources → inspec/resources}/mssql_session.rb +16 -18
- data/lib/inspec/resources/mysql.rb +81 -0
- data/lib/{resources → inspec/resources}/mysql_conf.rb +13 -14
- data/lib/{resources → inspec/resources}/mysql_session.rb +16 -16
- data/lib/{resources → inspec/resources}/nginx.rb +16 -17
- data/lib/{resources → inspec/resources}/nginx_conf.rb +26 -27
- data/lib/{resources → inspec/resources}/npm.rb +9 -10
- data/lib/{resources → inspec/resources}/ntp_conf.rb +9 -10
- data/lib/{resources → inspec/resources}/oneget.rb +8 -8
- data/lib/{resources → inspec/resources}/oracledb_session.rb +33 -34
- data/lib/{resources → inspec/resources}/os.rb +6 -8
- data/lib/{resources → inspec/resources}/os_env.rb +11 -12
- data/lib/{resources → inspec/resources}/package.rb +66 -65
- data/lib/{resources → inspec/resources}/packages.rb +13 -13
- data/lib/{resources → inspec/resources}/parse_config.rb +8 -8
- data/lib/{resources → inspec/resources}/passwd.rb +18 -19
- data/lib/{resources → inspec/resources}/pip.rb +19 -19
- data/lib/{resources → inspec/resources}/platform.rb +9 -11
- data/lib/{resources → inspec/resources}/port.rb +134 -136
- data/lib/{resources → inspec/resources}/postgres.rb +40 -32
- data/lib/{resources → inspec/resources}/postgres_conf.rb +17 -17
- data/lib/{resources → inspec/resources}/postgres_hba_conf.rb +21 -23
- data/lib/{resources → inspec/resources}/postgres_ident_conf.rb +12 -14
- data/lib/{resources → inspec/resources}/postgres_session.rb +8 -9
- data/lib/{resources → inspec/resources}/powershell.rb +17 -13
- data/lib/{resources → inspec/resources}/processes.rb +29 -29
- data/lib/{resources/rabbitmq_conf.rb → inspec/resources/rabbitmq_config.rb} +10 -11
- data/lib/{resources → inspec/resources}/registry_key.rb +14 -14
- data/lib/inspec/resources/script.rb +1 -0
- data/lib/{resources → inspec/resources}/security_identifier.rb +11 -10
- data/lib/{resources → inspec/resources}/security_policy.rb +59 -58
- data/lib/{resources → inspec/resources}/service.rb +74 -75
- data/lib/{resources → inspec/resources}/shadow.rb +44 -45
- data/lib/{resources/ssh_conf.rb → inspec/resources/ssh_config.rb} +16 -17
- data/lib/{resources → inspec/resources}/ssl.rb +28 -29
- data/lib/inspec/resources/sys_info.rb +30 -0
- data/lib/{resources → inspec/resources}/toml.rb +5 -7
- data/lib/{resources → inspec/resources}/users.rb +65 -65
- data/lib/{resources → inspec/resources}/vbscript.rb +8 -9
- data/lib/{resources → inspec/resources}/virtualization.rb +60 -62
- data/lib/{resources → inspec/resources}/windows_feature.rb +9 -9
- data/lib/{resources → inspec/resources}/windows_hotfix.rb +5 -5
- data/lib/{resources → inspec/resources}/windows_task.rb +16 -15
- data/lib/{resources → inspec/resources}/wmi.rb +7 -8
- data/lib/{resources → inspec/resources}/x509_certificate.rb +9 -11
- data/lib/{resources/xinetd.rb → inspec/resources/xinetd_conf.rb} +27 -29
- data/lib/{resources → inspec/resources}/xml.rb +7 -7
- data/lib/{resources → inspec/resources}/yaml.rb +5 -6
- data/lib/{resources → inspec/resources}/yum.rb +10 -10
- data/lib/{resources → inspec/resources}/zfs_dataset.rb +6 -6
- data/lib/{resources → inspec/resources}/zfs_pool.rb +4 -4
- data/lib/inspec/rspec_extensions.rb +24 -8
- data/lib/inspec/rule.rb +14 -15
- data/lib/inspec/runner.rb +28 -28
- data/lib/inspec/runner_mock.rb +1 -5
- data/lib/inspec/runner_rspec.rb +18 -20
- data/lib/inspec/runtime_profile.rb +2 -5
- data/lib/inspec/schema.rb +142 -143
- data/lib/inspec/secrets.rb +3 -7
- data/lib/inspec/secrets/yaml.rb +3 -5
- data/lib/inspec/shell.rb +11 -15
- data/lib/inspec/shell_detector.rb +6 -7
- data/lib/inspec/source_reader.rb +4 -8
- data/lib/inspec/ui.rb +33 -39
- data/lib/inspec/ui_table_helper.rb +12 -0
- data/lib/{utils → inspec/utils}/command_wrapper.rb +4 -8
- data/lib/{utils → inspec/utils}/convert.rb +0 -4
- data/lib/{utils → inspec/utils}/database_helpers.rb +4 -8
- data/lib/inspec/utils/deprecation.rb +6 -0
- data/lib/{utils → inspec/utils}/deprecation/config_file.rb +19 -19
- data/lib/{utils → inspec/utils}/deprecation/deprecator.rb +12 -12
- data/lib/{utils → inspec/utils}/deprecation/errors.rb +1 -1
- data/lib/{utils → inspec/utils}/deprecation/global_method.rb +2 -2
- data/lib/{utils → inspec/utils}/enumerable_delegation.rb +0 -2
- data/lib/{utils → inspec/utils}/erlang_parser.rb +61 -65
- data/lib/{utils → inspec/utils}/file_reader.rb +1 -2
- data/lib/{utils → inspec/utils}/filter.rb +30 -33
- data/lib/{utils → inspec/utils}/filter_array.rb +0 -2
- data/lib/{utils → inspec/utils}/find_files.rb +9 -12
- data/lib/{utils → inspec/utils}/hash.rb +1 -5
- data/lib/inspec/utils/json_log.rb +15 -0
- data/lib/inspec/utils/latest_version.rb +13 -0
- data/lib/{utils → inspec/utils}/modulator.rb +0 -3
- data/lib/{utils → inspec/utils}/nginx_parser.rb +31 -35
- data/lib/{utils → inspec/utils}/object_traversal.rb +0 -3
- data/lib/{utils → inspec/utils}/parser.rb +45 -45
- data/lib/{utils → inspec/utils}/pkey_reader.rb +4 -2
- data/lib/{utils → inspec/utils}/simpleconfig.rb +8 -10
- data/lib/{utils → inspec/utils}/spdx.rb +1 -4
- data/lib/{utils → inspec/utils}/spdx.txt +0 -0
- data/lib/inspec/utils/telemetry.rb +3 -3
- data/lib/inspec/utils/telemetry/collector.rb +30 -9
- data/lib/inspec/utils/telemetry/data_series.rb +3 -1
- data/lib/inspec/utils/telemetry/global_methods.rb +1 -1
- data/lib/inspec/version.rb +1 -1
- data/lib/matchers/matchers.rb +22 -25
- data/lib/plugins/inspec-artifact/lib/inspec-artifact.rb +1 -1
- data/lib/plugins/inspec-artifact/lib/inspec-artifact/base.rb +52 -45
- data/lib/plugins/inspec-artifact/lib/inspec-artifact/cli.rb +18 -16
- data/lib/plugins/inspec-compliance/lib/inspec-compliance.rb +1 -1
- data/lib/plugins/inspec-compliance/lib/inspec-compliance/api.rb +73 -73
- data/lib/plugins/inspec-compliance/lib/inspec-compliance/api/login.rb +66 -62
- data/lib/plugins/inspec-compliance/lib/inspec-compliance/cli.rb +59 -57
- data/lib/plugins/inspec-compliance/lib/inspec-compliance/configuration.rb +11 -11
- data/lib/plugins/inspec-compliance/lib/inspec-compliance/http.rb +20 -22
- data/lib/plugins/inspec-compliance/lib/inspec-compliance/support.rb +2 -4
- data/lib/plugins/inspec-compliance/lib/inspec-compliance/target.rb +30 -27
- data/lib/plugins/inspec-habitat/Berksfile +2 -2
- data/lib/plugins/inspec-habitat/lib/inspec-habitat.rb +1 -1
- data/lib/plugins/inspec-habitat/lib/inspec-habitat/cli.rb +15 -13
- data/lib/plugins/inspec-habitat/lib/inspec-habitat/profile.rb +64 -63
- data/lib/plugins/inspec-habitat/templates/habitat/hooks/run.erb +3 -3
- data/lib/plugins/inspec-habitat/templates/habitat/plan.sh.erb +11 -11
- data/lib/plugins/inspec-init/lib/inspec-init.rb +1 -1
- data/lib/plugins/inspec-init/lib/inspec-init/cli.rb +6 -8
- data/lib/plugins/inspec-init/lib/inspec-init/cli_plugin.rb +72 -74
- data/lib/plugins/inspec-init/lib/inspec-init/cli_profile.rb +9 -11
- data/lib/plugins/inspec-init/lib/inspec-init/renderer.rb +4 -4
- data/lib/plugins/inspec-init/templates/plugins/inspec-plugin-template/Gemfile +0 -1
- data/lib/plugins/inspec-init/templates/plugins/inspec-plugin-template/inspec-plugin-template.gemspec +0 -2
- data/lib/plugins/inspec-init/templates/plugins/inspec-plugin-template/lib/inspec-plugin-template.rb +0 -2
- data/lib/plugins/inspec-init/templates/plugins/inspec-plugin-template/lib/inspec-plugin-template/cli_command.rb +0 -2
- data/lib/plugins/inspec-init/templates/plugins/inspec-plugin-template/lib/inspec-plugin-template/plugin.rb +0 -2
- data/lib/plugins/inspec-init/templates/plugins/inspec-plugin-template/lib/inspec-plugin-template/version.rb +0 -2
- data/lib/plugins/inspec-init/templates/profiles/os/controls/example.rb +6 -7
- data/lib/plugins/inspec-plugin-manager-cli/lib/inspec-plugin-manager-cli.rb +1 -2
- data/lib/plugins/inspec-plugin-manager-cli/lib/inspec-plugin-manager-cli/cli_command.rb +72 -70
- data/lib/plugins/inspec-plugin-manager-cli/lib/inspec-plugin-manager-cli/plugin.rb +1 -1
- data/lib/plugins/shared/core_plugin_test_helper.rb +43 -38
- data/lib/source_readers/flat.rb +6 -10
- data/lib/source_readers/inspec.rb +8 -12
- metadata +139 -140
- data/lib/resources/mysql.rb +0 -82
- data/lib/resources/sys_info.rb +0 -28
- data/lib/utils/deprecation.rb +0 -6
- data/lib/utils/json_log.rb +0 -18
- data/lib/utils/latest_version.rb +0 -22
@@ -1,5 +1,5 @@
|
|
1
|
-
require
|
2
|
-
require
|
1
|
+
require "inspec/utils/deprecation/config_file"
|
2
|
+
require "inspec/log"
|
3
3
|
|
4
4
|
module Inspec
|
5
5
|
module Deprecation
|
@@ -17,7 +17,7 @@ module Inspec
|
|
17
17
|
assembled_message = assemble_message(message, group, opts)
|
18
18
|
|
19
19
|
action = group[:action] || :warn
|
20
|
-
action_method = (
|
20
|
+
action_method = ("handle_" + action.to_s + "_action").to_sym
|
21
21
|
send(action_method, group_name.to_sym, assembled_message, group)
|
22
22
|
end
|
23
23
|
|
@@ -44,24 +44,24 @@ module Inspec
|
|
44
44
|
# rspec-core surrounds these.
|
45
45
|
|
46
46
|
# First, purge the deprecation system frames
|
47
|
-
stack.reject! { |frame| frame.path && frame.path =~ %r{lib/utils/deprecation} }
|
47
|
+
stack.reject! { |frame| frame.path && frame.path =~ %r{lib/inspec/utils/deprecation} }
|
48
48
|
# Next, purge all RSpec entries (at least rspec-core, rspec-support, rspec-its).
|
49
49
|
stack.reject! { |frame| frame.path && frame.path =~ %r{rspec-.+/lib/rspec} }
|
50
50
|
# Now look for the frame that includes load_with_context.
|
51
|
-
used_at ||= stack.detect { |frame| frame.label.include?
|
51
|
+
used_at ||= stack.detect { |frame| frame.label.include? "load_with_context" }
|
52
52
|
|
53
53
|
opts[:used_at_stack_frame] = used_at if used_at
|
54
54
|
end
|
55
55
|
|
56
56
|
def assemble_message(message, group, opts)
|
57
|
-
prefix = group.prefix ||
|
58
|
-
suffix = group.suffix ||
|
59
|
-
prefix +=
|
60
|
-
suffix =
|
57
|
+
prefix = group.prefix || ""
|
58
|
+
suffix = group.suffix || ""
|
59
|
+
prefix += " " unless prefix.empty?
|
60
|
+
suffix = " " + suffix unless suffix.empty?
|
61
61
|
|
62
|
-
suffix += (
|
62
|
+
suffix += (" (used at " + opts[:used_at_stack_frame].path + ":" + opts[:used_at_stack_frame].lineno.to_s + ")") if opts.key?(:used_at_stack_frame)
|
63
63
|
|
64
|
-
|
64
|
+
"DEPRECATION: " + prefix + message + suffix
|
65
65
|
end
|
66
66
|
|
67
67
|
def called_from_control?
|
@@ -70,7 +70,7 @@ module Inspec
|
|
70
70
|
|
71
71
|
# Within a control block, that is actually an RSpec:ExampleGroup
|
72
72
|
stack.each do |frame|
|
73
|
-
return true if frame.path.end_with?(
|
73
|
+
return true if frame.path.end_with?("rspec/core/example_group.rb")
|
74
74
|
end
|
75
75
|
|
76
76
|
false
|
@@ -1,7 +1,7 @@
|
|
1
|
-
require
|
1
|
+
require "inspec/utils/deprecation/deprecator"
|
2
2
|
|
3
3
|
module Inspec
|
4
|
-
def self.deprecate(group, msg =
|
4
|
+
def self.deprecate(group, msg = "", opts = {})
|
5
5
|
config_io = opts.delete(:config_io)
|
6
6
|
deprecator = Inspec::Deprecation::Deprecator.new(config_io: config_io)
|
7
7
|
deprecator.handle_deprecation(group, msg, opts)
|
@@ -1,109 +1,105 @@
|
|
1
|
-
|
2
|
-
# author: Dominik Richter
|
3
|
-
# author: Christoph Hartmann
|
4
|
-
|
5
|
-
require 'parslet'
|
1
|
+
require "parslet"
|
6
2
|
|
7
3
|
class ErlangParser < Parslet::Parser
|
8
4
|
root :outermost
|
9
5
|
# only designed for rabbitmq config files for now:
|
10
6
|
rule(:outermost) { filler? >> array.maybe >> dot.maybe }
|
11
7
|
|
12
|
-
rule(:exp)
|
8
|
+
rule(:exp) do
|
13
9
|
(tuple | array | binary | string | bool | identifier | float | integer) >> filler?
|
14
|
-
|
10
|
+
end
|
15
11
|
|
16
|
-
rule(:array)
|
17
|
-
str(
|
12
|
+
rule(:array) do
|
13
|
+
str("[") >> filler? >> (
|
18
14
|
exp.repeat(1) >>
|
19
15
|
(comma >> exp).repeat
|
20
|
-
).maybe.as(:array) >> str(
|
21
|
-
|
16
|
+
).maybe.as(:array) >> str("]") >> filler?
|
17
|
+
end
|
22
18
|
|
23
|
-
rule(:tuple)
|
24
|
-
str(
|
19
|
+
rule(:tuple) do
|
20
|
+
str("{") >> filler? >> (
|
25
21
|
exp.repeat(1) >> filler? >>
|
26
22
|
(comma >> exp).repeat
|
27
|
-
).maybe.as(:tuple) >> str(
|
28
|
-
|
23
|
+
).maybe.as(:tuple) >> str("}") >> filler?
|
24
|
+
end
|
29
25
|
|
30
26
|
rule(:filler?) { space.repeat }
|
31
27
|
rule(:space) { match('\s+') | match["\n"] | comment }
|
32
28
|
|
33
|
-
rule(:comment) { str(
|
34
|
-
rule(:comma) { str(
|
35
|
-
rule(:dot) { str(
|
36
|
-
rule(:bool) { str(
|
29
|
+
rule(:comment) { str("%") >> (match["\n\r"].absent? >> any).repeat }
|
30
|
+
rule(:comma) { str(",") >> filler? }
|
31
|
+
rule(:dot) { str(".") >> filler? }
|
32
|
+
rule(:bool) { str("true").as(:bool) | str("false").as(:bool) }
|
37
33
|
|
38
|
-
rule(:identifier)
|
39
|
-
(match(
|
40
|
-
|
34
|
+
rule(:identifier) do
|
35
|
+
(match("[a-zA-Z]") >> match("[a-zA-Z0-9_]").repeat).as(:identifier) >> filler?
|
36
|
+
end
|
41
37
|
|
42
|
-
rule(:float)
|
38
|
+
rule(:float) do
|
43
39
|
(
|
44
40
|
integer >> (
|
45
|
-
str(
|
46
|
-
str(
|
41
|
+
str(".") >> match("[0-9]").repeat(1) |
|
42
|
+
str("e") >> match("[0-9]").repeat(1)
|
47
43
|
).as(:e)
|
48
44
|
).as(:float) >> filler?
|
49
|
-
|
45
|
+
end
|
50
46
|
|
51
|
-
rule(:integer)
|
52
|
-
((str(
|
53
|
-
|
47
|
+
rule(:integer) do
|
48
|
+
((str("+") | str("-")).maybe >> match("[0-9]").repeat(1)).as(:integer) >> filler?
|
49
|
+
end
|
54
50
|
|
55
51
|
rule(:string) { stringS | stringD }
|
56
52
|
|
57
|
-
rule(:stringS)
|
53
|
+
rule(:stringS) do
|
58
54
|
str("'") >> (
|
59
55
|
str('\\') >> any | str("'").absent? >> any
|
60
56
|
).repeat.as(:string) >> str("'") >> filler?
|
61
|
-
|
57
|
+
end
|
62
58
|
|
63
|
-
rule(:stringD)
|
59
|
+
rule(:stringD) do
|
64
60
|
str('"') >> (
|
65
61
|
str('\\') >> any | str('"').absent? >> any
|
66
62
|
).repeat.as(:string) >> str('"') >> filler?
|
67
|
-
|
63
|
+
end
|
68
64
|
|
69
|
-
rule(:binary_item)
|
65
|
+
rule(:binary_item) do
|
70
66
|
(string | integer) >>
|
71
|
-
(str(
|
72
|
-
(str(
|
67
|
+
(str(":") >> integer).maybe.as(:size) >>
|
68
|
+
(str("/") >> identifier).maybe.as(:type) >>
|
73
69
|
filler?
|
74
|
-
|
70
|
+
end
|
75
71
|
|
76
|
-
rule(:binary)
|
77
|
-
str(
|
72
|
+
rule(:binary) do
|
73
|
+
str("<<") >> filler? >> (
|
78
74
|
binary_item.repeat(1) >>
|
79
75
|
(comma >> binary_item).repeat
|
80
|
-
).maybe.as(:binary) >> str(
|
81
|
-
|
76
|
+
).maybe.as(:binary) >> str(">>") >> filler?
|
77
|
+
end
|
82
78
|
end
|
83
79
|
|
84
80
|
class ErlangBitstream
|
85
81
|
def initialize
|
86
82
|
@data = [] # a stream of 8-bit numbers
|
87
|
-
@cur_bits =
|
83
|
+
@cur_bits = "" # a string of binary bits 10010010...
|
88
84
|
end
|
89
85
|
|
90
86
|
TYPES = {
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
87
|
+
"integer" => 8,
|
88
|
+
"float" => 8 * 8,
|
89
|
+
"utf8" => 8,
|
90
|
+
"utf16" => 8 * 2,
|
91
|
+
"utf32" => 8 * 4,
|
96
92
|
}.freeze
|
97
93
|
|
98
94
|
def bit_size(size, type)
|
99
|
-
raise
|
95
|
+
raise "Cannot specify size and type at the same time." if !type.nil? && !size.nil?
|
100
96
|
return (size || 8).to_i if type.nil?
|
101
97
|
TYPES[type] || raise("Cannot handle binary-stream type #{type}")
|
102
98
|
end
|
103
99
|
|
104
100
|
def add(i)
|
105
101
|
if i[:integer].nil? && i[:string].nil?
|
106
|
-
raise
|
102
|
+
raise "No data provided, internal error for binary-stream processing!"
|
107
103
|
end
|
108
104
|
s = bit_size(i[:size], i[:type])
|
109
105
|
unless i[:string].nil?
|
@@ -112,17 +108,17 @@ class ErlangBitstream
|
|
112
108
|
add_int(i[:integer], s)
|
113
109
|
end
|
114
110
|
rescue RuntimeError => e
|
115
|
-
raise
|
111
|
+
raise "Error processing Erlang bit string "\
|
116
112
|
"'#{i[:string] || i[:integer]}:#{i[:size]}/#{i[:type]}'. #{e.message}"
|
117
113
|
end
|
118
114
|
|
119
115
|
def str2int(s, type)
|
120
116
|
case type
|
121
|
-
when
|
122
|
-
when
|
123
|
-
when
|
124
|
-
when
|
125
|
-
else s.split(
|
117
|
+
when "utf8" then s.encode("utf-8").unpack("C*")
|
118
|
+
when "utf16" then s.encode("utf-16").unpack("C*").drop(2)
|
119
|
+
when "utf32" then s.encode("utf-32").unpack("C*").drop(4)
|
120
|
+
when "integer", "float" then raise "Cannot handle bit string as type #{type}"
|
121
|
+
else s.split("").map { |x| x.ord & 0xff }
|
126
122
|
end
|
127
123
|
end
|
128
124
|
|
@@ -141,11 +137,11 @@ class ErlangBitstream
|
|
141
137
|
@cur_bits = b.last
|
142
138
|
end
|
143
139
|
|
144
|
-
def value(encoding =
|
140
|
+
def value(encoding = "utf-8")
|
145
141
|
# fill in the rest
|
146
|
-
rest =
|
142
|
+
rest = "0" * (8 - @cur_bits.length) + @cur_bits
|
147
143
|
arr = @data + [rest.to_i(2)]
|
148
|
-
s = arr.pack(
|
144
|
+
s = arr.pack("C*")
|
149
145
|
s.force_encoding(encoding) unless encoding.nil?
|
150
146
|
s
|
151
147
|
end
|
@@ -162,17 +158,17 @@ class ErlangTransform < Parslet::Transform
|
|
162
158
|
end
|
163
159
|
|
164
160
|
rule(string: simple(:x)) { x.to_s }
|
165
|
-
rule(string: []) {
|
161
|
+
rule(string: []) { "" }
|
166
162
|
rule(integer: simple(:x)) { x.to_i }
|
167
|
-
rule(float: { integer: simple(:a), e: simple(:b) }) { (a+b).to_f }
|
168
|
-
rule(bool:
|
169
|
-
rule(bool:
|
170
|
-
rule(binary: subtree(:x)) { x.nil? ?
|
163
|
+
rule(float: { integer: simple(:a), e: simple(:b) }) { (a + b).to_f }
|
164
|
+
rule(bool: "true") { true }
|
165
|
+
rule(bool: "false") { false }
|
166
|
+
rule(binary: subtree(:x)) { x.nil? ? "" : ErlangTransform.assemble_binary(x) }
|
171
167
|
rule(identifier: simple(:x)) { Identifier.new(x.to_s) }
|
172
168
|
rule(array: subtree(:x)) { Array(x) }
|
173
|
-
rule(tuple: subtree(:x))
|
169
|
+
rule(tuple: subtree(:x)) do
|
174
170
|
x.nil? ? Tuple.new : Tuple.new(x)
|
175
|
-
|
171
|
+
end
|
176
172
|
end
|
177
173
|
|
178
174
|
class ErlangConfigFile
|
@@ -1,8 +1,3 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
# author: Dominik Richter
|
3
|
-
# author: Stephan Renatus
|
4
|
-
# author: Christoph Hartmann
|
5
|
-
|
6
1
|
module FilterTable
|
7
2
|
# This is used as a sentinel value in custom property filtering
|
8
3
|
module NoCriteriaProvided; end
|
@@ -70,15 +65,15 @@ module FilterTable
|
|
70
65
|
|
71
66
|
def self.to_ruby(trace)
|
72
67
|
chain = trace.instance_variable_get(:@chain)
|
73
|
-
return
|
74
|
-
|
68
|
+
return "" if chain.empty?
|
69
|
+
" " + chain.map do |el|
|
75
70
|
m = el[0][0]
|
76
71
|
args = el[0].drop(1)
|
77
72
|
nxt = to_ruby(el[1])
|
78
73
|
next m.to_s + nxt if args.empty?
|
79
|
-
next m.to_s +
|
80
|
-
m.to_s +
|
81
|
-
end.join(
|
74
|
+
next m.to_s + " " + args[0].inspect + nxt if args.length == 1
|
75
|
+
m.to_s + "(" + args.map(&:inspect).join(", ") + ")" + nxt
|
76
|
+
end.join(" ")
|
82
77
|
end
|
83
78
|
end
|
84
79
|
|
@@ -117,7 +112,7 @@ module FilterTable
|
|
117
112
|
# against the struct.
|
118
113
|
if block_given?
|
119
114
|
# Perform the filtering.
|
120
|
-
filtered_raw_data = filtered_raw_data.find_all { |row_as_hash| create_eval_context_for_row(row_as_hash,
|
115
|
+
filtered_raw_data = filtered_raw_data.find_all { |row_as_hash| create_eval_context_for_row(row_as_hash, "").instance_eval(&block) }
|
121
116
|
# Try to interpret the block for updating the stringification.
|
122
117
|
src = Trace.new
|
123
118
|
# Swallow any exceptions raised here.
|
@@ -139,8 +134,8 @@ module FilterTable
|
|
139
134
|
|
140
135
|
def create_eval_context_for_row(*_)
|
141
136
|
raise "#{self.class} must not be used on its own. It must be inherited "\
|
142
|
-
|
143
|
-
|
137
|
+
"and the #create_eval_context_for_row method must be implemented. This is an internal "\
|
138
|
+
"error and should not happen."
|
144
139
|
end
|
145
140
|
|
146
141
|
def resource
|
@@ -153,7 +148,7 @@ module FilterTable
|
|
153
148
|
end
|
154
149
|
|
155
150
|
def entries
|
156
|
-
row_criteria_string = resource.to_s + criteria_string +
|
151
|
+
row_criteria_string = resource.to_s + criteria_string + " one entry"
|
157
152
|
raw_data.map do |row|
|
158
153
|
create_eval_context_for_row(row, row_criteria_string)
|
159
154
|
end
|
@@ -251,10 +246,10 @@ module FilterTable
|
|
251
246
|
return [] if current_raw_data.empty?
|
252
247
|
|
253
248
|
method_ref = case desired_value
|
254
|
-
when Float then
|
255
|
-
when Integer then
|
256
|
-
when Regexp then
|
257
|
-
else
|
249
|
+
when Float then :matches_float
|
250
|
+
when Integer then :matches_int
|
251
|
+
when Regexp then :matches_regex
|
252
|
+
else :matches
|
258
253
|
end
|
259
254
|
|
260
255
|
assume_symbolic_keyed_data = current_raw_data.first.keys.first.is_a? Symbol
|
@@ -262,14 +257,14 @@ module FilterTable
|
|
262
257
|
|
263
258
|
current_raw_data.find_all do |row|
|
264
259
|
next unless row.key?(field)
|
265
|
-
method_ref
|
260
|
+
send(method_ref, row[field], desired_value)
|
266
261
|
end
|
267
262
|
end
|
268
263
|
|
269
264
|
def decorate_symbols(thing)
|
270
265
|
return thing.map { |t| decorate_symbols(t) } if thing.is_a?(Array)
|
271
|
-
return
|
272
|
-
return thing +
|
266
|
+
return ":" + thing.to_s if thing.is_a? Symbol
|
267
|
+
return thing + " (String)" if thing.is_a? String
|
273
268
|
thing
|
274
269
|
end
|
275
270
|
end
|
@@ -289,13 +284,15 @@ module FilterTable
|
|
289
284
|
def install_filter_methods_on_resource(resource_class, raw_data_fetcher_method_name) # rubocop: disable Metrics/AbcSize, Metrics/MethodLength
|
290
285
|
# A context in which you can access the fields as accessors
|
291
286
|
non_block_struct_fields = @custom_properties.values.reject(&:block).map(&:field_name)
|
292
|
-
|
293
|
-
|
294
|
-
|
295
|
-
|
296
|
-
|
287
|
+
unless non_block_struct_fields.empty?
|
288
|
+
row_eval_context_type = Struct.new(*non_block_struct_fields.map(&:to_sym)) do
|
289
|
+
attr_accessor :criteria_string
|
290
|
+
attr_accessor :filter_table
|
291
|
+
def to_s
|
292
|
+
@criteria_string || super
|
293
|
+
end
|
297
294
|
end
|
298
|
-
end
|
295
|
+
end
|
299
296
|
|
300
297
|
properties_to_define = @custom_properties.map do |method_name, custom_property_structure|
|
301
298
|
{ method_name: method_name, method_body: create_custom_property_body(custom_property_structure) }
|
@@ -303,7 +300,7 @@ module FilterTable
|
|
303
300
|
|
304
301
|
# Define the filter table subclass
|
305
302
|
custom_properties = @custom_properties # We need a local var, not an instance var, for a closure below
|
306
|
-
table_class = Class.new(Table)
|
303
|
+
table_class = Class.new(Table) do
|
307
304
|
# Install each custom property onto the FilterTable subclass
|
308
305
|
properties_to_define.each do |property_info|
|
309
306
|
define_method property_info[:method_name], &property_info[:method_body]
|
@@ -314,14 +311,14 @@ module FilterTable
|
|
314
311
|
end
|
315
312
|
|
316
313
|
# Install a method that can wrap all the fields into a context with accessors
|
317
|
-
define_method :create_eval_context_for_row do |row_as_hash, criteria_string =
|
314
|
+
define_method :create_eval_context_for_row do |row_as_hash, criteria_string = ""|
|
318
315
|
return row_eval_context_type.new if row_as_hash.nil?
|
319
316
|
context = row_eval_context_type.new(*non_block_struct_fields.map { |field| row_as_hash[field] })
|
320
317
|
context.criteria_string = criteria_string
|
321
318
|
context.filter_table = self
|
322
319
|
context
|
323
320
|
end
|
324
|
-
|
321
|
+
end
|
325
322
|
|
326
323
|
# Now that the table class is defined and the row eval context struct is defined,
|
327
324
|
# extend the row eval context struct to support triggering population of lazy fields
|
@@ -356,11 +353,11 @@ module FilterTable
|
|
356
353
|
# the tests are run.
|
357
354
|
methods_to_install_on_resource_class = @filter_methods + @custom_properties.keys
|
358
355
|
methods_to_install_on_resource_class.each do |method_name|
|
359
|
-
resource_class.send(:define_method, method_name
|
356
|
+
resource_class.send(:define_method, method_name) do |*args, &block|
|
360
357
|
begin
|
361
358
|
# self here is the resource instance
|
362
|
-
filter_table_instance = table_class.new(self,
|
363
|
-
filter_table_instance.
|
359
|
+
filter_table_instance = table_class.new(self, send(raw_data_fetcher_method_name), " with")
|
360
|
+
filter_table_instance.send(method_name, *args, &block)
|
364
361
|
rescue Inspec::Exceptions::ResourceFailed, Inspec::Exceptions::ResourceSkipped => e
|
365
362
|
FilterTable::ExceptionCatcher.new(resource_class, e)
|
366
363
|
end
|