inspec 2.1.81 → 2.1.83
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 +5 -5
- data/.rubocop.yml +101 -101
- data/CHANGELOG.md +3183 -3177
- data/Gemfile +56 -56
- data/LICENSE +14 -14
- data/MAINTAINERS.md +33 -33
- data/MAINTAINERS.toml +52 -52
- data/README.md +453 -453
- data/Rakefile +349 -349
- data/bin/inspec +12 -12
- data/docs/.gitignore +2 -2
- data/docs/README.md +41 -40
- data/docs/dev/control-eval.md +61 -61
- data/docs/dsl_inspec.md +258 -258
- data/docs/dsl_resource.md +100 -100
- data/docs/glossary.md +99 -99
- data/docs/habitat.md +191 -191
- data/docs/inspec_and_friends.md +114 -114
- data/docs/matchers.md +169 -169
- data/docs/migration.md +293 -293
- data/docs/platforms.md +118 -118
- data/docs/plugin_kitchen_inspec.md +50 -50
- data/docs/profiles.md +378 -378
- data/docs/reporters.md +105 -105
- data/docs/resources/aide_conf.md.erb +75 -75
- data/docs/resources/apache.md.erb +67 -67
- data/docs/resources/apache_conf.md.erb +68 -68
- data/docs/resources/apt.md.erb +71 -71
- data/docs/resources/audit_policy.md.erb +47 -47
- data/docs/resources/auditd.md.erb +79 -79
- data/docs/resources/auditd_conf.md.erb +68 -68
- data/docs/resources/aws_cloudtrail_trail.md.erb +155 -155
- data/docs/resources/aws_cloudtrail_trails.md.erb +86 -86
- data/docs/resources/aws_cloudwatch_alarm.md.erb +91 -91
- data/docs/resources/aws_cloudwatch_log_metric_filter.md.erb +154 -154
- data/docs/resources/aws_config_delivery_channel.md.erb +101 -101
- data/docs/resources/aws_config_recorder.md.erb +86 -86
- data/docs/resources/aws_ec2_instance.md.erb +112 -112
- data/docs/resources/aws_ec2_instances.md.erb +79 -79
- data/docs/resources/aws_iam_access_key.md.erb +129 -129
- data/docs/resources/aws_iam_access_keys.md.erb +204 -204
- data/docs/resources/aws_iam_group.md.erb +64 -64
- data/docs/resources/aws_iam_groups.md.erb +49 -49
- data/docs/resources/aws_iam_password_policy.md.erb +82 -82
- data/docs/resources/aws_iam_policies.md.erb +87 -87
- data/docs/resources/aws_iam_policy.md.erb +245 -245
- data/docs/resources/aws_iam_role.md.erb +69 -69
- data/docs/resources/aws_iam_root_user.md.erb +76 -76
- data/docs/resources/aws_iam_user.md.erb +120 -120
- data/docs/resources/aws_iam_users.md.erb +279 -279
- data/docs/resources/aws_kms_key.md.erb +177 -177
- data/docs/resources/aws_kms_keys.md.erb +89 -89
- data/docs/resources/aws_rds_instance.md.erb +66 -66
- data/docs/resources/aws_route_table.md.erb +53 -53
- data/docs/resources/aws_route_tables.md.erb +55 -55
- data/docs/resources/aws_s3_bucket.md.erb +146 -146
- data/docs/resources/aws_s3_bucket_object.md.erb +89 -89
- data/docs/resources/aws_s3_buckets.md.erb +59 -59
- data/docs/resources/aws_security_group.md.erb +296 -296
- data/docs/resources/aws_security_groups.md.erb +97 -97
- data/docs/resources/aws_sns_subscription.md.erb +130 -130
- data/docs/resources/aws_sns_topic.md.erb +69 -69
- data/docs/resources/aws_sns_topics.md.erb +58 -58
- data/docs/resources/aws_subnet.md.erb +140 -140
- data/docs/resources/aws_subnets.md.erb +132 -132
- data/docs/resources/aws_vpc.md.erb +125 -125
- data/docs/resources/aws_vpcs.md.erb +125 -125
- data/docs/resources/azure_generic_resource.md.erb +171 -171
- data/docs/resources/azure_resource_group.md.erb +284 -284
- data/docs/resources/azure_virtual_machine.md.erb +347 -347
- data/docs/resources/azure_virtual_machine_data_disk.md.erb +224 -224
- data/docs/resources/bash.md.erb +75 -75
- data/docs/resources/bond.md.erb +90 -90
- data/docs/resources/bridge.md.erb +57 -57
- data/docs/resources/bsd_service.md.erb +67 -67
- data/docs/resources/chocolatey_package.md.erb +58 -58
- data/docs/resources/command.md.erb +138 -138
- data/docs/resources/cpan.md.erb +79 -79
- data/docs/resources/cran.md.erb +64 -64
- data/docs/resources/crontab.md.erb +89 -89
- data/docs/resources/csv.md.erb +54 -54
- data/docs/resources/dh_params.md.erb +205 -205
- data/docs/resources/directory.md.erb +30 -30
- data/docs/resources/docker.md.erb +219 -219
- data/docs/resources/docker_container.md.erb +103 -103
- data/docs/resources/docker_image.md.erb +94 -94
- data/docs/resources/docker_service.md.erb +114 -114
- data/docs/resources/elasticsearch.md.erb +242 -242
- data/docs/resources/etc_fstab.md.erb +125 -125
- data/docs/resources/etc_group.md.erb +75 -75
- data/docs/resources/etc_hosts.md.erb +78 -78
- data/docs/resources/etc_hosts_allow.md.erb +74 -74
- data/docs/resources/etc_hosts_deny.md.erb +74 -74
- data/docs/resources/file.md.erb +526 -526
- data/docs/resources/filesystem.md.erb +41 -41
- data/docs/resources/firewalld.md.erb +107 -107
- data/docs/resources/gem.md.erb +79 -79
- data/docs/resources/group.md.erb +61 -61
- data/docs/resources/grub_conf.md.erb +101 -101
- data/docs/resources/host.md.erb +86 -86
- data/docs/resources/http.md.erb +197 -197
- data/docs/resources/iis_app.md.erb +122 -122
- data/docs/resources/iis_site.md.erb +135 -135
- data/docs/resources/inetd_conf.md.erb +94 -94
- data/docs/resources/ini.md.erb +76 -76
- data/docs/resources/interface.md.erb +58 -58
- data/docs/resources/iptables.md.erb +64 -64
- data/docs/resources/json.md.erb +63 -63
- data/docs/resources/kernel_module.md.erb +120 -120
- data/docs/resources/kernel_parameter.md.erb +53 -53
- data/docs/resources/key_rsa.md.erb +85 -85
- data/docs/resources/launchd_service.md.erb +57 -57
- data/docs/resources/limits_conf.md.erb +75 -75
- data/docs/resources/login_defs.md.erb +71 -71
- data/docs/resources/mount.md.erb +69 -69
- data/docs/resources/mssql_session.md.erb +60 -60
- data/docs/resources/mysql_conf.md.erb +99 -99
- data/docs/resources/mysql_session.md.erb +74 -74
- data/docs/resources/nginx.md.erb +79 -79
- data/docs/resources/nginx_conf.md.erb +138 -138
- data/docs/resources/npm.md.erb +60 -60
- data/docs/resources/ntp_conf.md.erb +60 -60
- data/docs/resources/oneget.md.erb +53 -53
- data/docs/resources/oracledb_session.md.erb +52 -52
- data/docs/resources/os.md.erb +141 -141
- data/docs/resources/os_env.md.erb +91 -91
- data/docs/resources/package.md.erb +120 -120
- data/docs/resources/packages.md.erb +67 -67
- data/docs/resources/parse_config.md.erb +103 -103
- data/docs/resources/parse_config_file.md.erb +138 -138
- data/docs/resources/passwd.md.erb +141 -141
- data/docs/resources/pip.md.erb +67 -67
- data/docs/resources/port.md.erb +137 -137
- data/docs/resources/postgres_conf.md.erb +79 -79
- data/docs/resources/postgres_hba_conf.md.erb +93 -93
- data/docs/resources/postgres_ident_conf.md.erb +76 -76
- data/docs/resources/postgres_session.md.erb +69 -69
- data/docs/resources/powershell.md.erb +102 -102
- data/docs/resources/processes.md.erb +109 -109
- data/docs/resources/rabbitmq_config.md.erb +41 -41
- data/docs/resources/registry_key.md.erb +158 -158
- data/docs/resources/runit_service.md.erb +57 -57
- data/docs/resources/security_policy.md.erb +47 -47
- data/docs/resources/service.md.erb +121 -121
- data/docs/resources/shadow.md.erb +146 -146
- data/docs/resources/ssh_config.md.erb +73 -73
- data/docs/resources/sshd_config.md.erb +83 -83
- data/docs/resources/ssl.md.erb +119 -119
- data/docs/resources/sys_info.md.erb +42 -42
- data/docs/resources/systemd_service.md.erb +57 -57
- data/docs/resources/sysv_service.md.erb +57 -57
- data/docs/resources/upstart_service.md.erb +57 -57
- data/docs/resources/user.md.erb +140 -140
- data/docs/resources/users.md.erb +127 -127
- data/docs/resources/vbscript.md.erb +55 -55
- data/docs/resources/virtualization.md.erb +57 -57
- data/docs/resources/windows_feature.md.erb +47 -47
- data/docs/resources/windows_hotfix.md.erb +53 -53
- data/docs/resources/windows_task.md.erb +95 -95
- data/docs/resources/wmi.md.erb +81 -81
- data/docs/resources/x509_certificate.md.erb +151 -151
- data/docs/resources/xinetd_conf.md.erb +156 -156
- data/docs/resources/xml.md.erb +85 -85
- data/docs/resources/yaml.md.erb +69 -69
- data/docs/resources/yum.md.erb +98 -98
- data/docs/resources/zfs_dataset.md.erb +53 -53
- data/docs/resources/zfs_pool.md.erb +47 -47
- data/docs/ruby_usage.md +203 -203
- data/docs/shared/matcher_be.md.erb +1 -1
- data/docs/shared/matcher_cmp.md.erb +43 -43
- data/docs/shared/matcher_eq.md.erb +3 -3
- data/docs/shared/matcher_include.md.erb +1 -1
- data/docs/shared/matcher_match.md.erb +1 -1
- data/docs/shell.md +217 -217
- data/examples/README.md +8 -8
- data/examples/inheritance/README.md +65 -65
- data/examples/inheritance/controls/example.rb +14 -14
- data/examples/inheritance/inspec.yml +15 -15
- data/examples/kitchen-ansible/.kitchen.yml +25 -25
- data/examples/kitchen-ansible/Gemfile +19 -19
- data/examples/kitchen-ansible/README.md +53 -53
- data/examples/kitchen-ansible/files/nginx.repo +6 -6
- data/examples/kitchen-ansible/tasks/main.yml +16 -16
- data/examples/kitchen-ansible/test/integration/default/default.yml +5 -5
- data/examples/kitchen-ansible/test/integration/default/web_spec.rb +28 -28
- data/examples/kitchen-chef/.kitchen.yml +20 -20
- data/examples/kitchen-chef/Berksfile +3 -3
- data/examples/kitchen-chef/Gemfile +19 -19
- data/examples/kitchen-chef/README.md +27 -27
- data/examples/kitchen-chef/metadata.rb +7 -7
- data/examples/kitchen-chef/recipes/default.rb +6 -6
- data/examples/kitchen-chef/recipes/nginx.rb +30 -30
- data/examples/kitchen-chef/test/integration/default/web_spec.rb +28 -28
- data/examples/kitchen-puppet/.kitchen.yml +23 -23
- data/examples/kitchen-puppet/Gemfile +20 -20
- data/examples/kitchen-puppet/Puppetfile +25 -25
- data/examples/kitchen-puppet/README.md +53 -53
- data/examples/kitchen-puppet/manifests/site.pp +33 -33
- data/examples/kitchen-puppet/metadata.json +11 -11
- data/examples/kitchen-puppet/test/integration/default/web_spec.rb +28 -28
- data/examples/meta-profile/README.md +37 -37
- data/examples/meta-profile/controls/example.rb +13 -13
- data/examples/meta-profile/inspec.yml +13 -13
- data/examples/profile-attribute.yml +2 -2
- data/examples/profile-attribute/README.md +14 -14
- data/examples/profile-attribute/controls/example.rb +11 -11
- data/examples/profile-attribute/inspec.yml +8 -8
- data/examples/profile-aws/controls/iam_password_policy_expiration.rb +8 -8
- data/examples/profile-aws/controls/iam_password_policy_max_age.rb +8 -8
- data/examples/profile-aws/controls/iam_root_user_mfa.rb +8 -8
- data/examples/profile-aws/controls/iam_users_access_key_age.rb +8 -8
- data/examples/profile-aws/controls/iam_users_console_users_mfa.rb +8 -8
- data/examples/profile-aws/inspec.yml +11 -11
- data/examples/profile-azure/controls/azure_resource_group_example.rb +24 -24
- data/examples/profile-azure/controls/azure_vm_example.rb +29 -29
- data/examples/profile-azure/inspec.yml +11 -11
- data/examples/profile-sensitive/README.md +29 -29
- data/examples/profile-sensitive/controls/sensitive-failures.rb +9 -9
- data/examples/profile-sensitive/controls/sensitive.rb +9 -9
- data/examples/profile-sensitive/inspec.yml +8 -8
- data/examples/profile/README.md +48 -48
- data/examples/profile/controls/example.rb +23 -23
- data/examples/profile/controls/gordon.rb +36 -36
- data/examples/profile/controls/meta.rb +34 -34
- data/examples/profile/inspec.yml +10 -10
- data/examples/profile/libraries/gordon_config.rb +59 -59
- data/inspec.gemspec +49 -49
- data/lib/bundles/README.md +3 -3
- data/lib/bundles/inspec-artifact.rb +7 -7
- data/lib/bundles/inspec-artifact/README.md +1 -1
- data/lib/bundles/inspec-artifact/cli.rb +277 -277
- data/lib/bundles/inspec-compliance.rb +16 -16
- data/lib/bundles/inspec-compliance/.kitchen.yml +20 -20
- data/lib/bundles/inspec-compliance/README.md +193 -193
- data/lib/bundles/inspec-compliance/api.rb +360 -360
- data/lib/bundles/inspec-compliance/api/login.rb +193 -193
- data/lib/bundles/inspec-compliance/bootstrap.sh +41 -41
- data/lib/bundles/inspec-compliance/cli.rb +260 -260
- data/lib/bundles/inspec-compliance/configuration.rb +103 -103
- data/lib/bundles/inspec-compliance/http.rb +125 -125
- data/lib/bundles/inspec-compliance/support.rb +36 -36
- data/lib/bundles/inspec-compliance/target.rb +112 -112
- data/lib/bundles/inspec-compliance/test/integration/default/cli.rb +93 -93
- data/lib/bundles/inspec-habitat.rb +12 -12
- data/lib/bundles/inspec-habitat/cli.rb +36 -36
- data/lib/bundles/inspec-habitat/log.rb +10 -10
- data/lib/bundles/inspec-habitat/profile.rb +391 -391
- data/lib/bundles/inspec-init.rb +8 -8
- data/lib/bundles/inspec-init/README.md +31 -31
- data/lib/bundles/inspec-init/cli.rb +97 -97
- data/lib/bundles/inspec-init/templates/profile/README.md +3 -3
- data/lib/bundles/inspec-init/templates/profile/controls/example.rb +19 -19
- data/lib/bundles/inspec-init/templates/profile/inspec.yml +8 -8
- data/lib/bundles/inspec-supermarket.rb +13 -13
- data/lib/bundles/inspec-supermarket/README.md +45 -45
- data/lib/bundles/inspec-supermarket/api.rb +84 -84
- data/lib/bundles/inspec-supermarket/cli.rb +73 -73
- data/lib/bundles/inspec-supermarket/target.rb +34 -34
- data/lib/fetchers/git.rb +163 -163
- data/lib/fetchers/local.rb +74 -74
- data/lib/fetchers/mock.rb +35 -35
- data/lib/fetchers/url.rb +247 -247
- data/lib/inspec.rb +24 -24
- data/lib/inspec/archive/tar.rb +29 -29
- data/lib/inspec/archive/zip.rb +19 -19
- data/lib/inspec/backend.rb +93 -93
- data/lib/inspec/base_cli.rb +368 -368
- data/lib/inspec/cached_fetcher.rb +66 -66
- data/lib/inspec/cli.rb +292 -292
- data/lib/inspec/completions/bash.sh.erb +45 -45
- data/lib/inspec/completions/fish.sh.erb +34 -34
- data/lib/inspec/completions/zsh.sh.erb +61 -61
- data/lib/inspec/control_eval_context.rb +179 -179
- data/lib/inspec/dependencies/cache.rb +72 -72
- data/lib/inspec/dependencies/dependency_set.rb +92 -92
- data/lib/inspec/dependencies/lockfile.rb +115 -115
- data/lib/inspec/dependencies/requirement.rb +123 -123
- data/lib/inspec/dependencies/resolver.rb +86 -86
- data/lib/inspec/describe.rb +27 -27
- data/lib/inspec/dsl.rb +66 -66
- data/lib/inspec/dsl_shared.rb +33 -33
- data/lib/inspec/env_printer.rb +157 -157
- data/lib/inspec/errors.rb +14 -14
- data/lib/inspec/exceptions.rb +12 -12
- data/lib/inspec/expect.rb +45 -45
- data/lib/inspec/fetcher.rb +45 -45
- data/lib/inspec/file_provider.rb +275 -275
- data/lib/inspec/formatters.rb +3 -3
- data/lib/inspec/formatters/base.rb +259 -259
- data/lib/inspec/formatters/json_rspec.rb +20 -20
- data/lib/inspec/formatters/show_progress.rb +12 -12
- data/lib/inspec/library_eval_context.rb +58 -58
- data/lib/inspec/log.rb +11 -11
- data/lib/inspec/metadata.rb +247 -247
- data/lib/inspec/method_source.rb +24 -24
- data/lib/inspec/objects.rb +14 -14
- data/lib/inspec/objects/attribute.rb +75 -75
- data/lib/inspec/objects/control.rb +61 -61
- data/lib/inspec/objects/describe.rb +92 -92
- data/lib/inspec/objects/each_loop.rb +36 -36
- data/lib/inspec/objects/list.rb +15 -15
- data/lib/inspec/objects/or_test.rb +40 -40
- data/lib/inspec/objects/ruby_helper.rb +15 -15
- data/lib/inspec/objects/tag.rb +27 -27
- data/lib/inspec/objects/test.rb +87 -87
- data/lib/inspec/objects/value.rb +27 -27
- data/lib/inspec/plugins.rb +60 -60
- data/lib/inspec/plugins/cli.rb +24 -24
- data/lib/inspec/plugins/fetcher.rb +86 -86
- data/lib/inspec/plugins/resource.rb +135 -135
- data/lib/inspec/plugins/secret.rb +15 -15
- data/lib/inspec/plugins/source_reader.rb +40 -40
- data/lib/inspec/polyfill.rb +12 -12
- data/lib/inspec/profile.rb +513 -513
- data/lib/inspec/profile_context.rb +208 -208
- data/lib/inspec/profile_vendor.rb +66 -66
- data/lib/inspec/reporters.rb +60 -60
- data/lib/inspec/reporters/automate.rb +76 -76
- data/lib/inspec/reporters/base.rb +25 -25
- data/lib/inspec/reporters/cli.rb +356 -356
- data/lib/inspec/reporters/json.rb +117 -117
- data/lib/inspec/reporters/json_min.rb +48 -48
- data/lib/inspec/reporters/junit.rb +78 -78
- data/lib/inspec/require_loader.rb +33 -33
- data/lib/inspec/resource.rb +190 -190
- data/lib/inspec/rule.rb +280 -280
- data/lib/inspec/runner.rb +345 -345
- data/lib/inspec/runner_mock.rb +41 -41
- data/lib/inspec/runner_rspec.rb +175 -175
- data/lib/inspec/runtime_profile.rb +26 -26
- data/lib/inspec/schema.rb +213 -213
- data/lib/inspec/secrets.rb +19 -19
- data/lib/inspec/secrets/yaml.rb +30 -30
- data/lib/inspec/shell.rb +220 -220
- data/lib/inspec/shell_detector.rb +90 -90
- data/lib/inspec/source_reader.rb +29 -29
- data/lib/inspec/version.rb +8 -8
- data/lib/matchers/matchers.rb +339 -339
- data/lib/resource_support/aws.rb +50 -50
- data/lib/resource_support/aws/aws_backend_base.rb +12 -12
- data/lib/resource_support/aws/aws_backend_factory_mixin.rb +12 -12
- data/lib/resource_support/aws/aws_plural_resource_mixin.rb +21 -21
- data/lib/resource_support/aws/aws_resource_mixin.rb +66 -66
- data/lib/resource_support/aws/aws_singular_resource_mixin.rb +24 -24
- data/lib/resources/aide_conf.rb +151 -151
- data/lib/resources/apache.rb +48 -48
- data/lib/resources/apache_conf.rb +149 -149
- data/lib/resources/apt.rb +149 -149
- data/lib/resources/audit_policy.rb +63 -63
- data/lib/resources/auditd.rb +231 -231
- data/lib/resources/auditd_conf.rb +46 -46
- data/lib/resources/aws/aws_cloudtrail_trail.rb +93 -93
- data/lib/resources/aws/aws_cloudtrail_trails.rb +47 -47
- data/lib/resources/aws/aws_cloudwatch_alarm.rb +62 -62
- data/lib/resources/aws/aws_cloudwatch_log_metric_filter.rb +100 -100
- data/lib/resources/aws/aws_config_delivery_channel.rb +70 -70
- data/lib/resources/aws/aws_config_recorder.rb +93 -93
- data/lib/resources/aws/aws_ec2_instance.rb +157 -157
- data/lib/resources/aws/aws_ec2_instances.rb +64 -64
- data/lib/resources/aws/aws_iam_access_key.rb +106 -106
- data/lib/resources/aws/aws_iam_access_keys.rb +149 -149
- data/lib/resources/aws/aws_iam_group.rb +58 -58
- data/lib/resources/aws/aws_iam_groups.rb +52 -52
- data/lib/resources/aws/aws_iam_password_policy.rb +116 -116
- data/lib/resources/aws/aws_iam_policies.rb +53 -53
- data/lib/resources/aws/aws_iam_policy.rb +291 -291
- data/lib/resources/aws/aws_iam_role.rb +55 -55
- data/lib/resources/aws/aws_iam_root_user.rb +78 -78
- data/lib/resources/aws/aws_iam_user.rb +142 -142
- data/lib/resources/aws/aws_iam_users.rb +146 -146
- data/lib/resources/aws/aws_kms_key.rb +96 -96
- data/lib/resources/aws/aws_kms_keys.rb +53 -53
- data/lib/resources/aws/aws_rds_instance.rb +71 -71
- data/lib/resources/aws/aws_route_table.rb +63 -63
- data/lib/resources/aws/aws_route_tables.rb +60 -60
- data/lib/resources/aws/aws_s3_bucket.rb +137 -137
- data/lib/resources/aws/aws_s3_bucket_object.rb +82 -82
- data/lib/resources/aws/aws_s3_buckets.rb +51 -51
- data/lib/resources/aws/aws_security_group.rb +249 -249
- data/lib/resources/aws/aws_security_groups.rb +68 -68
- data/lib/resources/aws/aws_sns_subscription.rb +78 -78
- data/lib/resources/aws/aws_sns_topic.rb +53 -53
- data/lib/resources/aws/aws_sns_topics.rb +56 -56
- data/lib/resources/aws/aws_subnet.rb +88 -88
- data/lib/resources/aws/aws_subnets.rb +53 -53
- data/lib/resources/aws/aws_vpc.rb +73 -73
- data/lib/resources/aws/aws_vpcs.rb +52 -52
- data/lib/resources/azure/azure_backend.rb +377 -377
- data/lib/resources/azure/azure_generic_resource.rb +59 -59
- data/lib/resources/azure/azure_resource_group.rb +152 -152
- data/lib/resources/azure/azure_virtual_machine.rb +264 -264
- data/lib/resources/azure/azure_virtual_machine_data_disk.rb +134 -134
- data/lib/resources/bash.rb +35 -35
- data/lib/resources/bond.rb +69 -69
- data/lib/resources/bridge.rb +122 -122
- data/lib/resources/chocolatey_package.rb +78 -78
- data/lib/resources/command.rb +73 -73
- data/lib/resources/cpan.rb +58 -58
- data/lib/resources/cran.rb +64 -64
- data/lib/resources/crontab.rb +169 -169
- data/lib/resources/csv.rb +56 -56
- data/lib/resources/dh_params.rb +77 -77
- data/lib/resources/directory.rb +25 -25
- data/lib/resources/docker.rb +236 -236
- data/lib/resources/docker_container.rb +89 -89
- data/lib/resources/docker_image.rb +83 -83
- data/lib/resources/docker_object.rb +57 -57
- data/lib/resources/docker_service.rb +90 -90
- data/lib/resources/elasticsearch.rb +169 -169
- data/lib/resources/etc_fstab.rb +94 -94
- data/lib/resources/etc_group.rb +154 -154
- data/lib/resources/etc_hosts.rb +66 -66
- data/lib/resources/etc_hosts_allow_deny.rb +112 -112
- data/lib/resources/file.rb +298 -298
- data/lib/resources/filesystem.rb +31 -31
- data/lib/resources/firewalld.rb +143 -143
- data/lib/resources/gem.rb +70 -70
- data/lib/resources/groups.rb +215 -215
- data/lib/resources/grub_conf.rb +227 -227
- data/lib/resources/host.rb +306 -306
- data/lib/resources/http.rb +253 -253
- data/lib/resources/iis_app.rb +101 -101
- data/lib/resources/iis_site.rb +148 -148
- data/lib/resources/inetd_conf.rb +54 -54
- data/lib/resources/ini.rb +29 -29
- data/lib/resources/interface.rb +129 -129
- data/lib/resources/iptables.rb +80 -80
- data/lib/resources/json.rb +111 -111
- data/lib/resources/kernel_module.rb +107 -107
- data/lib/resources/kernel_parameter.rb +58 -58
- data/lib/resources/key_rsa.rb +63 -63
- data/lib/resources/limits_conf.rb +46 -46
- data/lib/resources/login_def.rb +57 -57
- data/lib/resources/mount.rb +88 -88
- data/lib/resources/mssql_session.rb +101 -101
- data/lib/resources/mysql.rb +82 -82
- data/lib/resources/mysql_conf.rb +127 -127
- data/lib/resources/mysql_session.rb +85 -85
- data/lib/resources/nginx.rb +96 -96
- data/lib/resources/nginx_conf.rb +226 -226
- data/lib/resources/npm.rb +48 -48
- data/lib/resources/ntp_conf.rb +51 -51
- data/lib/resources/oneget.rb +71 -71
- data/lib/resources/oracledb_session.rb +139 -139
- data/lib/resources/os.rb +36 -36
- data/lib/resources/os_env.rb +86 -86
- data/lib/resources/package.rb +370 -370
- data/lib/resources/packages.rb +111 -111
- data/lib/resources/parse_config.rb +112 -112
- data/lib/resources/passwd.rb +76 -76
- data/lib/resources/pip.rb +130 -130
- data/lib/resources/platform.rb +109 -109
- data/lib/resources/port.rb +771 -771
- data/lib/resources/postgres.rb +131 -131
- data/lib/resources/postgres_conf.rb +114 -114
- data/lib/resources/postgres_hba_conf.rb +90 -90
- data/lib/resources/postgres_ident_conf.rb +79 -79
- data/lib/resources/postgres_session.rb +71 -71
- data/lib/resources/powershell.rb +67 -67
- data/lib/resources/processes.rb +204 -204
- data/lib/resources/rabbitmq_conf.rb +51 -51
- data/lib/resources/registry_key.rb +297 -297
- data/lib/resources/security_policy.rb +180 -180
- data/lib/resources/service.rb +794 -794
- data/lib/resources/shadow.rb +159 -159
- data/lib/resources/ssh_conf.rb +97 -97
- data/lib/resources/ssl.rb +99 -99
- data/lib/resources/sys_info.rb +28 -28
- data/lib/resources/toml.rb +32 -32
- data/lib/resources/users.rb +654 -654
- data/lib/resources/vbscript.rb +68 -68
- data/lib/resources/virtualization.rb +247 -247
- data/lib/resources/windows_feature.rb +84 -84
- data/lib/resources/windows_hotfix.rb +35 -35
- data/lib/resources/windows_task.rb +102 -102
- data/lib/resources/wmi.rb +110 -110
- data/lib/resources/x509_certificate.rb +137 -137
- data/lib/resources/xinetd.rb +106 -106
- data/lib/resources/xml.rb +46 -46
- data/lib/resources/yaml.rb +43 -43
- data/lib/resources/yum.rb +180 -180
- data/lib/resources/zfs_dataset.rb +60 -60
- data/lib/resources/zfs_pool.rb +49 -49
- data/lib/source_readers/flat.rb +39 -39
- data/lib/source_readers/inspec.rb +75 -75
- data/lib/utils/command_wrapper.rb +27 -27
- data/lib/utils/convert.rb +12 -12
- data/lib/utils/database_helpers.rb +77 -77
- data/lib/utils/enumerable_delegation.rb +9 -9
- data/lib/utils/erlang_parser.rb +192 -192
- data/lib/utils/file_reader.rb +25 -25
- data/lib/utils/filter.rb +273 -273
- data/lib/utils/filter_array.rb +27 -27
- data/lib/utils/find_files.rb +47 -47
- data/lib/utils/hash.rb +41 -41
- data/lib/utils/json_log.rb +18 -18
- data/lib/utils/latest_version.rb +22 -22
- data/lib/utils/modulator.rb +12 -12
- data/lib/utils/nginx_parser.rb +105 -105
- data/lib/utils/object_traversal.rb +49 -49
- data/lib/utils/parser.rb +274 -274
- data/lib/utils/pkey_reader.rb +15 -15
- data/lib/utils/plugin_registry.rb +93 -93
- data/lib/utils/simpleconfig.rb +120 -120
- data/lib/utils/spdx.rb +13 -13
- data/lib/utils/spdx.txt +343 -343
- metadata +3 -3
data/lib/resources/bridge.rb
CHANGED
|
@@ -1,122 +1,122 @@
|
|
|
1
|
-
# encoding: utf-8
|
|
2
|
-
|
|
3
|
-
# Usage:
|
|
4
|
-
# describe bridge('br0') do
|
|
5
|
-
# it { should exist }
|
|
6
|
-
# it { should have_interface 'eth0' }
|
|
7
|
-
# end
|
|
8
|
-
|
|
9
|
-
module Inspec::Resources
|
|
10
|
-
class Bridge < Inspec.resource(1)
|
|
11
|
-
name 'bridge'
|
|
12
|
-
supports platform: 'unix'
|
|
13
|
-
desc 'Use the bridge InSpec audit resource to test basic network bridge properties, such as name, if an interface is defined, and the associations for any defined interface.'
|
|
14
|
-
example "
|
|
15
|
-
describe bridge 'br0' do
|
|
16
|
-
it { should exist }
|
|
17
|
-
it { should have_interface 'eth0' }
|
|
18
|
-
end
|
|
19
|
-
"
|
|
20
|
-
|
|
21
|
-
def initialize(bridge_name)
|
|
22
|
-
@bridge_name = bridge_name
|
|
23
|
-
|
|
24
|
-
@bridge_provider = nil
|
|
25
|
-
if inspec.os.linux?
|
|
26
|
-
@bridge_provider = LinuxBridge.new(inspec)
|
|
27
|
-
elsif inspec.os.windows?
|
|
28
|
-
@bridge_provider = WindowsBridge.new(inspec)
|
|
29
|
-
else
|
|
30
|
-
return skip_resource 'The `bridge` resource is not supported on your OS yet.'
|
|
31
|
-
end
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
def exists?
|
|
35
|
-
!bridge_info.nil? && !bridge_info[:name].nil?
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
def has_interface?(interface)
|
|
39
|
-
return skip_resource 'The `bridge` resource does not provide interface detection for Windows yet' if inspec.os.windows?
|
|
40
|
-
bridge_info.nil? ? false : bridge_info[:interfaces].include?(interface)
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
def interfaces
|
|
44
|
-
bridge_info.nil? ? nil : bridge_info[:interfaces]
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
def to_s
|
|
48
|
-
"Bridge #{@bridge_name}"
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
private
|
|
52
|
-
|
|
53
|
-
def bridge_info
|
|
54
|
-
return @cache if defined?(@cache)
|
|
55
|
-
@cache = @bridge_provider.bridge_info(@bridge_name) if !@bridge_provider.nil?
|
|
56
|
-
end
|
|
57
|
-
end
|
|
58
|
-
|
|
59
|
-
class BridgeDetection
|
|
60
|
-
attr_reader :inspec
|
|
61
|
-
def initialize(inspec)
|
|
62
|
-
@inspec = inspec
|
|
63
|
-
end
|
|
64
|
-
end
|
|
65
|
-
|
|
66
|
-
# Linux Bridge
|
|
67
|
-
# If /sys/class/net/{interface}/bridge exists then it must be a bridge
|
|
68
|
-
# /sys/class/net/{interface}/brif contains the network interfaces
|
|
69
|
-
# @see http://www.tldp.org/HOWTO/BRIDGE-STP-HOWTO/set-up-the-bridge.html
|
|
70
|
-
# @see http://unix.stackexchange.com/questions/40560/how-to-know-if-a-network-interface-is-tap-tun-bridge-or-physical
|
|
71
|
-
class LinuxBridge < BridgeDetection
|
|
72
|
-
def bridge_info(bridge_name)
|
|
73
|
-
# read bridge information
|
|
74
|
-
bridge = inspec.file("/sys/class/net/#{bridge_name}/bridge").directory?
|
|
75
|
-
return nil unless bridge
|
|
76
|
-
|
|
77
|
-
# load interface names
|
|
78
|
-
interfaces = inspec.command("ls -1 /sys/class/net/#{bridge_name}/brif/")
|
|
79
|
-
interfaces = interfaces.stdout.chomp.split("\n")
|
|
80
|
-
{
|
|
81
|
-
name: bridge_name,
|
|
82
|
-
interfaces: interfaces,
|
|
83
|
-
}
|
|
84
|
-
end
|
|
85
|
-
end
|
|
86
|
-
|
|
87
|
-
# Windows Bridge
|
|
88
|
-
# select netadapter by adapter binding for windows
|
|
89
|
-
# Get-NetAdapterBinding -ComponentID ms_bridge | Get-NetAdapter
|
|
90
|
-
# @see https://technet.microsoft.com/en-us/library/jj130921(v=wps.630).aspx
|
|
91
|
-
# RegKeys: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002BE10318}
|
|
92
|
-
class WindowsBridge < BridgeDetection
|
|
93
|
-
def bridge_info(bridge_name)
|
|
94
|
-
# find all bridge adapters
|
|
95
|
-
cmd = inspec.command('Get-NetAdapterBinding -ComponentID ms_bridge | Get-NetAdapter | Select-Object -Property Name, InterfaceDescription | ConvertTo-Json')
|
|
96
|
-
|
|
97
|
-
# filter network interface
|
|
98
|
-
begin
|
|
99
|
-
bridges = JSON.parse(cmd.stdout)
|
|
100
|
-
rescue JSON::ParserError => _e
|
|
101
|
-
return nil
|
|
102
|
-
end
|
|
103
|
-
|
|
104
|
-
# ensure we have an array of groups
|
|
105
|
-
bridges = [bridges] if !bridges.is_a?(Array)
|
|
106
|
-
|
|
107
|
-
# select the requested interface
|
|
108
|
-
bridges = bridges.each_with_object([]) do |adapter, adapter_collection|
|
|
109
|
-
# map object
|
|
110
|
-
info = {
|
|
111
|
-
name: adapter['Name'],
|
|
112
|
-
interfaces: nil,
|
|
113
|
-
}
|
|
114
|
-
adapter_collection.push(info) if info[:name].casecmp(bridge_name) == 0
|
|
115
|
-
end
|
|
116
|
-
|
|
117
|
-
return nil if bridges.empty?
|
|
118
|
-
warn "[Possible Error] detected multiple bridges interfaces with the name #{bridge_name}" if bridges.size > 1
|
|
119
|
-
bridges[0]
|
|
120
|
-
end
|
|
121
|
-
end
|
|
122
|
-
end
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
# Usage:
|
|
4
|
+
# describe bridge('br0') do
|
|
5
|
+
# it { should exist }
|
|
6
|
+
# it { should have_interface 'eth0' }
|
|
7
|
+
# end
|
|
8
|
+
|
|
9
|
+
module Inspec::Resources
|
|
10
|
+
class Bridge < Inspec.resource(1)
|
|
11
|
+
name 'bridge'
|
|
12
|
+
supports platform: 'unix'
|
|
13
|
+
desc 'Use the bridge InSpec audit resource to test basic network bridge properties, such as name, if an interface is defined, and the associations for any defined interface.'
|
|
14
|
+
example "
|
|
15
|
+
describe bridge 'br0' do
|
|
16
|
+
it { should exist }
|
|
17
|
+
it { should have_interface 'eth0' }
|
|
18
|
+
end
|
|
19
|
+
"
|
|
20
|
+
|
|
21
|
+
def initialize(bridge_name)
|
|
22
|
+
@bridge_name = bridge_name
|
|
23
|
+
|
|
24
|
+
@bridge_provider = nil
|
|
25
|
+
if inspec.os.linux?
|
|
26
|
+
@bridge_provider = LinuxBridge.new(inspec)
|
|
27
|
+
elsif inspec.os.windows?
|
|
28
|
+
@bridge_provider = WindowsBridge.new(inspec)
|
|
29
|
+
else
|
|
30
|
+
return skip_resource 'The `bridge` resource is not supported on your OS yet.'
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def exists?
|
|
35
|
+
!bridge_info.nil? && !bridge_info[:name].nil?
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def has_interface?(interface)
|
|
39
|
+
return skip_resource 'The `bridge` resource does not provide interface detection for Windows yet' if inspec.os.windows?
|
|
40
|
+
bridge_info.nil? ? false : bridge_info[:interfaces].include?(interface)
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def interfaces
|
|
44
|
+
bridge_info.nil? ? nil : bridge_info[:interfaces]
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def to_s
|
|
48
|
+
"Bridge #{@bridge_name}"
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
private
|
|
52
|
+
|
|
53
|
+
def bridge_info
|
|
54
|
+
return @cache if defined?(@cache)
|
|
55
|
+
@cache = @bridge_provider.bridge_info(@bridge_name) if !@bridge_provider.nil?
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
class BridgeDetection
|
|
60
|
+
attr_reader :inspec
|
|
61
|
+
def initialize(inspec)
|
|
62
|
+
@inspec = inspec
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
# Linux Bridge
|
|
67
|
+
# If /sys/class/net/{interface}/bridge exists then it must be a bridge
|
|
68
|
+
# /sys/class/net/{interface}/brif contains the network interfaces
|
|
69
|
+
# @see http://www.tldp.org/HOWTO/BRIDGE-STP-HOWTO/set-up-the-bridge.html
|
|
70
|
+
# @see http://unix.stackexchange.com/questions/40560/how-to-know-if-a-network-interface-is-tap-tun-bridge-or-physical
|
|
71
|
+
class LinuxBridge < BridgeDetection
|
|
72
|
+
def bridge_info(bridge_name)
|
|
73
|
+
# read bridge information
|
|
74
|
+
bridge = inspec.file("/sys/class/net/#{bridge_name}/bridge").directory?
|
|
75
|
+
return nil unless bridge
|
|
76
|
+
|
|
77
|
+
# load interface names
|
|
78
|
+
interfaces = inspec.command("ls -1 /sys/class/net/#{bridge_name}/brif/")
|
|
79
|
+
interfaces = interfaces.stdout.chomp.split("\n")
|
|
80
|
+
{
|
|
81
|
+
name: bridge_name,
|
|
82
|
+
interfaces: interfaces,
|
|
83
|
+
}
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
# Windows Bridge
|
|
88
|
+
# select netadapter by adapter binding for windows
|
|
89
|
+
# Get-NetAdapterBinding -ComponentID ms_bridge | Get-NetAdapter
|
|
90
|
+
# @see https://technet.microsoft.com/en-us/library/jj130921(v=wps.630).aspx
|
|
91
|
+
# RegKeys: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002BE10318}
|
|
92
|
+
class WindowsBridge < BridgeDetection
|
|
93
|
+
def bridge_info(bridge_name)
|
|
94
|
+
# find all bridge adapters
|
|
95
|
+
cmd = inspec.command('Get-NetAdapterBinding -ComponentID ms_bridge | Get-NetAdapter | Select-Object -Property Name, InterfaceDescription | ConvertTo-Json')
|
|
96
|
+
|
|
97
|
+
# filter network interface
|
|
98
|
+
begin
|
|
99
|
+
bridges = JSON.parse(cmd.stdout)
|
|
100
|
+
rescue JSON::ParserError => _e
|
|
101
|
+
return nil
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
# ensure we have an array of groups
|
|
105
|
+
bridges = [bridges] if !bridges.is_a?(Array)
|
|
106
|
+
|
|
107
|
+
# select the requested interface
|
|
108
|
+
bridges = bridges.each_with_object([]) do |adapter, adapter_collection|
|
|
109
|
+
# map object
|
|
110
|
+
info = {
|
|
111
|
+
name: adapter['Name'],
|
|
112
|
+
interfaces: nil,
|
|
113
|
+
}
|
|
114
|
+
adapter_collection.push(info) if info[:name].casecmp(bridge_name) == 0
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
return nil if bridges.empty?
|
|
118
|
+
warn "[Possible Error] detected multiple bridges interfaces with the name #{bridge_name}" if bridges.size > 1
|
|
119
|
+
bridges[0]
|
|
120
|
+
end
|
|
121
|
+
end
|
|
122
|
+
end
|
|
@@ -1,78 +1,78 @@
|
|
|
1
|
-
# encoding: utf-8
|
|
2
|
-
# frozen_string_literal: true
|
|
3
|
-
|
|
4
|
-
# Check for Chocolatey packages to be installed
|
|
5
|
-
module Inspec::Resources
|
|
6
|
-
class ChocoPkg < Inspec.resource(1)
|
|
7
|
-
name 'chocolatey_package'
|
|
8
|
-
supports platform: 'windows'
|
|
9
|
-
desc 'Use the chocolatey_package Inspec audit resource to test if the named package and/or package version is installed on the system.'
|
|
10
|
-
example <<-EOH
|
|
11
|
-
describe chocolatey_package('git') do
|
|
12
|
-
it { should be_installed }
|
|
13
|
-
its('version') { should eq '2.15.1' }
|
|
14
|
-
end
|
|
15
|
-
EOH
|
|
16
|
-
|
|
17
|
-
attr_reader :package_name
|
|
18
|
-
|
|
19
|
-
def initialize(package_name, _opts = {})
|
|
20
|
-
raise 'Chocolatey is not installed' unless inspec.command('choco').exist?
|
|
21
|
-
@package_name = package_name
|
|
22
|
-
@cache = base_data.update(generate_cache)
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
def installed?
|
|
26
|
-
@cache[:installed]
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
def info
|
|
30
|
-
@cache.dup
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
def respond_to_missing?(method_name, *)
|
|
34
|
-
@cache.key?(method_name) || super
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
def method_missing(method_name, *args, &block)
|
|
38
|
-
if @cache.key?(method_name)
|
|
39
|
-
@cache.fetch(method_name)
|
|
40
|
-
else
|
|
41
|
-
super
|
|
42
|
-
end
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
def to_s
|
|
46
|
-
"Chocolatey package #{package_name}"
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
private
|
|
50
|
-
|
|
51
|
-
def base_data
|
|
52
|
-
{
|
|
53
|
-
name: package_name,
|
|
54
|
-
version: nil,
|
|
55
|
-
installed: false,
|
|
56
|
-
type: 'chocolatey',
|
|
57
|
-
}
|
|
58
|
-
end
|
|
59
|
-
|
|
60
|
-
def generate_cache
|
|
61
|
-
command = <<-EOH
|
|
62
|
-
(choco list --local-only --exact --include-programs --limit-output '#{package_name.gsub("'", "\`'")}') -Replace "\\|", "=" | ConvertFrom-StringData | ConvertTo-JSON
|
|
63
|
-
EOH
|
|
64
|
-
|
|
65
|
-
cmd = inspec.powershell(command.strip)
|
|
66
|
-
|
|
67
|
-
return {} if cmd.exit_status != 0 || cmd.stdout.strip.empty?
|
|
68
|
-
out = JSON.parse(cmd.stdout)
|
|
69
|
-
|
|
70
|
-
return {
|
|
71
|
-
version: out.fetch(package_name),
|
|
72
|
-
installed: true,
|
|
73
|
-
}
|
|
74
|
-
rescue JSON::ParserError, KeyError
|
|
75
|
-
return {}
|
|
76
|
-
end
|
|
77
|
-
end
|
|
78
|
-
end
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
# Check for Chocolatey packages to be installed
|
|
5
|
+
module Inspec::Resources
|
|
6
|
+
class ChocoPkg < Inspec.resource(1)
|
|
7
|
+
name 'chocolatey_package'
|
|
8
|
+
supports platform: 'windows'
|
|
9
|
+
desc 'Use the chocolatey_package Inspec audit resource to test if the named package and/or package version is installed on the system.'
|
|
10
|
+
example <<-EOH
|
|
11
|
+
describe chocolatey_package('git') do
|
|
12
|
+
it { should be_installed }
|
|
13
|
+
its('version') { should eq '2.15.1' }
|
|
14
|
+
end
|
|
15
|
+
EOH
|
|
16
|
+
|
|
17
|
+
attr_reader :package_name
|
|
18
|
+
|
|
19
|
+
def initialize(package_name, _opts = {})
|
|
20
|
+
raise 'Chocolatey is not installed' unless inspec.command('choco').exist?
|
|
21
|
+
@package_name = package_name
|
|
22
|
+
@cache = base_data.update(generate_cache)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def installed?
|
|
26
|
+
@cache[:installed]
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def info
|
|
30
|
+
@cache.dup
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def respond_to_missing?(method_name, *)
|
|
34
|
+
@cache.key?(method_name) || super
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def method_missing(method_name, *args, &block)
|
|
38
|
+
if @cache.key?(method_name)
|
|
39
|
+
@cache.fetch(method_name)
|
|
40
|
+
else
|
|
41
|
+
super
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def to_s
|
|
46
|
+
"Chocolatey package #{package_name}"
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
private
|
|
50
|
+
|
|
51
|
+
def base_data
|
|
52
|
+
{
|
|
53
|
+
name: package_name,
|
|
54
|
+
version: nil,
|
|
55
|
+
installed: false,
|
|
56
|
+
type: 'chocolatey',
|
|
57
|
+
}
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def generate_cache
|
|
61
|
+
command = <<-EOH
|
|
62
|
+
(choco list --local-only --exact --include-programs --limit-output '#{package_name.gsub("'", "\`'")}') -Replace "\\|", "=" | ConvertFrom-StringData | ConvertTo-JSON
|
|
63
|
+
EOH
|
|
64
|
+
|
|
65
|
+
cmd = inspec.powershell(command.strip)
|
|
66
|
+
|
|
67
|
+
return {} if cmd.exit_status != 0 || cmd.stdout.strip.empty?
|
|
68
|
+
out = JSON.parse(cmd.stdout)
|
|
69
|
+
|
|
70
|
+
return {
|
|
71
|
+
version: out.fetch(package_name),
|
|
72
|
+
installed: true,
|
|
73
|
+
}
|
|
74
|
+
rescue JSON::ParserError, KeyError
|
|
75
|
+
return {}
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
end
|
data/lib/resources/command.rb
CHANGED
|
@@ -1,73 +1,73 @@
|
|
|
1
|
-
# encoding: utf-8
|
|
2
|
-
# copyright: 2015, Vulcano Security GmbH
|
|
3
|
-
|
|
4
|
-
module Inspec::Resources
|
|
5
|
-
class Cmd < Inspec.resource(1)
|
|
6
|
-
name 'command'
|
|
7
|
-
supports platform: 'unix'
|
|
8
|
-
supports platform: 'windows'
|
|
9
|
-
desc 'Use the command InSpec audit resource to test an arbitrary command that is run on the system.'
|
|
10
|
-
example "
|
|
11
|
-
describe command('ls -al /') do
|
|
12
|
-
its('stdout') { should match /bin/ }
|
|
13
|
-
its('stderr') { should eq '' }
|
|
14
|
-
its('exit_status') { should eq 0 }
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
command('ls -al /').exist? will return false. Existence of command should be checked this way.
|
|
18
|
-
describe command('ls') do
|
|
19
|
-
it { should exist }
|
|
20
|
-
end
|
|
21
|
-
"
|
|
22
|
-
|
|
23
|
-
attr_reader :command
|
|
24
|
-
|
|
25
|
-
def initialize(cmd)
|
|
26
|
-
if cmd.nil?
|
|
27
|
-
raise 'InSpec `command` was called with `nil` as the argument. This is not supported. Please provide a valid command instead.'
|
|
28
|
-
end
|
|
29
|
-
@command = cmd
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
def result
|
|
33
|
-
@result ||= inspec.backend.run_command(@command)
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
def stdout
|
|
37
|
-
result.stdout
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
def stderr
|
|
41
|
-
result.stderr
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
def exit_status
|
|
45
|
-
result.exit_status.to_i
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
def exist? # rubocop:disable Metrics/AbcSize
|
|
49
|
-
# silent for mock resources
|
|
50
|
-
return false if inspec.os.name.nil? || inspec.os.name == 'mock'
|
|
51
|
-
|
|
52
|
-
if inspec.os.linux?
|
|
53
|
-
res = if inspec.platform.name == 'alpine'
|
|
54
|
-
inspec.backend.run_command("which \"#{@command}\"")
|
|
55
|
-
else
|
|
56
|
-
inspec.backend.run_command("bash -c 'type \"#{@command}\"'")
|
|
57
|
-
end
|
|
58
|
-
elsif inspec.os.windows?
|
|
59
|
-
res = inspec.backend.run_command("Get-Command \"#{@command}\"")
|
|
60
|
-
elsif inspec.os.unix?
|
|
61
|
-
res = inspec.backend.run_command("type \"#{@command}\"")
|
|
62
|
-
else
|
|
63
|
-
warn "`command(#{@command}).exist?` is not supported on your OS: #{inspec.os[:name]}"
|
|
64
|
-
return false
|
|
65
|
-
end
|
|
66
|
-
res.exit_status.to_i == 0
|
|
67
|
-
end
|
|
68
|
-
|
|
69
|
-
def to_s
|
|
70
|
-
"Command #{@command}"
|
|
71
|
-
end
|
|
72
|
-
end
|
|
73
|
-
end
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
# copyright: 2015, Vulcano Security GmbH
|
|
3
|
+
|
|
4
|
+
module Inspec::Resources
|
|
5
|
+
class Cmd < Inspec.resource(1)
|
|
6
|
+
name 'command'
|
|
7
|
+
supports platform: 'unix'
|
|
8
|
+
supports platform: 'windows'
|
|
9
|
+
desc 'Use the command InSpec audit resource to test an arbitrary command that is run on the system.'
|
|
10
|
+
example "
|
|
11
|
+
describe command('ls -al /') do
|
|
12
|
+
its('stdout') { should match /bin/ }
|
|
13
|
+
its('stderr') { should eq '' }
|
|
14
|
+
its('exit_status') { should eq 0 }
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
command('ls -al /').exist? will return false. Existence of command should be checked this way.
|
|
18
|
+
describe command('ls') do
|
|
19
|
+
it { should exist }
|
|
20
|
+
end
|
|
21
|
+
"
|
|
22
|
+
|
|
23
|
+
attr_reader :command
|
|
24
|
+
|
|
25
|
+
def initialize(cmd)
|
|
26
|
+
if cmd.nil?
|
|
27
|
+
raise 'InSpec `command` was called with `nil` as the argument. This is not supported. Please provide a valid command instead.'
|
|
28
|
+
end
|
|
29
|
+
@command = cmd
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def result
|
|
33
|
+
@result ||= inspec.backend.run_command(@command)
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def stdout
|
|
37
|
+
result.stdout
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def stderr
|
|
41
|
+
result.stderr
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def exit_status
|
|
45
|
+
result.exit_status.to_i
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def exist? # rubocop:disable Metrics/AbcSize
|
|
49
|
+
# silent for mock resources
|
|
50
|
+
return false if inspec.os.name.nil? || inspec.os.name == 'mock'
|
|
51
|
+
|
|
52
|
+
if inspec.os.linux?
|
|
53
|
+
res = if inspec.platform.name == 'alpine'
|
|
54
|
+
inspec.backend.run_command("which \"#{@command}\"")
|
|
55
|
+
else
|
|
56
|
+
inspec.backend.run_command("bash -c 'type \"#{@command}\"'")
|
|
57
|
+
end
|
|
58
|
+
elsif inspec.os.windows?
|
|
59
|
+
res = inspec.backend.run_command("Get-Command \"#{@command}\"")
|
|
60
|
+
elsif inspec.os.unix?
|
|
61
|
+
res = inspec.backend.run_command("type \"#{@command}\"")
|
|
62
|
+
else
|
|
63
|
+
warn "`command(#{@command}).exist?` is not supported on your OS: #{inspec.os[:name]}"
|
|
64
|
+
return false
|
|
65
|
+
end
|
|
66
|
+
res.exit_status.to_i == 0
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def to_s
|
|
70
|
+
"Command #{@command}"
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
end
|