inspec 2.0.32 → 2.0.45
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/.rubocop.yml +101 -101
- data/CHANGELOG.md +2991 -2970
- data/Gemfile +55 -55
- data/LICENSE +14 -14
- data/MAINTAINERS.md +33 -33
- data/MAINTAINERS.toml +52 -52
- data/README.md +446 -437
- data/Rakefile +322 -322
- data/bin/inspec +12 -12
- data/docs/.gitignore +2 -2
- data/docs/README.md +40 -40
- data/docs/dsl_inspec.md +258 -258
- data/docs/dsl_resource.md +93 -93
- data/docs/glossary.md +99 -99
- data/docs/habitat.md +191 -191
- data/docs/inspec_and_friends.md +107 -107
- data/docs/matchers.md +169 -168
- data/docs/migration.md +293 -293
- data/docs/platforms.md +118 -118
- data/docs/plugin_kitchen_inspec.md +49 -49
- data/docs/profiles.md +370 -370
- 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 +140 -140
- data/docs/resources/aws_cloudtrail_trails.md.erb +81 -81
- data/docs/resources/aws_cloudwatch_alarm.md.erb +86 -86
- data/docs/resources/aws_cloudwatch_log_metric_filter.md.erb +151 -151
- data/docs/resources/aws_config_recorder.md.erb +71 -71
- data/docs/resources/aws_ec2_instance.md.erb +106 -106
- data/docs/resources/aws_iam_access_key.md.erb +123 -123
- data/docs/resources/aws_iam_access_keys.md.erb +198 -198
- data/docs/resources/aws_iam_group.md.erb +46 -46
- data/docs/resources/aws_iam_groups.md.erb +43 -43
- data/docs/resources/aws_iam_password_policy.md.erb +76 -76
- data/docs/resources/aws_iam_policies.md.erb +82 -82
- data/docs/resources/aws_iam_policy.md.erb +144 -144
- data/docs/resources/aws_iam_role.md.erb +63 -63
- data/docs/resources/aws_iam_root_user.md.erb +58 -58
- data/docs/resources/aws_iam_user.md.erb +64 -64
- data/docs/resources/aws_iam_users.md.erb +89 -89
- data/docs/resources/aws_kms_keys.md.erb +84 -84
- data/docs/resources/aws_route_table.md.erb +47 -47
- data/docs/resources/aws_s3_bucket.md.erb +134 -134
- data/docs/resources/aws_security_group.md.erb +151 -151
- data/docs/resources/aws_security_groups.md.erb +91 -91
- data/docs/resources/aws_sns_topic.md.erb +63 -63
- data/docs/resources/aws_subnet.md.erb +133 -133
- data/docs/resources/aws_subnets.md.erb +126 -126
- data/docs/resources/aws_vpc.md.erb +120 -120
- data/docs/resources/aws_vpcs.md.erb +48 -48
- data/docs/resources/azure_generic_resource.md.erb +170 -170
- 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/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 +104 -104
- 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 -515
- 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 +196 -196
- 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_def.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 +128 -128
- 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 +78 -78
- 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 -144
- data/docs/resources/ssh_config.md.erb +80 -80
- 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 +215 -215
- 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 +22 -22
- 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 +53 -53
- data/inspec.gemspec +47 -47
- 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 +185 -185
- data/lib/bundles/inspec-compliance/api.rb +316 -316
- data/lib/bundles/inspec-compliance/api/login.rb +152 -152
- data/lib/bundles/inspec-compliance/bootstrap.sh +41 -41
- data/lib/bundles/inspec-compliance/cli.rb +254 -254
- data/lib/bundles/inspec-compliance/configuration.rb +103 -103
- data/lib/bundles/inspec-compliance/http.rb +86 -86
- data/lib/bundles/inspec-compliance/support.rb +36 -36
- data/lib/bundles/inspec-compliance/target.rb +98 -98
- 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 +390 -390
- 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 +204 -204
- 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 +92 -92
- data/lib/inspec/base_cli.rb +355 -350
- 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 +13 -13
- 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 +250 -250
- 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 +65 -65
- 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 +510 -510
- data/lib/inspec/profile_context.rb +207 -207
- data/lib/inspec/profile_vendor.rb +66 -66
- data/lib/inspec/reporters.rb +54 -50
- data/lib/inspec/reporters/base.rb +24 -24
- data/lib/inspec/reporters/cli.rb +356 -356
- data/lib/inspec/reporters/json.rb +116 -116
- data/lib/inspec/reporters/json_min.rb +48 -48
- data/lib/inspec/reporters/junit.rb +77 -77
- data/lib/inspec/require_loader.rb +33 -33
- data/lib/inspec/resource.rb +186 -186
- data/lib/inspec/rule.rb +266 -266
- 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 +41 -41
- 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 +159 -160
- data/lib/resources/apache.rb +48 -48
- data/lib/resources/apache_conf.rb +156 -156
- 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 +55 -55
- data/lib/resources/aws/aws_cloudtrail_trail.rb +77 -77
- 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_recorder.rb +98 -98
- data/lib/resources/aws/aws_ec2_instance.rb +157 -157
- data/lib/resources/aws/aws_iam_access_key.rb +106 -106
- data/lib/resources/aws/aws_iam_access_keys.rb +149 -144
- data/lib/resources/aws/aws_iam_group.rb +56 -56
- data/lib/resources/aws/aws_iam_groups.rb +52 -45
- data/lib/resources/aws/aws_iam_password_policy.rb +116 -116
- data/lib/resources/aws/aws_iam_policies.rb +53 -46
- data/lib/resources/aws/aws_iam_policy.rb +125 -119
- data/lib/resources/aws/aws_iam_role.rb +51 -51
- data/lib/resources/aws/aws_iam_root_user.rb +60 -60
- data/lib/resources/aws/aws_iam_user.rb +111 -111
- data/lib/resources/aws/aws_iam_users.rb +108 -96
- data/lib/resources/aws/aws_kms_keys.rb +53 -46
- data/lib/resources/aws/aws_route_table.rb +61 -61
- data/lib/resources/aws/aws_s3_bucket.rb +115 -115
- data/lib/resources/aws/aws_security_group.rb +93 -93
- data/lib/resources/aws/aws_security_groups.rb +68 -68
- data/lib/resources/aws/aws_sns_topic.rb +53 -53
- 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 +69 -69
- data/lib/resources/aws/aws_vpcs.rb +45 -45
- 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 +136 -136
- data/lib/resources/bash.rb +35 -35
- data/lib/resources/bond.rb +68 -68
- data/lib/resources/bridge.rb +122 -122
- data/lib/resources/command.rb +73 -69
- data/lib/resources/cpan.rb +58 -58
- data/lib/resources/cran.rb +64 -64
- data/lib/resources/crontab.rb +169 -170
- data/lib/resources/csv.rb +60 -60
- data/lib/resources/dh_params.rb +82 -82
- 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 +101 -102
- data/lib/resources/etc_group.rb +152 -156
- data/lib/resources/etc_hosts.rb +82 -81
- data/lib/resources/etc_hosts_allow_deny.rb +122 -123
- data/lib/resources/file.rb +298 -298
- data/lib/resources/filesystem.rb +31 -31
- data/lib/resources/firewalld.rb +143 -144
- data/lib/resources/gem.rb +70 -70
- data/lib/resources/groups.rb +215 -215
- data/lib/resources/grub_conf.rb +237 -237
- data/lib/resources/host.rb +306 -300
- data/lib/resources/http.rb +251 -250
- data/lib/resources/iis_app.rb +101 -104
- data/lib/resources/iis_site.rb +148 -148
- data/lib/resources/inetd_conf.rb +62 -62
- data/lib/resources/ini.rb +29 -29
- data/lib/resources/interface.rb +129 -129
- data/lib/resources/iptables.rb +80 -69
- data/lib/resources/json.rb +117 -117
- data/lib/resources/kernel_module.rb +107 -107
- data/lib/resources/kernel_parameter.rb +58 -58
- data/lib/resources/key_rsa.rb +67 -67
- data/lib/resources/limits_conf.rb +55 -55
- data/lib/resources/login_def.rb +66 -66
- data/lib/resources/mount.rb +88 -88
- data/lib/resources/mssql_session.rb +101 -101
- data/lib/resources/mysql.rb +81 -81
- data/lib/resources/mysql_conf.rb +134 -134
- data/lib/resources/mysql_session.rb +71 -71
- data/lib/resources/nginx.rb +96 -96
- data/lib/resources/nginx_conf.rb +227 -227
- data/lib/resources/npm.rb +48 -48
- data/lib/resources/ntp_conf.rb +58 -58
- 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 +76 -76
- data/lib/resources/package.rb +370 -370
- data/lib/resources/packages.rb +111 -111
- data/lib/resources/parse_config.rb +116 -116
- data/lib/resources/passwd.rb +74 -74
- data/lib/resources/pip.rb +89 -89
- data/lib/resources/platform.rb +109 -109
- data/lib/resources/port.rb +771 -771
- data/lib/resources/postgres.rb +130 -130
- data/lib/resources/postgres_conf.rb +121 -121
- data/lib/resources/postgres_hba_conf.rb +99 -100
- data/lib/resources/postgres_ident_conf.rb +76 -78
- data/lib/resources/postgres_session.rb +71 -71
- data/lib/resources/powershell.rb +53 -57
- data/lib/resources/processes.rb +204 -204
- data/lib/resources/rabbitmq_conf.rb +52 -52
- data/lib/resources/registry_key.rb +296 -296
- data/lib/resources/security_policy.rb +180 -180
- data/lib/resources/service.rb +789 -789
- data/lib/resources/shadow.rb +146 -140
- data/lib/resources/ssh_conf.rb +102 -102
- 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 -69
- 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 -105
- data/lib/resources/wmi.rb +110 -113
- data/lib/resources/x509_certificate.rb +143 -143
- data/lib/resources/xinetd.rb +111 -111
- data/lib/resources/xml.rb +46 -46
- data/lib/resources/yaml.rb +47 -47
- 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/erlang_parser.rb +192 -192
- data/lib/utils/filter.rb +272 -272
- data/lib/utils/filter_array.rb +27 -27
- data/lib/utils/find_files.rb +44 -44
- 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 +85 -85
- data/lib/utils/object_traversal.rb +49 -49
- data/lib/utils/parser.rb +274 -274
- 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 +2 -2
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
|
data/lib/resources/command.rb
CHANGED
|
@@ -1,69 +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 = inspec.
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
end
|
|
68
|
-
|
|
69
|
-
|
|
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
|
data/lib/resources/cpan.rb
CHANGED
|
@@ -1,58 +1,58 @@
|
|
|
1
|
-
# encoding: utf-8
|
|
2
|
-
|
|
3
|
-
# Usage:
|
|
4
|
-
# describe cpan('DBD::Pg') do
|
|
5
|
-
# it { should be_installed }
|
|
6
|
-
# end
|
|
7
|
-
#
|
|
8
|
-
|
|
9
|
-
module Inspec::Resources
|
|
10
|
-
class CpanPackage < Inspec.resource(1)
|
|
11
|
-
name 'cpan'
|
|
12
|
-
supports platform: 'unix'
|
|
13
|
-
desc 'Use the `cpan` InSpec audit resource to test Perl modules that are installed by system packages or the CPAN installer.'
|
|
14
|
-
example "
|
|
15
|
-
describe cpan('DBD::Pg') do
|
|
16
|
-
it { should be_installed }
|
|
17
|
-
end
|
|
18
|
-
"
|
|
19
|
-
|
|
20
|
-
def initialize(package_name, perl_lib_path = nil)
|
|
21
|
-
@package_name = package_name
|
|
22
|
-
@perl_lib_path = perl_lib_path
|
|
23
|
-
@perl_cmd = 'perl'
|
|
24
|
-
|
|
25
|
-
# this resource is not supported on Windows
|
|
26
|
-
return skip_resource 'The `cpan` resource is not supported on your OS yet.' if inspec.os.windows?
|
|
27
|
-
return skip_resource 'perl not found' unless inspec.command(@perl_cmd).exist?
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
def info
|
|
31
|
-
return @info if defined?(@info)
|
|
32
|
-
|
|
33
|
-
@info = {}
|
|
34
|
-
@info[:type] = 'cpan'
|
|
35
|
-
@info[:name] = @package_name
|
|
36
|
-
# set PERL5LIB environment variable if a custom lib path is given
|
|
37
|
-
lib_path = @perl_lib_path.nil? ? '' : "PERL5LIB=#{@perl_lib_path} "
|
|
38
|
-
cmd = inspec.command("#{lib_path+@perl_cmd} -le 'eval \"require $ARGV[0]\" and print $ARGV[0]->VERSION or exit 1' #{@package_name}")
|
|
39
|
-
@info[:installed] = cmd.exit_status.zero?
|
|
40
|
-
return @info unless cmd.exit_status.zero?
|
|
41
|
-
|
|
42
|
-
@info[:version] = cmd.stdout.strip
|
|
43
|
-
@info
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
def installed?
|
|
47
|
-
info[:installed] == true
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
def version
|
|
51
|
-
info[:version]
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
def to_s
|
|
55
|
-
"Perl Module #{@package_name}"
|
|
56
|
-
end
|
|
57
|
-
end
|
|
58
|
-
end
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
# Usage:
|
|
4
|
+
# describe cpan('DBD::Pg') do
|
|
5
|
+
# it { should be_installed }
|
|
6
|
+
# end
|
|
7
|
+
#
|
|
8
|
+
|
|
9
|
+
module Inspec::Resources
|
|
10
|
+
class CpanPackage < Inspec.resource(1)
|
|
11
|
+
name 'cpan'
|
|
12
|
+
supports platform: 'unix'
|
|
13
|
+
desc 'Use the `cpan` InSpec audit resource to test Perl modules that are installed by system packages or the CPAN installer.'
|
|
14
|
+
example "
|
|
15
|
+
describe cpan('DBD::Pg') do
|
|
16
|
+
it { should be_installed }
|
|
17
|
+
end
|
|
18
|
+
"
|
|
19
|
+
|
|
20
|
+
def initialize(package_name, perl_lib_path = nil)
|
|
21
|
+
@package_name = package_name
|
|
22
|
+
@perl_lib_path = perl_lib_path
|
|
23
|
+
@perl_cmd = 'perl'
|
|
24
|
+
|
|
25
|
+
# this resource is not supported on Windows
|
|
26
|
+
return skip_resource 'The `cpan` resource is not supported on your OS yet.' if inspec.os.windows?
|
|
27
|
+
return skip_resource 'perl not found' unless inspec.command(@perl_cmd).exist?
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def info
|
|
31
|
+
return @info if defined?(@info)
|
|
32
|
+
|
|
33
|
+
@info = {}
|
|
34
|
+
@info[:type] = 'cpan'
|
|
35
|
+
@info[:name] = @package_name
|
|
36
|
+
# set PERL5LIB environment variable if a custom lib path is given
|
|
37
|
+
lib_path = @perl_lib_path.nil? ? '' : "PERL5LIB=#{@perl_lib_path} "
|
|
38
|
+
cmd = inspec.command("#{lib_path+@perl_cmd} -le 'eval \"require $ARGV[0]\" and print $ARGV[0]->VERSION or exit 1' #{@package_name}")
|
|
39
|
+
@info[:installed] = cmd.exit_status.zero?
|
|
40
|
+
return @info unless cmd.exit_status.zero?
|
|
41
|
+
|
|
42
|
+
@info[:version] = cmd.stdout.strip
|
|
43
|
+
@info
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def installed?
|
|
47
|
+
info[:installed] == true
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def version
|
|
51
|
+
info[:version]
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def to_s
|
|
55
|
+
"Perl Module #{@package_name}"
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|