inspec 2.1.59 → 2.1.67
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/CHANGELOG.md +30 -12
- data/Gemfile +1 -1
- data/README.md +6 -0
- data/Rakefile +59 -34
- data/docs/resources/aws_s3_bucket.md.erb +6 -0
- data/docs/resources/filesystem.md.erb +2 -2
- data/lib/bundles/inspec-compliance/target.rb +2 -1
- data/lib/fetchers/url.rb +6 -0
- data/lib/inspec/resource.rb +9 -6
- data/lib/inspec/version.rb +1 -1
- data/lib/matchers/matchers.rb +1 -1
- data/lib/resources/aws/aws_s3_bucket.rb +24 -2
- data/lib/utils/find_files.rb +7 -4
- data/lib/utils/nginx_parser.rb +22 -2
- metadata +2 -2
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 3b433c23e0f104009667cb51b6b8ab4a81e01b63
         | 
| 4 | 
            +
              data.tar.gz: 58c72645fab1bbf25e56338f522ba55f6ca51bbf
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: ed147a0607f35c18186214bada157514130cd1000b31967b8c7f6ab861b7459e01ebfa9b57cb139d77d2aed80ba5d9e33d06eb5dad0c9f39f75dd6e01708f688
         | 
| 7 | 
            +
              data.tar.gz: 3c2b47a3378ce52eaceac205a34d387ab9b301a752a7906decc8e29720876be0d13bbe17cc7fd414ae0ed0f88b6c533eebe22bacd089cbbd6624344c7d770a9c
         | 
    
        data/CHANGELOG.md
    CHANGED
    
    | @@ -1,28 +1,47 @@ | |
| 1 1 | 
             
            # Change Log
         | 
| 2 2 | 
             
            <!-- usage documentation: http://expeditor-docs.es.chef.io/configuration/changelog/ -->
         | 
| 3 | 
            -
            <!-- latest_release 2.1. | 
| 4 | 
            -
            ## [v2.1. | 
| 3 | 
            +
            <!-- latest_release 2.1.67 -->
         | 
| 4 | 
            +
            ## [v2.1.67](https://github.com/chef/inspec/tree/v2.1.67) (2018-05-03)
         | 
| 5 5 |  | 
| 6 6 | 
             
            #### Bug Fixes
         | 
| 7 | 
            -
            -  | 
