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/postgres.rb
CHANGED
|
@@ -1,130 +1,130 @@
|
|
|
1
|
-
# encoding: utf-8
|
|
2
|
-
# copyright: 2015, Vulcano Security GmbH
|
|
3
|
-
|
|
4
|
-
module Inspec::Resources
|
|
5
|
-
class Postgres < Inspec.resource(1)
|
|
6
|
-
name 'postgres'
|
|
7
|
-
supports platform: 'unix'
|
|
8
|
-
|
|
9
|
-
attr_reader :service, :data_dir, :conf_dir, :conf_path, :version, :cluster
|
|
10
|
-
def initialize
|
|
11
|
-
if inspec.os.debian?
|
|
12
|
-
#
|
|
13
|
-
# https://wiki.debian.org/PostgreSql
|
|
14
|
-
#
|
|
15
|
-
# Debian allows multiple versions of postgresql to be
|
|
16
|
-
# installed as well as multiple "clusters" to be configured.
|
|
17
|
-
#
|
|
18
|
-
@version = version_from_psql || version_from_dir('/etc/postgresql')
|
|
19
|
-
@cluster = cluster_from_dir("/etc/postgresql/#{@version}")
|
|
20
|
-
@conf_dir = "/etc/postgresql/#{@version}/#{@cluster}"
|
|
21
|
-
@data_dir = "/var/lib/postgresql/#{@version}/#{@cluster}"
|
|
22
|
-
else
|
|
23
|
-
@version = version_from_psql
|
|
24
|
-
if @version.nil?
|
|
25
|
-
if inspec.directory('/var/lib/pgsql/data').exist?
|
|
26
|
-
warn 'Unable to determine PostgreSQL version: psql did not return
|
|
27
|
-
a version number and unversioned data directories were found.'
|
|
28
|
-
nil
|
|
29
|
-
else
|
|
30
|
-
@version = version_from_dir('/var/lib/pgsql')
|
|
31
|
-
end
|
|
32
|
-
end
|
|
33
|
-
@data_dir = locate_data_dir_location_by_version(@version)
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
@service = 'postgresql'
|
|
37
|
-
@service += "-#{@version}" if @version.to_f >= 9.4
|
|
38
|
-
@conf_dir ||= @data_dir
|
|
39
|
-
|
|
40
|
-
verify_dirs
|
|
41
|
-
if !@version.nil? && !@conf_dir.empty?
|
|
42
|
-
@conf_path = File.join @conf_dir, 'postgresql.conf'
|
|
43
|
-
else
|
|
44
|
-
@conf_path = nil
|
|
45
|
-
return skip_resource 'Seems like PostgreSQL is not installed on your system'
|
|
46
|
-
end
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
def to_s
|
|
50
|
-
'PostgreSQL'
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
private
|
|
54
|
-
|
|
55
|
-
def verify_dirs
|
|
56
|
-
warn "Default postgresql configuration directory: #{@conf_dir} does not exist. " \
|
|
57
|
-
"Postgresql may not be installed or we've misidentified the configuration " \
|
|
58
|
-
'directory.' unless inspec.directory(@conf_dir).exist?
|
|
59
|
-
|
|
60
|
-
warn "Default postgresql data directory: #{@data_dir} does not exist. " \
|
|
61
|
-
"Postgresql may not be installed or we've misidentified the data " \
|
|
62
|
-
'directory.' unless inspec.directory(@data_dir).exist?
|
|
63
|
-
end
|
|
64
|
-
|
|
65
|
-
def version_from_psql
|
|
66
|
-
return unless inspec.command('psql').exist?
|
|
67
|
-
inspec.command("psql --version | awk '{ print $NF }' | awk -F. '{ print $1\".\"$2 }'").stdout.strip
|
|
68
|
-
end
|
|
69
|
-
|
|
70
|
-
def locate_data_dir_location_by_version(ver = @version)
|
|
71
|
-
data_dir_loc = nil
|
|
72
|
-
dir_list = [
|
|
73
|
-
"/var/lib/pgsql/#{ver}/data",
|
|
74
|
-
'/var/lib/pgsql/data',
|
|
75
|
-
'/var/lib/postgres/data',
|
|
76
|
-
'/var/lib/postgresql/data',
|
|
77
|
-
]
|
|
78
|
-
|
|
79
|
-
dir_list.each do |dir|
|
|
80
|
-
data_dir_loc = dir if inspec.directory(dir).exist?
|
|
81
|
-
break
|
|
82
|
-
end
|
|
83
|
-
|
|
84
|
-
if data_dir_loc.nil?
|
|
85
|
-
warn 'Unable to find the PostgreSQL data_dir in expected location(s), please
|
|
86
|
-
execute "psql -t -A -p <port> -h <host> -c "show hba_file";" as the PostgreSQL
|
|
87
|
-
DBA to find the non-standard data_dir location.'
|
|
88
|
-
end
|
|
89
|
-
data_dir_loc
|
|
90
|
-
end
|
|
91
|
-
|
|
92
|
-
def version_from_dir(dir)
|
|
93
|
-
dirs = inspec.command("ls -d #{dir}/*/").stdout
|
|
94
|
-
entries = dirs.lines.count
|
|
95
|
-
case entries
|
|
96
|
-
when 0
|
|
97
|
-
warn "Could not determine version of installed postgresql by inspecting #{dir}"
|
|
98
|
-
nil
|
|
99
|
-
when 1
|
|
100
|
-
warn "Using #{dirs}: #{dir_to_version(dirs)}"
|
|
101
|
-
dir_to_version(dirs)
|
|
102
|
-
else
|
|
103
|
-
warn "Multiple versions of postgresql installed or incorrect base dir #{dir}"
|
|
104
|
-
first = dir_to_version(dirs.lines.first)
|
|
105
|
-
warn "Using the first version found: #{first}"
|
|
106
|
-
first
|
|
107
|
-
end
|
|
108
|
-
end
|
|
109
|
-
|
|
110
|
-
def dir_to_version(dir)
|
|
111
|
-
dir.chomp.split('/').last
|
|
112
|
-
end
|
|
113
|
-
|
|
114
|
-
def cluster_from_dir(dir)
|
|
115
|
-
# Main is the default cluster name on debian use it if it
|
|
116
|
-
# exists.
|
|
117
|
-
if inspec.directory("#{dir}/main").exist?
|
|
118
|
-
'main'
|
|
119
|
-
else
|
|
120
|
-
dirs = inspec.command("ls -d #{dir}/*/").stdout.lines
|
|
121
|
-
first = dirs.first.chomp.split('/').last
|
|
122
|
-
if dirs.count > 1
|
|
123
|
-
warn "Multiple postgresql clusters configured or incorrect base dir #{dir}"
|
|
124
|
-
warn "Using the first directory found: #{first}"
|
|
125
|
-
end
|
|
126
|
-
first
|
|
127
|
-
end
|
|
128
|
-
end
|
|
129
|
-
end
|
|
130
|
-
end
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
# copyright: 2015, Vulcano Security GmbH
|
|
3
|
+
|
|
4
|
+
module Inspec::Resources
|
|
5
|
+
class Postgres < Inspec.resource(1)
|
|
6
|
+
name 'postgres'
|
|
7
|
+
supports platform: 'unix'
|
|
8
|
+
|
|
9
|
+
attr_reader :service, :data_dir, :conf_dir, :conf_path, :version, :cluster
|
|
10
|
+
def initialize
|
|
11
|
+
if inspec.os.debian?
|
|
12
|
+
#
|
|
13
|
+
# https://wiki.debian.org/PostgreSql
|
|
14
|
+
#
|
|
15
|
+
# Debian allows multiple versions of postgresql to be
|
|
16
|
+
# installed as well as multiple "clusters" to be configured.
|
|
17
|
+
#
|
|
18
|
+
@version = version_from_psql || version_from_dir('/etc/postgresql')
|
|
19
|
+
@cluster = cluster_from_dir("/etc/postgresql/#{@version}")
|
|
20
|
+
@conf_dir = "/etc/postgresql/#{@version}/#{@cluster}"
|
|
21
|
+
@data_dir = "/var/lib/postgresql/#{@version}/#{@cluster}"
|
|
22
|
+
else
|
|
23
|
+
@version = version_from_psql
|
|
24
|
+
if @version.nil?
|
|
25
|
+
if inspec.directory('/var/lib/pgsql/data').exist?
|
|
26
|
+
warn 'Unable to determine PostgreSQL version: psql did not return
|
|
27
|
+
a version number and unversioned data directories were found.'
|
|
28
|
+
nil
|
|
29
|
+
else
|
|
30
|
+
@version = version_from_dir('/var/lib/pgsql')
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
@data_dir = locate_data_dir_location_by_version(@version)
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
@service = 'postgresql'
|
|
37
|
+
@service += "-#{@version}" if @version.to_f >= 9.4
|
|
38
|
+
@conf_dir ||= @data_dir
|
|
39
|
+
|
|
40
|
+
verify_dirs
|
|
41
|
+
if !@version.nil? && !@conf_dir.empty?
|
|
42
|
+
@conf_path = File.join @conf_dir, 'postgresql.conf'
|
|
43
|
+
else
|
|
44
|
+
@conf_path = nil
|
|
45
|
+
return skip_resource 'Seems like PostgreSQL is not installed on your system'
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def to_s
|
|
50
|
+
'PostgreSQL'
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
private
|
|
54
|
+
|
|
55
|
+
def verify_dirs
|
|
56
|
+
warn "Default postgresql configuration directory: #{@conf_dir} does not exist. " \
|
|
57
|
+
"Postgresql may not be installed or we've misidentified the configuration " \
|
|
58
|
+
'directory.' unless inspec.directory(@conf_dir).exist?
|
|
59
|
+
|
|
60
|
+
warn "Default postgresql data directory: #{@data_dir} does not exist. " \
|
|
61
|
+
"Postgresql may not be installed or we've misidentified the data " \
|
|
62
|
+
'directory.' unless inspec.directory(@data_dir).exist?
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def version_from_psql
|
|
66
|
+
return unless inspec.command('psql').exist?
|
|
67
|
+
inspec.command("psql --version | awk '{ print $NF }' | awk -F. '{ print $1\".\"$2 }'").stdout.strip
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def locate_data_dir_location_by_version(ver = @version)
|
|
71
|
+
data_dir_loc = nil
|
|
72
|
+
dir_list = [
|
|
73
|
+
"/var/lib/pgsql/#{ver}/data",
|
|
74
|
+
'/var/lib/pgsql/data',
|
|
75
|
+
'/var/lib/postgres/data',
|
|
76
|
+
'/var/lib/postgresql/data',
|
|
77
|
+
]
|
|
78
|
+
|
|
79
|
+
dir_list.each do |dir|
|
|
80
|
+
data_dir_loc = dir if inspec.directory(dir).exist?
|
|
81
|
+
break
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
if data_dir_loc.nil?
|
|
85
|
+
warn 'Unable to find the PostgreSQL data_dir in expected location(s), please
|
|
86
|
+
execute "psql -t -A -p <port> -h <host> -c "show hba_file";" as the PostgreSQL
|
|
87
|
+
DBA to find the non-standard data_dir location.'
|
|
88
|
+
end
|
|
89
|
+
data_dir_loc
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
def version_from_dir(dir)
|
|
93
|
+
dirs = inspec.command("ls -d #{dir}/*/").stdout
|
|
94
|
+
entries = dirs.lines.count
|
|
95
|
+
case entries
|
|
96
|
+
when 0
|
|
97
|
+
warn "Could not determine version of installed postgresql by inspecting #{dir}"
|
|
98
|
+
nil
|
|
99
|
+
when 1
|
|
100
|
+
warn "Using #{dirs}: #{dir_to_version(dirs)}"
|
|
101
|
+
dir_to_version(dirs)
|
|
102
|
+
else
|
|
103
|
+
warn "Multiple versions of postgresql installed or incorrect base dir #{dir}"
|
|
104
|
+
first = dir_to_version(dirs.lines.first)
|
|
105
|
+
warn "Using the first version found: #{first}"
|
|
106
|
+
first
|
|
107
|
+
end
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
def dir_to_version(dir)
|
|
111
|
+
dir.chomp.split('/').last
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
def cluster_from_dir(dir)
|
|
115
|
+
# Main is the default cluster name on debian use it if it
|
|
116
|
+
# exists.
|
|
117
|
+
if inspec.directory("#{dir}/main").exist?
|
|
118
|
+
'main'
|
|
119
|
+
else
|
|
120
|
+
dirs = inspec.command("ls -d #{dir}/*/").stdout.lines
|
|
121
|
+
first = dirs.first.chomp.split('/').last
|
|
122
|
+
if dirs.count > 1
|
|
123
|
+
warn "Multiple postgresql clusters configured or incorrect base dir #{dir}"
|
|
124
|
+
warn "Using the first directory found: #{first}"
|
|
125
|
+
end
|
|
126
|
+
first
|
|
127
|
+
end
|
|
128
|
+
end
|
|
129
|
+
end
|
|
130
|
+
end
|
|
@@ -1,121 +1,121 @@
|
|
|
1
|
-
# encoding: utf-8
|
|
2
|
-
# copyright: 2015, Vulcano Security GmbH
|
|
3
|
-
|
|
4
|
-
require 'utils/simpleconfig'
|
|
5
|
-
require 'utils/find_files'
|
|
6
|
-
require 'resources/postgres'
|
|
7
|
-
|
|
8
|
-
module Inspec::Resources
|
|
9
|
-
class PostgresConf < Inspec.resource(1)
|
|
10
|
-
name 'postgres_conf'
|
|
11
|
-
supports platform: 'unix'
|
|
12
|
-
supports platform: 'windows'
|
|
13
|
-
desc 'Use the postgres_conf InSpec audit resource to test the contents of the configuration file for PostgreSQL, typically located at /etc/postgresql/<version>/main/postgresql.conf or /var/lib/postgres/data/postgresql.conf, depending on the platform.'
|
|
14
|
-
example "
|
|
15
|
-
describe postgres_conf do
|
|
16
|
-
its('max_connections') { should eq '5' }
|
|
17
|
-
end
|
|
18
|
-
"
|
|
19
|
-
|
|
20
|
-
include FindFiles
|
|
21
|
-
include ObjectTraverser
|
|
22
|
-
|
|
23
|
-
def initialize(conf_path = nil)
|
|
24
|
-
@conf_path = conf_path || inspec.postgres.conf_path
|
|
25
|
-
if @conf_path.nil?
|
|
26
|
-
return skip_resource 'PostgreSQL conf path is not set'
|
|
27
|
-
end
|
|
28
|
-
@conf_dir = File.expand_path(File.dirname(@conf_path))
|
|
29
|
-
@files_contents = {}
|
|
30
|
-
@content = nil
|
|
31
|
-
@params = nil
|
|
32
|
-
read_content
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
def content
|
|
36
|
-
@content ||= read_content
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
def params(*opts)
|
|
40
|
-
@params || read_content
|
|
41
|
-
res = @params
|
|
42
|
-
opts.each do |opt|
|
|
43
|
-
res = res[opt] unless res.nil?
|
|
44
|
-
end
|
|
45
|
-
res
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
def value(key)
|
|
49
|
-
extract_value(key, @params)
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
def method_missing(*keys)
|
|
53
|
-
keys.shift if keys.is_a?(Array) && keys[0] == :[]
|
|
54
|
-
param = value(keys)
|
|
55
|
-
return nil if param.nil?
|
|
56
|
-
# extract first value if we have only one value in array
|
|
57
|
-
return param[0] if param.length == 1
|
|
58
|
-
param
|
|
59
|
-
end
|
|
60
|
-
|
|
61
|
-
def to_s
|
|
62
|
-
'PostgreSQL Configuration'
|
|
63
|
-
end
|
|
64
|
-
|
|
65
|
-
private
|
|
66
|
-
|
|
67
|
-
def read_content
|
|
68
|
-
@content = ''
|
|
69
|
-
@params = {}
|
|
70
|
-
|
|
71
|
-
# skip if the main configuration file doesn't exist
|
|
72
|
-
if !inspec.file(@conf_path).file?
|
|
73
|
-
return skip_resource "Can't find file \"#{@conf_path}\""
|
|
74
|
-
end
|
|
75
|
-
raw_conf = read_file(@conf_path)
|
|
76
|
-
if raw_conf.empty? && !inspec.file(@conf_path).empty?
|
|
77
|
-
return skip_resource("Can't read file \"#{@conf_path}\"")
|
|
78
|
-
end
|
|
79
|
-
|
|
80
|
-
to_read = [@conf_path]
|
|
81
|
-
until to_read.empty?
|
|
82
|
-
base_dir = File.dirname(to_read[0])
|
|
83
|
-
raw_conf = read_file(to_read[0])
|
|
84
|
-
@content += raw_conf
|
|
85
|
-
|
|
86
|
-
opts = {
|
|
87
|
-
assignment_regex: /^\s*([^=]*?)\s*=\s*[']?\s*(.*?)\s*[']?\s*$/,
|
|
88
|
-
}
|
|
89
|
-
params = SimpleConfig.new(raw_conf, opts).params
|
|
90
|
-
@params.merge!(params)
|
|
91
|
-
|
|
92
|
-
to_read = to_read.drop(1)
|
|
93
|
-
# see if there is more config files to include
|
|
94
|
-
|
|
95
|
-
to_read += include_files(params, base_dir).find_all do |fp|
|
|
96
|
-
not @files_contents.key? fp
|
|
97
|
-
end
|
|
98
|
-
end
|
|
99
|
-
@content
|
|
100
|
-
end
|
|
101
|
-
|
|
102
|
-
def include_files(params, base_dir)
|
|
103
|
-
include_files = Array(params['include']) || []
|
|
104
|
-
include_files += Array(params['include_if_exists']) || []
|
|
105
|
-
include_files.map! do |f|
|
|
106
|
-
Pathname.new(f).absolute? ? f : File.join(base_dir, f)
|
|
107
|
-
end
|
|
108
|
-
|
|
109
|
-
dirs = Array(params['include_dir']) || []
|
|
110
|
-
dirs.each do |dir|
|
|
111
|
-
dir = File.join(base_dir, dir) if dir[0] != '/'
|
|
112
|
-
include_files += find_files(dir, depth: 1, type: 'file')
|
|
113
|
-
end
|
|
114
|
-
include_files
|
|
115
|
-
end
|
|
116
|
-
|
|
117
|
-
def read_file(path)
|
|
118
|
-
@files_contents[path] ||= inspec.file(path).content
|
|
119
|
-
end
|
|
120
|
-
end
|
|
121
|
-
end
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
# copyright: 2015, Vulcano Security GmbH
|
|
3
|
+
|
|
4
|
+
require 'utils/simpleconfig'
|
|
5
|
+
require 'utils/find_files'
|
|
6
|
+
require 'resources/postgres'
|
|
7
|
+
|
|
8
|
+
module Inspec::Resources
|
|
9
|
+
class PostgresConf < Inspec.resource(1)
|
|
10
|
+
name 'postgres_conf'
|
|
11
|
+
supports platform: 'unix'
|
|
12
|
+
supports platform: 'windows'
|
|
13
|
+
desc 'Use the postgres_conf InSpec audit resource to test the contents of the configuration file for PostgreSQL, typically located at /etc/postgresql/<version>/main/postgresql.conf or /var/lib/postgres/data/postgresql.conf, depending on the platform.'
|
|
14
|
+
example "
|
|
15
|
+
describe postgres_conf do
|
|
16
|
+
its('max_connections') { should eq '5' }
|
|
17
|
+
end
|
|
18
|
+
"
|
|
19
|
+
|
|
20
|
+
include FindFiles
|
|
21
|
+
include ObjectTraverser
|
|
22
|
+
|
|
23
|
+
def initialize(conf_path = nil)
|
|
24
|
+
@conf_path = conf_path || inspec.postgres.conf_path
|
|
25
|
+
if @conf_path.nil?
|
|
26
|
+
return skip_resource 'PostgreSQL conf path is not set'
|
|
27
|
+
end
|
|
28
|
+
@conf_dir = File.expand_path(File.dirname(@conf_path))
|
|
29
|
+
@files_contents = {}
|
|
30
|
+
@content = nil
|
|
31
|
+
@params = nil
|
|
32
|
+
read_content
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def content
|
|
36
|
+
@content ||= read_content
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def params(*opts)
|
|
40
|
+
@params || read_content
|
|
41
|
+
res = @params
|
|
42
|
+
opts.each do |opt|
|
|
43
|
+
res = res[opt] unless res.nil?
|
|
44
|
+
end
|
|
45
|
+
res
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def value(key)
|
|
49
|
+
extract_value(key, @params)
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def method_missing(*keys)
|
|
53
|
+
keys.shift if keys.is_a?(Array) && keys[0] == :[]
|
|
54
|
+
param = value(keys)
|
|
55
|
+
return nil if param.nil?
|
|
56
|
+
# extract first value if we have only one value in array
|
|
57
|
+
return param[0] if param.length == 1
|
|
58
|
+
param
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def to_s
|
|
62
|
+
'PostgreSQL Configuration'
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
private
|
|
66
|
+
|
|
67
|
+
def read_content
|
|
68
|
+
@content = ''
|
|
69
|
+
@params = {}
|
|
70
|
+
|
|
71
|
+
# skip if the main configuration file doesn't exist
|
|
72
|
+
if !inspec.file(@conf_path).file?
|
|
73
|
+
return skip_resource "Can't find file \"#{@conf_path}\""
|
|
74
|
+
end
|
|
75
|
+
raw_conf = read_file(@conf_path)
|
|
76
|
+
if raw_conf.empty? && !inspec.file(@conf_path).empty?
|
|
77
|
+
return skip_resource("Can't read file \"#{@conf_path}\"")
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
to_read = [@conf_path]
|
|
81
|
+
until to_read.empty?
|
|
82
|
+
base_dir = File.dirname(to_read[0])
|
|
83
|
+
raw_conf = read_file(to_read[0])
|
|
84
|
+
@content += raw_conf
|
|
85
|
+
|
|
86
|
+
opts = {
|
|
87
|
+
assignment_regex: /^\s*([^=]*?)\s*=\s*[']?\s*(.*?)\s*[']?\s*$/,
|
|
88
|
+
}
|
|
89
|
+
params = SimpleConfig.new(raw_conf, opts).params
|
|
90
|
+
@params.merge!(params)
|
|
91
|
+
|
|
92
|
+
to_read = to_read.drop(1)
|
|
93
|
+
# see if there is more config files to include
|
|
94
|
+
|
|
95
|
+
to_read += include_files(params, base_dir).find_all do |fp|
|
|
96
|
+
not @files_contents.key? fp
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
@content
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
def include_files(params, base_dir)
|
|
103
|
+
include_files = Array(params['include']) || []
|
|
104
|
+
include_files += Array(params['include_if_exists']) || []
|
|
105
|
+
include_files.map! do |f|
|
|
106
|
+
Pathname.new(f).absolute? ? f : File.join(base_dir, f)
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
dirs = Array(params['include_dir']) || []
|
|
110
|
+
dirs.each do |dir|
|
|
111
|
+
dir = File.join(base_dir, dir) if dir[0] != '/'
|
|
112
|
+
include_files += find_files(dir, depth: 1, type: 'file')
|
|
113
|
+
end
|
|
114
|
+
include_files
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
def read_file(path)
|
|
118
|
+
@files_contents[path] ||= inspec.file(path).content
|
|
119
|
+
end
|
|
120
|
+
end
|
|
121
|
+
end
|