| 7 | 
            +
            - Add A2 support for profile compliance depends [#3014](https://github.com/chef/inspec/pull/3014) ([jquick](https://github.com/jquick))
         | 
| 8 8 | 
             
            <!-- latest_release -->
         | 
| 9 9 |  | 
| 10 | 
            -
            <!-- release_rollup since=2.1. | 
| 11 | 
            -
            ### Changes since 2.1. | 
| 10 | 
            +
            <!-- release_rollup since=2.1.59 -->
         | 
| 11 | 
            +
            ### Changes since 2.1.59 release
         | 
| 12 | 
            +
             | 
| 13 | 
            +
            #### New Features
         | 
| 14 | 
            +
            -  #2810 - Add check if aws s3 bucket is encrypted. [#2937](https://github.com/chef/inspec/pull/2937) ([UranusBytes](https://github.com/UranusBytes)) <!-- 2.1.64 -->
         | 
| 12 15 |  | 
| 13 16 | 
             
            #### Bug Fixes
         | 
| 14 | 
            -
            -  | 
| 17 | 
            +
            - Add A2 support for profile compliance depends [#3014](https://github.com/chef/inspec/pull/3014) ([jquick](https://github.com/jquick)) <!-- 2.1.67 -->
         | 
| 18 | 
            +
            - nginx_conf resource: Fix include paths with quotes [#2726](https://github.com/chef/inspec/pull/2726) ([jerryaldrichiii](https://github.com/jerryaldrichiii)) <!-- 2.1.63 -->
         | 
| 19 | 
            +
             | 
| 20 | 
            +
            #### Enhancements
         | 
| 21 | 
            +
            - Split inspec into a core gem. [#3008](https://github.com/chef/inspec/pull/3008) ([miah](https://github.com/miah)) <!-- 2.1.65 -->
         | 
| 22 | 
            +
            - Refactors Terraform plan to break out steps [#2996](https://github.com/chef/inspec/pull/2996) ([dmccown](https://github.com/dmccown)) <!-- 2.1.61 -->
         | 
| 15 23 |  | 
| 16 24 | 
             
            #### Merged Pull Requests
         | 
| 17 | 
            -
            -  | 
| 18 | 
            -
            -  | 
| 19 | 
            -
            -  | 
| 25 | 
            +
            - Add inspec-core gem to expeditor release [#3018](https://github.com/chef/inspec/pull/3018) ([jquick](https://github.com/jquick)) <!-- 2.1.66 -->
         | 
| 26 | 
            +
            - cmp should recognise a string being a negative int [#3007](https://github.com/chef/inspec/pull/3007) ([james-stocks](https://github.com/james-stocks)) <!-- 2.1.62 -->
         | 
| 27 | 
            +
            - Update Habitat plan [#3000](https://github.com/chef/inspec/pull/3000) ([jerryaldrichiii](https://github.com/jerryaldrichiii)) <!-- 2.1.60 -->
         | 
| 28 | 
            +
            <!-- release_rollup -->
         | 
| 29 | 
            +
             | 
| 30 | 
            +
            <!-- latest_stable_release -->
         | 
| 31 | 
            +
            ## [v2.1.59](https://github.com/chef/inspec/tree/v2.1.59) (2018-04-26)
         | 
| 20 32 |  | 
| 21 33 | 
             
            #### Enhancements
         | 
| 22 | 
            -
            - Update shadow#to_s to return @path instead of hardcoded `/etc/shadow` [#2978](https://github.com/chef/inspec/pull/2978) ([miah](https://github.com/miah)) | 
| 23 | 
            -
             | 
| 34 | 
            +
            - Update shadow#to_s to return @path instead of hardcoded `/etc/shadow` [#2978](https://github.com/chef/inspec/pull/2978) ([miah](https://github.com/miah))
         | 
| 35 | 
            +
             | 
| 36 | 
            +
            #### Bug Fixes
         | 
| 37 | 
            +
            - Catch exceptions in control blocks and fail the control [#2987](https://github.com/chef/inspec/pull/2987) ([clintoncwolfe](https://github.com/clintoncwolfe))
         | 
| 24 38 |  | 
| 39 | 
            +
            #### Merged Pull Requests
         | 
| 40 | 
            +
            - Makes JSON resource enumerable, despite method_missing magic [#2910](https://github.com/chef/inspec/pull/2910) ([TheLonelyGhost](https://github.com/TheLonelyGhost))
         | 
| 41 | 
            +
            - Fix case where res is nil in etc_group [#2984](https://github.com/chef/inspec/pull/2984) ([chris-rock](https://github.com/chris-rock))
         | 
| 42 | 
            +
            - os_env resource returns only user's environment variable on Windows [#2945](https://github.com/chef/inspec/pull/2945) ([omar-irizarry](https://github.com/omar-irizarry))
         | 
| 25 43 | 
             
            <!-- latest_stable_release -->
         | 
| 44 | 
            +
             | 
| 26 45 | 
             
            ## [v2.1.54](https://github.com/chef/inspec/tree/v2.1.54) (2018-04-19)
         | 
| 27 46 |  | 
| 28 47 | 
             
            #### New Features
         | 
| @@ -43,7 +62,6 @@ | |
| 43 62 |  | 
| 44 63 | 
             
            #### Merged Pull Requests
         | 
| 45 64 | 
             
            - Add A2 support to the inspec-compliance toolset [#2963](https://github.com/chef/inspec/pull/2963) ([jquick](https://github.com/jquick))
         | 
| 46 | 
            -
            <!-- latest_stable_release -->
         | 
| 47 65 |  | 
| 48 66 | 
             
            ## [v2.1.43](https://github.com/chef/inspec/tree/v2.1.43) (2018-04-12)
         | 
| 49 67 |  | 
    
        data/Gemfile
    CHANGED
    
    
    
        data/README.md
    CHANGED
    
    | @@ -424,6 +424,12 @@ Use the rake task `bundle exec rake test:aws` to test the AWS resources against | |
| 424 424 |  | 
| 425 425 | 
             
            Please see [TESTING_AGAINST_AWS.md](./test/integration/aws/TESTING_AGAINST_AWS.md) for details on how to setup the needed AWS accounts to perform testing.
         | 
| 426 426 |  | 
| 427 | 
            +
            ### Azure Tests
         | 
| 428 | 
            +
             | 
| 429 | 
            +
            Use the rake task `bundle exec rake test:azure` to test the Azure resources against an Azure account.
         | 
| 430 | 
            +
             | 
| 431 | 
            +
            Please see [TESTING_AGAINST_AZURE.md](./test/integration/aws/TESTING_AGAINST_AZURE.md) for details on how to setup the needed Azure accounts to perform testing.
         | 
| 432 | 
            +
             | 
| 427 433 | 
             
            ## License
         | 
| 428 434 |  | 
| 429 435 | 
             
            |                |                                           |
         | 
    
        data/Rakefile
    CHANGED
    
    | @@ -2,13 +2,15 @@ | |
| 2 2 | 
             
            # encoding: utf-8
         | 
| 3 3 |  | 
| 4 4 | 
             
            require 'bundler'
         | 
| 5 | 
            -
            require 'bundler/ | 
| 5 | 
            +
            require 'bundler/gem_helper'
         | 
| 6 6 | 
             
            require 'rake/testtask'
         | 
| 7 7 | 
             
            require 'passgen'
         | 
| 8 8 | 
             
            require 'train'
         | 
| 9 9 | 
             
            require_relative 'tasks/maintainers'
         | 
| 10 10 | 
             
            require_relative 'tasks/spdx'
         | 
| 11 11 |  | 
| 12 | 
            +
            Bundler::GemHelper.install_tasks name: 'inspec'
         | 
| 13 | 
            +
             | 
| 12 14 | 
             
            def prompt(message)
         | 
| 13 15 | 
             
              print(message)
         | 
| 14 16 | 
             
              STDIN.gets.chomp
         | 
| @@ -152,15 +154,30 @@ namespace :test do | |
| 152 154 | 
             
              namespace :azure do
         | 
| 153 155 | 
             
                # Specify the directory for the integration tests
         | 
| 154 156 | 
             
                integration_dir = File.join(project_dir, 'test', 'integration', 'azure')
         | 
| 157 | 
            +
                tf_vars_file = File.join(integration_dir, 'build', 'terraform.tfvars')
         | 
| 155 158 | 
             
                attribute_file = File.join(integration_dir, '.attribute.yml')
         | 
| 156 159 |  | 
| 157 160 | 
             
                task :setup, :tf_workspace do |t, args|
         | 
| 158 161 | 
             
                  tf_workspace = args[:tf_workspace] || ENV['INSPEC_TERRAFORM_ENV']
         | 
| 159 162 | 
             
                  abort("You must either call the top-level test:azure task, or set the INSPEC_TERRAFORM_ENV variable.") unless tf_workspace
         | 
| 160 | 
            -
             | 
| 163 | 
            +
             | 
| 164 | 
            +
                  puts '----> Setup Terraform Workspace'
         | 
| 165 | 
            +
             | 
| 161 166 | 
             
                  sh("cd #{integration_dir}/build/ && terraform init -upgrade")
         | 
| 162 167 | 
             
                  sh("cd #{integration_dir}/build/ && terraform workspace new #{tf_workspace}")
         | 
| 163 168 |  | 
| 169 | 
            +
                  Rake::Task["test:azure:vars"].execute
         | 
| 170 | 
            +
                  Rake::Task["test:azure:plan"].execute
         | 
| 171 | 
            +
                  Rake::Task["test:azure:apply"].execute
         | 
| 172 | 
            +
                end
         | 
| 173 | 
            +
             | 
| 174 | 
            +
                desc "Generate terraform.tfvars file"
         | 
| 175 | 
            +
                task :vars do |t, args|
         | 
| 176 | 
            +
             | 
| 177 | 
            +
                  next if File.exist?(tf_vars_file)
         | 
| 178 | 
            +
             | 
| 179 | 
            +
                  puts '----> Generating Vars'
         | 
| 180 | 
            +
             | 
| 164 181 | 
             
                  # Generate Azure crendentials
         | 
| 165 182 | 
             
                  connection = Train.create('azure').connection
         | 
| 166 183 | 
             
                  creds = connection.options
         | 
| @@ -172,23 +189,43 @@ namespace :test do | |
| 172 189 | 
             
                  # Use the first 4 characters of the storage account to create a suffix
         | 
| 173 190 | 
             
                  suffix = sa_name[0..3]
         | 
| 174 191 |  | 
| 175 | 
            -
                   | 
| 176 | 
            -
             | 
| 177 | 
            -
             | 
| 178 | 
            -
             | 
| 179 | 
            -
             | 
| 180 | 
            -
             | 
| 181 | 
            -
             | 
| 182 | 
            -
             | 
| 183 | 
            -
                   | 
| 184 | 
            -
             | 
| 185 | 
            -
                   | 
| 186 | 
            -
             | 
| 187 | 
            -
                   | 
| 188 | 
            -
             | 
| 189 | 
            -
             | 
| 190 | 
            -
             | 
| 191 | 
            -
             | 
| 192 | 
            +
                  content = <<~VARS
         | 
| 193 | 
            +
                    subscription_id = "#{creds[:subscription_id]}"
         | 
| 194 | 
            +
                    client_id = "#{creds[:client_id]}"
         | 
| 195 | 
            +
                    client_secret = "#{creds[:client_secret]}"
         | 
| 196 | 
            +
                    tenant_id = "#{creds[:tenant_id]}"
         | 
| 197 | 
            +
                    storage_account_name = "#{sa_name}"
         | 
| 198 | 
            +
                    admin_password = "#{admin_password}"
         | 
| 199 | 
            +
                    suffix = "#{suffix}"
         | 
| 200 | 
            +
                  VARS
         | 
| 201 | 
            +
             | 
| 202 | 
            +
                  content << "location = \"#{ENV['AZURE_LOCATION']}\"\n" if ENV['AZURE_LOCATION']
         | 
| 203 | 
            +
             | 
| 204 | 
            +
                  File.write(tf_vars_file, content)
         | 
| 205 | 
            +
                end
         | 
| 206 | 
            +
             | 
| 207 | 
            +
                desc "generate plan from state using terraform.tfvars file"
         | 
| 208 | 
            +
                task :plan, [:tf_workspace] => [:vars] do |t, args|
         | 
| 209 | 
            +
                  tf_workspace = args[:tf_workspace] || ENV['INSPEC_TERRAFORM_ENV']
         | 
| 210 | 
            +
                  abort("You must set the INSPEC_TERRAFORM_ENV variable.") unless tf_workspace
         | 
| 211 | 
            +
             | 
| 212 | 
            +
                  puts '----> Generating Plan'
         | 
| 213 | 
            +
             | 
| 214 | 
            +
                  result = sh("cd #{integration_dir}/build/ && terraform workspace select #{tf_workspace}")
         | 
| 215 | 
            +
             | 
| 216 | 
            +
                  sh("cd #{integration_dir}/build/ && terraform plan -out inspec-azure.plan")
         | 
| 217 | 
            +
                end
         | 
| 218 | 
            +
             | 
| 219 | 
            +
                desc "apply terraform plan"
         | 
| 220 | 
            +
                task :apply, [:tf_workspace] => [:plan] do |t, args|
         | 
| 221 | 
            +
                  tf_workspace = args[:tf_workspace] || ENV['INSPEC_TERRAFORM_ENV']
         | 
| 222 | 
            +
                  abort("You must set the INSPEC_TERRAFORM_ENV variable.") unless tf_workspace
         | 
| 223 | 
            +
                  puts '----> Applying Plan'
         | 
| 224 | 
            +
             | 
| 225 | 
            +
                  sh("cd #{integration_dir}/build/ && terraform workspace select #{tf_workspace}")
         | 
| 226 | 
            +
             | 
| 227 | 
            +
                  sh("cd #{integration_dir}/build/ && terraform apply inspec-azure.plan")
         | 
| 228 | 
            +
             | 
| 192 229 | 
             
                  Rake::Task["test:azure:dump_attrs"].execute
         | 
| 193 230 | 
             
                end
         | 
| 194 231 |  | 
| @@ -197,7 +234,7 @@ namespace :test do | |
| 197 234 | 
             
                    raw_output = File.read(attribute_file)
         | 
| 198 235 | 
             
                    yaml_output = raw_output.gsub(" = ", " : ")
         | 
| 199 236 | 
             
                    File.open(attribute_file, "w") {|file| file.puts yaml_output}
         | 
| 200 | 
            -
             | 
| 237 | 
            +
                end
         | 
| 201 238 |  | 
| 202 239 | 
             
                task :run do
         | 
| 203 240 | 
             
                  puts '----> Run'
         | 
| @@ -209,23 +246,11 @@ namespace :test do | |
| 209 246 | 
             
                  abort("You must either call the top-level test:azure task, or set the INSPEC_TERRAFORM_ENV variable.") unless tf_workspace
         | 
| 210 247 | 
             
                  puts '----> Cleanup'
         | 
| 211 248 |  | 
| 212 | 
            -
                   | 
| 213 | 
            -
                  creds = connection.options
         | 
| 214 | 
            -
             | 
| 215 | 
            -
                  cmd  = ""
         | 
| 216 | 
            -
                  cmd += "cd #{integration_dir}/build/ && terraform destroy -force "
         | 
| 217 | 
            -
                  cmd += " -var 'subscription_id=#{creds[:subscription_id]}' "
         | 
| 218 | 
            -
                  cmd += " -var 'client_id=#{creds[:client_id]}' "
         | 
| 219 | 
            -
                  cmd += " -var 'client_secret=#{creds[:client_secret]}' "
         | 
| 220 | 
            -
                  cmd += " -var 'tenant_id=#{creds[:tenant_id]}' "
         | 
| 221 | 
            -
                  cmd += " -var 'storage_account_name=dummy' "
         | 
| 222 | 
            -
                  cmd += " -var 'admin_password=dummy' "
         | 
| 223 | 
            -
                  cmd += " -var 'suffix=dummy' "
         | 
| 224 | 
            -
             | 
| 225 | 
            -
                  sh(cmd)
         | 
| 249 | 
            +
                  sh("cd #{integration_dir}/build/ && terraform destroy -force ")
         | 
| 226 250 |  | 
| 227 251 | 
             
                  sh("cd #{integration_dir}/build/ && terraform workspace select default")
         | 
| 228 252 | 
             
                  sh("cd #{integration_dir}/build && terraform workspace delete #{tf_workspace}")
         | 
| 253 | 
            +
                  File.delete(tf_vars_file)
         | 
| 229 254 | 
             
                end
         | 
| 230 255 | 
             
              end
         | 
| 231 256 |  | 
| @@ -132,3 +132,9 @@ Note: This resource does not detect insecure object ACLs. | |
| 132 132 | 
             
            The `have_access_logging_enabled` matcher tests if access logging is enabled for the s3 bucket.
         | 
| 133 133 |  | 
| 134 134 | 
             
                it { should have_access_logging_enabled }
         | 
| 135 | 
            +
             | 
| 136 | 
            +
            ### have\_default\_encryption\_enabled
         | 
| 137 | 
            +
             | 
| 138 | 
            +
            The `have_default_encryption_enabled` matcher tests if default encryption is enabled for the s3 bucket.
         | 
| 139 | 
            +
             | 
| 140 | 
            +
                it { should have_default_encryption_enabled }
         | 
| @@ -20,7 +20,7 @@ A `filesystem` resource block declares tests for disk space in a partition: | |
| 20 20 | 
             
            where
         | 
| 21 21 |  | 
| 22 22 | 
             
            * `filesystem('/')` states that the resource will look at the root (/) partition.
         | 
| 23 | 
            -
            * `size` is measured in  | 
| 23 | 
            +
            * `size` is measured in kilobytes (KB).
         | 
| 24 24 |  | 
| 25 25 | 
             
            <br>
         | 
| 26 26 |  | 
| @@ -28,7 +28,7 @@ where | |
| 28 28 |  | 
| 29 29 | 
             
            The following examples show how to use this InSpec audit resource.
         | 
| 30 30 |  | 
| 31 | 
            -
            ### Test if the root partition is greater than 32000  | 
| 31 | 
            +
            ### Test if the root partition is greater than 32000 KB
         | 
| 32 32 |  | 
| 33 33 | 
             
                describe filesystem('/') do
         | 
| 34 34 | 
             
                  its('size') { should be >= 32000 }
         | 
| @@ -62,7 +62,8 @@ module Compliance | |
| 62 62 | 
             
                  config['token'] = Compliance::API.get_token(config)
         | 
| 63 63 |  | 
| 64 64 | 
             
                  # Needed for automate2 post request
         | 
| 65 | 
            -
                   | 
| 65 | 
            +
                  profile_stub = profile || target[:compliance]
         | 
| 66 | 
            +
                  config['profile'] = Compliance::API.profile_split(profile_stub)
         | 
| 66 67 |  | 
| 67 68 | 
             
                  new(profile_fetch_url, config)
         | 
| 68 69 | 
             
                rescue URI::Error => _e
         | 
    
        data/lib/fetchers/url.rb
    CHANGED
    
    | @@ -157,6 +157,12 @@ module Fetchers | |
| 157 157 | 
             
                  opts = http_opts
         | 
| 158 158 | 
             
                  opts[:use_ssl] = uri.scheme == 'https'
         | 
| 159 159 |  | 
| 160 | 
            +
                  if @insecure
         | 
| 161 | 
            +
                    opts[:verify_mode] = OpenSSL::SSL::VERIFY_NONE
         | 
| 162 | 
            +
                  else
         | 
| 163 | 
            +
                    opts[:verify_mode] = OpenSSL::SSL::VERIFY_PEER
         | 
| 164 | 
            +
                  end
         | 
| 165 | 
            +
             | 
| 160 166 | 
             
                  req = Net::HTTP::Post.new(uri)
         | 
| 161 167 | 
             
                  opts.each do |key, value|
         | 
| 162 168 | 
             
                    req.add_field(key, value)
         | 
    
        data/lib/inspec/resource.rb
    CHANGED
    
    | @@ -78,13 +78,16 @@ end | |
| 78 78 | 
             
            require 'utils/filter'
         | 
| 79 79 |  | 
| 80 80 | 
             
            # AWS resources are included via their own file.
         | 
| 81 | 
            -
            require 'resource_support/aws'
         | 
| 81 | 
            +
            require 'resource_support/aws' if Gem.loaded_specs.key?('aws-sdk')
         | 
| 82 | 
            +
             | 
| 83 | 
            +
            if Gem.loaded_specs.key?('azure_mgmt_resources')
         | 
| 84 | 
            +
              require 'resources/azure/azure_backend.rb'
         | 
| 85 | 
            +
              require 'resources/azure/azure_generic_resource.rb'
         | 
| 86 | 
            +
              require 'resources/azure/azure_resource_group.rb'
         | 
| 87 | 
            +
              require 'resources/azure/azure_virtual_machine.rb'
         | 
| 88 | 
            +
              require 'resources/azure/azure_virtual_machine_data_disk.rb'
         | 
| 89 | 
            +
            end
         | 
| 82 90 |  | 
| 83 | 
            -
            require 'resources/azure/azure_backend.rb'
         | 
| 84 | 
            -
            require 'resources/azure/azure_generic_resource.rb'
         | 
| 85 | 
            -
            require 'resources/azure/azure_resource_group.rb'
         | 
| 86 | 
            -
            require 'resources/azure/azure_virtual_machine.rb'
         | 
| 87 | 
            -
            require 'resources/azure/azure_virtual_machine_data_disk.rb'
         | 
| 88 91 | 
             
            require 'resources/aide_conf'
         | 
| 89 92 | 
             
            require 'resources/apache'
         | 
| 90 93 | 
             
            require 'resources/apache_conf'
         | 
    
        data/lib/inspec/version.rb
    CHANGED
    
    
    
        data/lib/matchers/matchers.rb
    CHANGED
    
    
| @@ -10,7 +10,7 @@ class AwsS3Bucket < Inspec.resource(1) | |
| 10 10 | 
             
              supports platform: 'aws'
         | 
| 11 11 |  | 
| 12 12 | 
             
              include AwsSingularResourceMixin
         | 
| 13 | 
            -
              attr_reader :bucket_name, :has_access_logging_enabled, :region
         | 
| 13 | 
            +
              attr_reader :bucket_name, :has_default_encryption_enabled, :has_access_logging_enabled, :region
         | 
| 14 14 |  | 
| 15 15 | 
             
              def to_s
         | 
| 16 16 | 
             
                "S3 Bucket #{@bucket_name}"
         | 
| @@ -35,8 +35,13 @@ class AwsS3Bucket < Inspec.resource(1) | |
| 35 35 | 
             
                  bucket_policy.any? { |s| s.effect == 'Allow' && s.principal == '*' }
         | 
| 36 36 | 
             
              end
         | 
| 37 37 |  | 
| 38 | 
            +
              def has_default_encryption_enabled?
         | 
| 39 | 
            +
                return false unless @exists
         | 
| 40 | 
            +
                @has_default_encryption_enabled ||= fetch_bucket_encryption_configuration
         | 
| 41 | 
            +
              end
         | 
| 42 | 
            +
             | 
| 38 43 | 
             
              def has_access_logging_enabled?
         | 
| 39 | 
            -
                return unless @exists
         | 
| 44 | 
            +
                return false unless @exists
         | 
| 40 45 | 
             
                catch_aws_errors do
         | 
| 41 46 | 
             
                  @has_access_logging_enabled ||= !BackendFactory.create(inspec_runner).get_bucket_logging(bucket: bucket_name).logging_enabled.nil?
         | 
| 42 47 | 
             
                end
         | 
| @@ -89,6 +94,19 @@ class AwsS3Bucket < Inspec.resource(1) | |
| 89 94 | 
             
                end
         | 
| 90 95 | 
             
              end
         | 
| 91 96 |  | 
| 97 | 
            +
              def fetch_bucket_encryption_configuration
         | 
| 98 | 
            +
                @has_default_encryption_enabled ||= catch_aws_errors do
         | 
| 99 | 
            +
                  begin
         | 
| 100 | 
            +
                    !BackendFactory.create(inspec_runner)
         | 
| 101 | 
            +
                                   .get_bucket_encryption(bucket: bucket_name)
         | 
| 102 | 
            +
                                   .server_side_encryption_configuration
         | 
| 103 | 
            +
                                   .nil?
         | 
| 104 | 
            +
                  rescue Aws::S3::Errors::ServerSideEncryptionConfigurationNotFoundError
         | 
| 105 | 
            +
                    false
         | 
| 106 | 
            +
                  end
         | 
| 107 | 
            +
                end
         | 
| 108 | 
            +
              end
         | 
| 109 | 
            +
             | 
| 92 110 | 
             
              # Uses the SDK API to really talk to AWS
         | 
| 93 111 | 
             
              class Backend
         | 
| 94 112 | 
             
                class AwsClientApi < AwsBackendBase
         | 
| @@ -110,6 +128,10 @@ class AwsS3Bucket < Inspec.resource(1) | |
| 110 128 | 
             
                  def get_bucket_logging(query)
         | 
| 111 129 | 
             
                    aws_service_client.get_bucket_logging(query)
         | 
| 112 130 | 
             
                  end
         | 
| 131 | 
            +
             | 
| 132 | 
            +
                  def get_bucket_encryption(query)
         | 
| 133 | 
            +
                    aws_service_client.get_bucket_encryption(query)
         | 
| 134 | 
            +
                  end
         | 
| 113 135 | 
             
                end
         | 
| 114 136 | 
             
              end
         | 
| 115 137 | 
             
            end
         | 
    
        data/lib/utils/find_files.rb
    CHANGED
    
    | @@ -17,17 +17,20 @@ module FindFiles | |
| 17 17 |  | 
| 18 18 | 
             
              # ignores errors
         | 
| 19 19 | 
             
              def find_files(path, opts = {})
         | 
| 20 | 
            -
                 | 
| 20 | 
            +
                find_files_or_warn(path, opts) || []
         | 
| 21 21 | 
             
              end
         | 
| 22 22 |  | 
| 23 | 
            -
              def  | 
| 23 | 
            +
              def find_files_or_warn(path, opts = {})
         | 
| 24 24 | 
             
                depth = opts[:depth]
         | 
| 25 25 | 
             
                type = TYPES[opts[:type].to_sym] if opts[:type]
         | 
| 26 26 |  | 
| 27 | 
            -
                 | 
| 27 | 
            +
                # If `path` contains a `'` we must modify how we quote the `sh -c` argument
         | 
| 28 | 
            +
                quote = path.include?("'") ? '"' : '\''
         | 
| 29 | 
            +
             | 
| 30 | 
            +
                cmd = "sh -c #{quote}find #{path}"
         | 
| 28 31 | 
             
                cmd += " -type #{type}" unless type.nil?
         | 
| 29 32 | 
             
                cmd += " -maxdepth #{depth.to_i}" if depth.to_i > 0
         | 
| 30 | 
            -
                cmd +=  | 
| 33 | 
            +
                cmd += quote
         | 
| 31 34 |  | 
| 32 35 | 
             
                result = inspec.command(cmd)
         | 
| 33 36 | 
             
                exit_status = result.exit_status
         | 
    
        data/lib/utils/nginx_parser.rb
    CHANGED
    
    | @@ -33,12 +33,32 @@ class NginxParser < Parslet::Parser | |
| 33 33 | 
             
                standard_identifier | quoted_identifier
         | 
| 34 34 | 
             
              }
         | 
| 35 35 |  | 
| 36 | 
            -
              rule(: | 
| 37 | 
            -
                ((match( | 
| 36 | 
            +
              rule(:standard_value) {
         | 
| 37 | 
            +
                ((match(/[#;{'"]/).absent? >> any) >> (
         | 
| 38 38 | 
             
                  str('\\') >> any | match('[#;{]|\s').absent? >> any
         | 
| 39 39 | 
             
                ).repeat).as(:value) >> space.repeat
         | 
| 40 40 | 
             
              }
         | 
| 41 41 |  | 
| 42 | 
            +
              rule(:single_quoted_value) {
         | 
| 43 | 
            +
                str("'") >> (
         | 
| 44 | 
            +
                  str('\\') >> any | str("'").absent? >> any
         | 
| 45 | 
            +
                ).repeat.as(:value) >> str("'") >> space.repeat
         | 
| 46 | 
            +
              }
         | 
| 47 | 
            +
             | 
| 48 | 
            +
              rule(:double_quoted_value) {
         | 
| 49 | 
            +
                str('"') >> (
         | 
| 50 | 
            +
                  str('\\') >> any | str('"').absent? >> any
         | 
| 51 | 
            +
                ).repeat.as(:value) >> str('"') >> space.repeat
         | 
| 52 | 
            +
              }
         | 
| 53 | 
            +
             | 
| 54 | 
            +
              rule(:quoted_value) {
         | 
| 55 | 
            +
                single_quoted_value | double_quoted_value
         | 
| 56 | 
            +
              }
         | 
| 57 | 
            +
             | 
| 58 | 
            +
              rule(:value) {
         | 
| 59 | 
            +
                standard_value | quoted_value
         | 
| 60 | 
            +
              }
         | 
| 61 | 
            +
             | 
| 42 62 | 
             
              rule(:values) {
         | 
| 43 63 | 
             
                value.repeat >> space.maybe
         | 
| 44 64 | 
             
              }
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: inspec
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 2.1. | 
| 4 | 
            +
              version: 2.1.67
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Dominik Richter
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2018- | 
| 11 | 
            +
            date: 2018-05-03 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: train
         |