inspec 2.2.20 → 2.2.27
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 +29 -12
 - data/docs/resources/file.md.erb +10 -3
 - data/lib/inspec/base_cli.rb +2 -0
 - data/lib/inspec/cli.rb +5 -0
 - data/lib/inspec/dependencies/dependency_set.rb +3 -3
 - data/lib/inspec/dependencies/requirement.rb +18 -11
 - data/lib/inspec/profile.rb +9 -1
 - data/lib/inspec/reporters/json.rb +1 -0
 - data/lib/inspec/resource.rb +21 -9
 - data/lib/inspec/runner_rspec.rb +2 -2
 - data/lib/inspec/version.rb +1 -1
 - data/lib/resources/aide_conf.rb +3 -5
 - data/lib/resources/apache_conf.rb +8 -0
 - data/lib/resources/auditd.rb +13 -15
 - data/lib/resources/aws/aws_cloudtrail_trails.rb +4 -5
 - data/lib/resources/aws/aws_ec2_instances.rb +3 -4
 - data/lib/resources/aws/aws_iam_access_keys.rb +16 -18
 - data/lib/resources/aws/aws_iam_groups.rb +2 -2
 - data/lib/resources/aws/aws_iam_policies.rb +4 -5
 - data/lib/resources/aws/aws_iam_users.rb +17 -22
 - data/lib/resources/aws/aws_kms_keys.rb +4 -5
 - data/lib/resources/aws/aws_route_tables.rb +4 -5
 - data/lib/resources/aws/aws_s3_buckets.rb +3 -5
 - data/lib/resources/aws/aws_security_groups.rb +3 -5
 - data/lib/resources/aws/aws_sns_topics.rb +3 -5
 - data/lib/resources/aws/aws_subnets.rb +6 -8
 - data/lib/resources/aws/aws_vpcs.rb +6 -8
 - data/lib/resources/azure/azure_generic_resource.rb +7 -11
 - data/lib/resources/azure/azure_virtual_machine_data_disk.rb +15 -17
 - data/lib/resources/crontab.rb +9 -11
 - data/lib/resources/docker.rb +32 -38
 - data/lib/resources/elasticsearch.rb +24 -26
 - data/lib/resources/etc_fstab.rb +8 -10
 - data/lib/resources/etc_hosts.rb +4 -6
 - data/lib/resources/etc_hosts_allow_deny.rb +4 -6
 - data/lib/resources/file.rb +1 -1
 - data/lib/resources/firewalld.rb +6 -8
 - data/lib/resources/groups.rb +6 -8
 - data/lib/resources/nginx_conf.rb +4 -6
 - data/lib/resources/packages.rb +5 -7
 - data/lib/resources/passwd.rb +9 -11
 - data/lib/resources/port.rb +7 -9
 - data/lib/resources/postgres_hba_conf.rb +7 -9
 - data/lib/resources/postgres_ident_conf.rb +4 -6
 - data/lib/resources/processes.rb +13 -15
 - data/lib/resources/ssl.rb +5 -7
 - data/lib/resources/users.rb +15 -17
 - data/lib/resources/xinetd.rb +9 -11
 - metadata +2 -2
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA256:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 8d1fd91c23f600805625f0091a060ed582d7037cf057f5d302f9d8251807ae64
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 168ceacd5af2cc37cfd5728c11f22045efe2146ebd4ef7e0838e799b7591ad31
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: '018755cf06f189d55edf114bcddc147e1ebfb4cf14c46b0363d20408cf90a4e6682df07c706aff1290f6848b50072fd7204ae493463ae97d8f89db84c745c86b'
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: ff105b814bbeb16760bed805bb6ea6a31af22e686bbc005ba25176e2d953a10052496bd5d0cb174258ec50f02a0b18f62540db6ed344733fde116a96c0690a65
         
     | 
    
        data/CHANGELOG.md
    CHANGED
    
    | 
         @@ -1,25 +1,43 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            # Change Log
         
     | 
| 
       2 
2 
     | 
    
         
             
            <!-- usage documentation: http://expeditor-docs.es.chef.io/configuration/changelog/ -->
         
     | 
| 
       3 
     | 
    
         
            -
            <!-- latest_release 2.2. 
     | 
| 
       4 
     | 
    
         
            -
            ## [v2.2. 
     | 
| 
      
 3 
     | 
    
         
            +
            <!-- latest_release 2.2.27 -->
         
     | 
| 
      
 4 
     | 
    
         
            +
            ## [v2.2.27](https://github.com/inspec/inspec/tree/v2.2.27) (2018-06-29)
         
     | 
| 
       5 
5 
     | 
    
         | 
| 
       6 
     | 
    
         
            -
            ####  
     | 
| 
       7 
     | 
    
         
            -
            -  
     | 
| 
      
 6 
     | 
    
         
            +
            #### New Features
         
     | 
| 
      
 7 
     | 
    
         
            +
            - Document exit codes for 'inspec exec' and add --no-distinct-exit option [#3178](https://github.com/inspec/inspec/pull/3178) ([clintoncwolfe](https://github.com/clintoncwolfe))
         
     | 
| 
       8 
8 
     | 
    
         
             
            <!-- latest_release -->
         
     | 
| 
       9 
9 
     | 
    
         | 
| 
       10 
     | 
    
         
            -
            <!-- release_rollup since=2.2. 
     | 
| 
       11 
     | 
    
         
            -
            ### Changes since 2.2. 
     | 
| 
      
 10 
     | 
    
         
            +
            <!-- release_rollup since=2.2.20 -->
         
     | 
| 
      
 11 
     | 
    
         
            +
            ### Changes since 2.2.20 release
         
     | 
| 
       12 
12 
     | 
    
         | 
| 
       13 
     | 
    
         
            -
            ####  
     | 
| 
       14 
     | 
    
         
            -
            -  
     | 
| 
      
 13 
     | 
    
         
            +
            #### New Features
         
     | 
| 
      
 14 
     | 
    
         
            +
            - Document exit codes for 'inspec exec' and add --no-distinct-exit option [#3178](https://github.com/inspec/inspec/pull/3178) ([clintoncwolfe](https://github.com/clintoncwolfe)) <!-- 2.2.27 -->
         
     | 
| 
      
 15 
     | 
    
         
            +
            - Set parent_profile field on child profiles (json report) [#3164](https://github.com/inspec/inspec/pull/3164) ([jquick](https://github.com/jquick)) <!-- 2.2.25 -->
         
     | 
| 
       15 
16 
     | 
    
         | 
| 
       16 
17 
     | 
    
         
             
            #### Enhancements
         
     | 
| 
       17 
     | 
    
         
            -
            -  
     | 
| 
       18 
     | 
    
         
            -
            -  
     | 
| 
       19 
     | 
    
         
            -
             
     | 
| 
      
 18 
     | 
    
         
            +
            - Update core resources with filtertable API changes [#3117](https://github.com/inspec/inspec/pull/3117) ([clintoncwolfe](https://github.com/clintoncwolfe)) <!-- 2.2.26 -->
         
     | 
| 
      
 19 
     | 
    
         
            +
            - apache_conf resource: Strip quotes from values [#3142](https://github.com/inspec/inspec/pull/3142) ([jerryaldrichiii](https://github.com/jerryaldrichiii)) <!-- 2.2.24 -->
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
            #### Merged Pull Requests
         
     | 
| 
      
 22 
     | 
    
         
            +
            - Add functional tests for nested attributes [#3157](https://github.com/inspec/inspec/pull/3157) ([clintoncwolfe](https://github.com/clintoncwolfe)) <!-- 2.2.23 -->
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
            #### Bug Fixes
         
     | 
| 
      
 25 
     | 
    
         
            +
            - Detect inspec-core mode and do not attempt to load cloud resources [#3163](https://github.com/inspec/inspec/pull/3163) ([clintoncwolfe](https://github.com/clintoncwolfe)) <!-- 2.2.22 -->
         
     | 
| 
      
 26 
     | 
    
         
            +
            - Add support for shallow link paths [#3168](https://github.com/inspec/inspec/pull/3168) ([ColinHebert](https://github.com/ColinHebert)) <!-- 2.2.21 -->
         
     | 
| 
       20 
27 
     | 
    
         
             
            <!-- release_rollup -->
         
     | 
| 
       21 
28 
     | 
    
         | 
| 
       22 
29 
     | 
    
         
             
            <!-- latest_stable_release -->
         
     | 
| 
      
 30 
     | 
    
         
            +
            ## [v2.2.20](https://github.com/inspec/inspec/tree/v2.2.20) (2018-06-21)
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
            #### Enhancements
         
     | 
| 
      
 33 
     | 
    
         
            +
            - updated skip message to reflect accurate version of audit support [#3153](https://github.com/inspec/inspec/pull/3153) ([jeremymv2](https://github.com/jeremymv2))
         
     | 
| 
      
 34 
     | 
    
         
            +
            - auditd resource: Add handling for sudo/no command [#3151](https://github.com/inspec/inspec/pull/3151) ([jerryaldrichiii](https://github.com/jerryaldrichiii))
         
     | 
| 
      
 35 
     | 
    
         
            +
            - Fix control merging when overriding child controls [#3155](https://github.com/inspec/inspec/pull/3155) ([jquick](https://github.com/jquick))
         
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
      
 37 
     | 
    
         
            +
            #### Merged Pull Requests
         
     | 
| 
      
 38 
     | 
    
         
            +
            - Accept symbols and downcased criteria in aws_iam_policy have_statement matcher [#3129](https://github.com/inspec/inspec/pull/3129) ([clintoncwolfe](https://github.com/clintoncwolfe))
         
     | 
| 
      
 39 
     | 
    
         
            +
            <!-- latest_stable_release -->
         
     | 
| 
      
 40 
     | 
    
         
            +
             
     | 
| 
       23 
41 
     | 
    
         
             
            ## [v2.2.16](https://github.com/inspec/inspec/tree/v2.2.16) (2018-06-15)
         
     | 
| 
       24 
42 
     | 
    
         | 
| 
       25 
43 
     | 
    
         
             
            #### Enhancements
         
     | 
| 
         @@ -31,7 +49,6 @@ 
     | 
|
| 
       31 
49 
     | 
    
         
             
            - Add insecure option to the automate report json [#3124](https://github.com/inspec/inspec/pull/3124) ([jquick](https://github.com/jquick))
         
     | 
| 
       32 
50 
     | 
    
         
             
            - Bump train version for inspec [#3147](https://github.com/inspec/inspec/pull/3147) ([jquick](https://github.com/jquick))
         
     | 
| 
       33 
51 
     | 
    
         
             
            - deprecate azure_generic_resource [#3132](https://github.com/inspec/inspec/pull/3132) ([chris-rock](https://github.com/chris-rock))
         
     | 
| 
       34 
     | 
    
         
            -
            <!-- latest_stable_release -->
         
     | 
| 
       35 
52 
     | 
    
         | 
| 
       36 
53 
     | 
    
         
             
            ## [v2.2.10](https://github.com/inspec/inspec/tree/v2.2.10) (2018-06-08)
         
     | 
| 
       37 
54 
     | 
    
         | 
    
        data/docs/resources/file.md.erb
    CHANGED
    
    | 
         @@ -33,7 +33,7 @@ content, size, basename, path, owner, group, type 
     | 
|
| 
       33 
33 
     | 
    
         | 
| 
       34 
34 
     | 
    
         
             
            ### Unix/Linux Properties
         
     | 
| 
       35 
35 
     | 
    
         | 
| 
       36 
     | 
    
         
            -
            symlink, mode, link_path, mtime, size, selinux\_label, md5sum, sha256sum, path, source, source\_path, uid, gid
         
     | 
| 
      
 36 
     | 
    
         
            +
            symlink, mode, link_path, shallow_link_path, mtime, size, selinux\_label, md5sum, sha256sum, path, source, source\_path, uid, gid
         
     | 
| 
       37 
37 
     | 
    
         | 
| 
       38 
38 
     | 
    
         
             
            ### Windows Properties
         
     | 
| 
       39 
39 
     | 
    
         | 
| 
         @@ -74,10 +74,17 @@ The following examples show how to use this InSpec audit resource. 
     | 
|
| 
       74 
74 
     | 
    
         
             
            ### link_path
         
     | 
| 
       75 
75 
     | 
    
         | 
| 
       76 
76 
     | 
    
         
             
            The `link_path` property tests if the file exists at the specified path. If the file is a symlink,
         
     | 
| 
       77 
     | 
    
         
            -
            InSpec will resolve the symlink and return the ultimate linked file.
         
     | 
| 
      
 77 
     | 
    
         
            +
            InSpec will resolve the symlink recursively and return the ultimate linked file.
         
     | 
| 
       78 
78 
     | 
    
         | 
| 
       79 
79 
     | 
    
         
             
                its('link_path') { should eq '/some/path/to/file' }
         
     | 
| 
       80 
80 
     | 
    
         | 
| 
      
 81 
     | 
    
         
            +
            ### shallow_link_path
         
     | 
| 
      
 82 
     | 
    
         
            +
             
     | 
| 
      
 83 
     | 
    
         
            +
            The `shallow_link_path`` property returns the path that the file refers to, only resolving
         
     | 
| 
      
 84 
     | 
    
         
            +
            it once (that is, it performs a readlink operation). If the file is not a symlink, nil is returned.
         
     | 
| 
      
 85 
     | 
    
         
            +
             
     | 
| 
      
 86 
     | 
    
         
            +
                its('shallow_link_path') { should eq '/some/path/to/file' }
         
     | 
| 
      
 87 
     | 
    
         
            +
             
     | 
| 
       81 
88 
     | 
    
         
             
            ### md5sum
         
     | 
| 
       82 
89 
     | 
    
         | 
| 
       83 
90 
     | 
    
         
             
            The `md5sum` property tests if the MD5 checksum for a file matches the specified value.
         
     | 
| 
         @@ -316,7 +323,7 @@ The following example shows how to use the `file` audit resource to verify if th 
     | 
|
| 
       316 
323 
     | 
    
         | 
| 
       317 
324 
     | 
    
         
             
            ### Test parameters of symlinked file
         
     | 
| 
       318 
325 
     | 
    
         | 
| 
       319 
     | 
    
         
            -
            If you need to test the parameters of the target file for a symlink, you can use the `link_path` method for the `file` resource.
         
     | 
| 
      
 326 
     | 
    
         
            +
            If you need to test the parameters of the target file for a symlink, you can use the `link_path` (recursive resolution) or `shallow_link_path` (direct link) method for the `file` resource.
         
     | 
| 
       320 
327 
     | 
    
         | 
| 
       321 
328 
     | 
    
         
             
            For example, for the following symlink:
         
     | 
| 
       322 
329 
     | 
    
         | 
    
        data/lib/inspec/base_cli.rb
    CHANGED
    
    | 
         @@ -83,6 +83,8 @@ module Inspec 
     | 
|
| 
       83 
83 
     | 
    
         
             
                    desc: 'Allow caching for backend command output. (default: true)'
         
     | 
| 
       84 
84 
     | 
    
         
             
                  option :show_progress, type: :boolean,
         
     | 
| 
       85 
85 
     | 
    
         
             
                    desc: 'Show progress while executing tests.'
         
     | 
| 
      
 86 
     | 
    
         
            +
                  option :distinct_exit, type: :boolean, default: true,
         
     | 
| 
      
 87 
     | 
    
         
            +
                    desc: 'Exit with code 101 if any tests fail, and 100 if any are skipped (default).  If disabled, exit 0 on skips and 1 for failures.'
         
     | 
| 
       86 
88 
     | 
    
         
             
                end
         
     | 
| 
       87 
89 
     | 
    
         | 
| 
       88 
90 
     | 
    
         
             
                def self.default_options
         
     | 
    
        data/lib/inspec/cli.rb
    CHANGED
    
    | 
         @@ -156,6 +156,9 @@ class Inspec::InspecCLI < Inspec::BaseCLI 
     | 
|
| 
       156 
156 
     | 
    
         
             
              end
         
     | 
| 
       157 
157 
     | 
    
         | 
| 
       158 
158 
     | 
    
         
             
              desc 'exec PATHS', 'run all test files at the specified PATH.'
         
     | 
| 
      
 159 
     | 
    
         
            +
              long_desc <<~EOT
         
     | 
| 
      
 160 
     | 
    
         
            +
                Loads the given profile(s) and fetches their dependencies if needed.  Then connects to the target and executes any controls contained in the profiles.  One or more reporters are used to generate output.  If all tests passed (no fails, no skips) exit code 0 is returned.  If some tests skipped but none failed, exit code 101 is returned. If at least one test failed, exit code 100 is returned.  If inspec failed for any other reason, exit code 1 is returned.
         
     | 
| 
      
 161 
     | 
    
         
            +
              EOT
         
     | 
| 
       159 
162 
     | 
    
         
             
              exec_options
         
     | 
| 
       160 
163 
     | 
    
         
             
              def exec(*targets)
         
     | 
| 
       161 
164 
     | 
    
         
             
                o = opts(:exec).dup
         
     | 
| 
         @@ -204,6 +207,8 @@ class Inspec::InspecCLI < Inspec::BaseCLI 
     | 
|
| 
       204 
207 
     | 
    
         
             
                desc: 'Enable one or more output reporters: cli, documentation, html, progress, json, json-min, json-rspec, junit'
         
     | 
| 
       205 
208 
     | 
    
         
             
              option :depends, type: :array, default: [],
         
     | 
| 
       206 
209 
     | 
    
         
             
                desc: 'A space-delimited list of local folders containing profiles whose libraries and resources will be loaded into the new shell'
         
     | 
| 
      
 210 
     | 
    
         
            +
              option :distinct_exit, type: :boolean, default: true,
         
     | 
| 
      
 211 
     | 
    
         
            +
                desc: 'Exit with code 101 if any tests fail, and 100 if any are skipped (default).  If disabled, exit 0 on skips and 1 for failures.'
         
     | 
| 
       207 
212 
     | 
    
         
             
              def shell_func
         
     | 
| 
       208 
213 
     | 
    
         
             
                o = opts(:shell).dup
         
     | 
| 
       209 
214 
     | 
    
         
             
                diagnose(o)
         
     | 
| 
         @@ -14,13 +14,13 @@ module Inspec 
     | 
|
| 
       14 
14 
     | 
    
         
             
                # @param cwd [String] Current working directory for relative path includes
         
     | 
| 
       15 
15 
     | 
    
         
             
                # @param vendor_path [String] Path to the vendor directory
         
     | 
| 
       16 
16 
     | 
    
         
             
                #
         
     | 
| 
       17 
     | 
    
         
            -
                def self.from_lockfile(lockfile,  
     | 
| 
      
 17 
     | 
    
         
            +
                def self.from_lockfile(lockfile, config, opts = {})
         
     | 
| 
       18 
18 
     | 
    
         
             
                  dep_tree = lockfile.deps.map do |dep|
         
     | 
| 
       19 
     | 
    
         
            -
                    Inspec::Requirement.from_lock_entry(dep,  
     | 
| 
      
 19 
     | 
    
         
            +
                    Inspec::Requirement.from_lock_entry(dep, config, opts)
         
     | 
| 
       20 
20 
     | 
    
         
             
                  end
         
     | 
| 
       21 
21 
     | 
    
         | 
| 
       22 
22 
     | 
    
         
             
                  dep_list = flatten_dep_tree(dep_tree)
         
     | 
| 
       23 
     | 
    
         
            -
                  new(cwd, cache, dep_list, backend)
         
     | 
| 
      
 23 
     | 
    
         
            +
                  new(config[:cwd], config[:cache], dep_list, config[:backend])
         
     | 
| 
       24 
24 
     | 
    
         
             
                end
         
     | 
| 
       25 
25 
     | 
    
         | 
| 
       26 
26 
     | 
    
         
             
                def self.from_array(dependencies, cwd, cache, backend)
         
     | 
| 
         @@ -17,37 +17,42 @@ module Inspec 
     | 
|
| 
       17 
17 
     | 
    
         
             
                  if dep[:path]
         
     | 
| 
       18 
18 
     | 
    
         
             
                    req_path = File.expand_path(dep[:path], req_path)
         
     | 
| 
       19 
19 
     | 
    
         
             
                  end
         
     | 
| 
      
 20 
     | 
    
         
            +
                  config = {
         
     | 
| 
      
 21 
     | 
    
         
            +
                    cache: cache,
         
     | 
| 
      
 22 
     | 
    
         
            +
                    cwd: req_path,
         
     | 
| 
      
 23 
     | 
    
         
            +
                  }
         
     | 
| 
       20 
24 
     | 
    
         | 
| 
       21 
25 
     | 
    
         
             
                  new(dep[:name],
         
     | 
| 
       22 
26 
     | 
    
         
             
                      dep[:version],
         
     | 
| 
       23 
     | 
    
         
            -
                       
     | 
| 
       24 
     | 
    
         
            -
                      req_path,
         
     | 
| 
      
 27 
     | 
    
         
            +
                      config,
         
     | 
| 
       25 
28 
     | 
    
         
             
                      opts.merge(dep))
         
     | 
| 
       26 
29 
     | 
    
         
             
                end
         
     | 
| 
       27 
30 
     | 
    
         | 
| 
       28 
     | 
    
         
            -
                def self.from_lock_entry(entry,  
     | 
| 
      
 31 
     | 
    
         
            +
                def self.from_lock_entry(entry, config, opts = {})
         
     | 
| 
       29 
32 
     | 
    
         
             
                  req = new(entry[:name],
         
     | 
| 
       30 
33 
     | 
    
         
             
                            entry[:version_constraints],
         
     | 
| 
       31 
     | 
    
         
            -
                             
     | 
| 
       32 
     | 
    
         
            -
                             
     | 
| 
       33 
     | 
    
         
            -
                            entry[:resolved_source].merge(backend: backend).merge(opts))
         
     | 
| 
      
 34 
     | 
    
         
            +
                            config,
         
     | 
| 
      
 35 
     | 
    
         
            +
                            entry[:resolved_source].merge(backend: config[:backend]).merge(opts))
         
     | 
| 
       34 
36 
     | 
    
         | 
| 
       35 
37 
     | 
    
         
             
                  locked_deps = []
         
     | 
| 
       36 
38 
     | 
    
         
             
                  Array(entry[:dependencies]).each do |dep_entry|
         
     | 
| 
       37 
     | 
    
         
            -
                     
     | 
| 
      
 39 
     | 
    
         
            +
                    dep_config = config.dup
         
     | 
| 
      
 40 
     | 
    
         
            +
                    dep_config[:parent_profile] = entry[:name]
         
     | 
| 
      
 41 
     | 
    
         
            +
                    locked_deps << Inspec::Requirement.from_lock_entry(dep_entry, dep_config, opts)
         
     | 
| 
       38 
42 
     | 
    
         
             
                  end
         
     | 
| 
       39 
43 
     | 
    
         
             
                  req.lock_deps(locked_deps)
         
     | 
| 
       40 
44 
     | 
    
         
             
                  req
         
     | 
| 
       41 
45 
     | 
    
         
             
                end
         
     | 
| 
       42 
46 
     | 
    
         | 
| 
       43 
47 
     | 
    
         
             
                attr_reader :cwd, :opts, :version_constraints
         
     | 
| 
       44 
     | 
    
         
            -
                def initialize(name, version_constraints,  
     | 
| 
      
 48 
     | 
    
         
            +
                def initialize(name, version_constraints, config, opts)
         
     | 
| 
       45 
49 
     | 
    
         
             
                  @name = name
         
     | 
| 
       46 
50 
     | 
    
         
             
                  @version_constraints = Array(version_constraints)
         
     | 
| 
       47 
     | 
    
         
            -
                  @cache = cache
         
     | 
| 
      
 51 
     | 
    
         
            +
                  @cache = config[:cache]
         
     | 
| 
       48 
52 
     | 
    
         
             
                  @backend = opts[:backend]
         
     | 
| 
       49 
53 
     | 
    
         
             
                  @opts = opts
         
     | 
| 
       50 
     | 
    
         
            -
                  @cwd = cwd
         
     | 
| 
      
 54 
     | 
    
         
            +
                  @cwd = config[:cwd]
         
     | 
| 
      
 55 
     | 
    
         
            +
                  @parent_profile = config[:parent_profile]
         
     | 
| 
       51 
56 
     | 
    
         
             
                end
         
     | 
| 
       52 
57 
     | 
    
         | 
| 
       53 
58 
     | 
    
         
             
                #
         
     | 
| 
         @@ -114,10 +119,12 @@ module Inspec 
     | 
|
| 
       114 
119 
     | 
    
         
             
                  return @profile unless @profile.nil?
         
     | 
| 
       115 
120 
     | 
    
         
             
                  opts = @opts.dup
         
     | 
| 
       116 
121 
     | 
    
         
             
                  opts[:backend] = @backend
         
     | 
| 
       117 
     | 
    
         
            -
                  if !@dependencies.nil?
         
     | 
| 
      
 122 
     | 
    
         
            +
                  if !@dependencies.nil? && !@dependencies.empty?
         
     | 
| 
       118 
123 
     | 
    
         
             
                    opts[:dependencies] = Inspec::DependencySet.from_array(@dependencies, @cwd, @cache, @backend)
         
     | 
| 
       119 
124 
     | 
    
         
             
                  end
         
     | 
| 
       120 
125 
     | 
    
         
             
                  @profile = Inspec::Profile.for_fetcher(fetcher, opts)
         
     | 
| 
      
 126 
     | 
    
         
            +
                  @profile.parent_profile = @parent_profile
         
     | 
| 
      
 127 
     | 
    
         
            +
                  @profile
         
     | 
| 
       121 
128 
     | 
    
         
             
                end
         
     | 
| 
       122 
129 
     | 
    
         
             
              end
         
     | 
| 
       123 
130 
     | 
    
         
             
            end
         
     | 
    
        data/lib/inspec/profile.rb
    CHANGED
    
    | 
         @@ -79,6 +79,7 @@ module Inspec 
     | 
|
| 
       79 
79 
     | 
    
         
             
                end
         
     | 
| 
       80 
80 
     | 
    
         | 
| 
       81 
81 
     | 
    
         
             
                attr_reader :source_reader, :backend, :runner_context, :check_mode
         
     | 
| 
      
 82 
     | 
    
         
            +
                attr_accessor :parent_profile
         
     | 
| 
       82 
83 
     | 
    
         
             
                def_delegator :@source_reader, :tests
         
     | 
| 
       83 
84 
     | 
    
         
             
                def_delegator :@source_reader, :libraries
         
     | 
| 
       84 
85 
     | 
    
         
             
                def_delegator :@source_reader, :metadata
         
     | 
| 
         @@ -230,6 +231,7 @@ module Inspec 
     | 
|
| 
       230 
231 
     | 
    
         
             
                  # add information about the required attributes
         
     | 
| 
       231 
232 
     | 
    
         
             
                  res[:attributes] = res[:attributes].map(&:to_hash) unless res[:attributes].nil? || res[:attributes].empty?
         
     | 
| 
       232 
233 
     | 
    
         
             
                  res[:sha256] = sha256
         
     | 
| 
      
 234 
     | 
    
         
            +
                  res[:parent_profile] = parent_profile unless parent_profile.nil?
         
     | 
| 
       233 
235 
     | 
    
         
             
                  res
         
     | 
| 
       234 
236 
     | 
    
         
             
                end
         
     | 
| 
       235 
237 
     | 
    
         | 
| 
         @@ -414,7 +416,13 @@ module Inspec 
     | 
|
| 
       414 
416 
     | 
    
         
             
                end
         
     | 
| 
       415 
417 
     | 
    
         | 
| 
       416 
418 
     | 
    
         
             
                def load_dependencies
         
     | 
| 
       417 
     | 
    
         
            -
                   
     | 
| 
      
 419 
     | 
    
         
            +
                  config = {
         
     | 
| 
      
 420 
     | 
    
         
            +
                    cwd: cwd,
         
     | 
| 
      
 421 
     | 
    
         
            +
                    cache: @cache,
         
     | 
| 
      
 422 
     | 
    
         
            +
                    backend: @backend,
         
     | 
| 
      
 423 
     | 
    
         
            +
                    parent_profile: name,
         
     | 
| 
      
 424 
     | 
    
         
            +
                  }
         
     | 
| 
      
 425 
     | 
    
         
            +
                  Inspec::DependencySet.from_lockfile(lockfile, config, { attributes: @attr_values })
         
     | 
| 
       418 
426 
     | 
    
         
             
                end
         
     | 
| 
       419 
427 
     | 
    
         | 
| 
       420 
428 
     | 
    
         
             
                # Calculate this profile's SHA256 checksum. Includes metadata, dependencies,
         
     | 
| 
         @@ -105,6 +105,7 @@ module Inspec::Reporters 
     | 
|
| 
       105 
105 
     | 
    
         
             
                      copyright_email: p[:copyright_email],
         
     | 
| 
       106 
106 
     | 
    
         
             
                      supports: p[:supports],
         
     | 
| 
       107 
107 
     | 
    
         
             
                      attributes: p[:attributes],
         
     | 
| 
      
 108 
     | 
    
         
            +
                      parent_profile: p[:parent_profile],
         
     | 
| 
       108 
109 
     | 
    
         
             
                      depends: p[:depends],
         
     | 
| 
       109 
110 
     | 
    
         
             
                      groups: profile_groups(p),
         
     | 
| 
       110 
111 
     | 
    
         
             
                      controls: profile_controls(p),
         
     | 
    
        data/lib/inspec/resource.rb
    CHANGED
    
    | 
         @@ -85,15 +85,27 @@ end 
     | 
|
| 
       85 
85 
     | 
    
         
             
            # Many resources use FilterTable.
         
     | 
| 
       86 
86 
     | 
    
         
             
            require 'utils/filter'
         
     | 
| 
       87 
87 
     | 
    
         | 
| 
       88 
     | 
    
         
            -
            #  
     | 
| 
       89 
     | 
    
         
            -
             
     | 
| 
       90 
     | 
    
         
            -
             
     | 
| 
       91 
     | 
    
         
            -
             
     | 
| 
       92 
     | 
    
         
            -
             
     | 
| 
       93 
     | 
    
         
            -
             
     | 
| 
       94 
     | 
    
         
            -
               
     | 
| 
       95 
     | 
    
         
            -
               
     | 
| 
       96 
     | 
    
         
            -
               
     | 
| 
      
 88 
     | 
    
         
            +
            # Detect if we are running the stripped-down inspec-core
         
     | 
| 
      
 89 
     | 
    
         
            +
            # This relies on AWS being stripped from the inspec-core gem
         
     | 
| 
      
 90 
     | 
    
         
            +
            inspec_core_only = !File.exist?(File.join(File.dirname(__FILE__), '..', 'resource_support', 'aws.rb'))
         
     | 
| 
      
 91 
     | 
    
         
            +
             
     | 
| 
      
 92 
     | 
    
         
            +
            # Do not attempt to load cloud resources if we are in inspec-core mode
         
     | 
| 
      
 93 
     | 
    
         
            +
            unless inspec_core_only
         
     | 
| 
      
 94 
     | 
    
         
            +
              # AWS resources are included via their own file,
         
     | 
| 
      
 95 
     | 
    
         
            +
              # but only consider loading them if we have the SDK available, and is v2.
         
     | 
| 
      
 96 
     | 
    
         
            +
              # https://github.com/inspec/inspec/issues/2571
         
     | 
| 
      
 97 
     | 
    
         
            +
              if Gem.loaded_specs.key?('aws-sdk') && Gem.loaded_specs['aws-sdk'].version < Gem::Version.new('3.0.0')
         
     | 
| 
      
 98 
     | 
    
         
            +
                require 'resource_support/aws'
         
     | 
| 
      
 99 
     | 
    
         
            +
              end
         
     | 
| 
      
 100 
     | 
    
         
            +
             
     | 
| 
      
 101 
     | 
    
         
            +
              # Azure resources
         
     | 
| 
      
 102 
     | 
    
         
            +
              if Gem.loaded_specs.key?('azure_mgmt_resources')
         
     | 
| 
      
 103 
     | 
    
         
            +
                require 'resources/azure/azure_backend.rb'
         
     | 
| 
      
 104 
     | 
    
         
            +
                require 'resources/azure/azure_generic_resource.rb'
         
     | 
| 
      
 105 
     | 
    
         
            +
                require 'resources/azure/azure_resource_group.rb'
         
     | 
| 
      
 106 
     | 
    
         
            +
                require 'resources/azure/azure_virtual_machine.rb'
         
     | 
| 
      
 107 
     | 
    
         
            +
                require 'resources/azure/azure_virtual_machine_data_disk.rb'
         
     | 
| 
      
 108 
     | 
    
         
            +
              end
         
     | 
| 
       97 
109 
     | 
    
         
             
            end
         
     | 
| 
       98 
110 
     | 
    
         | 
| 
       99 
111 
     | 
    
         
             
            require 'resources/aide_conf'
         
     | 
    
        data/lib/inspec/runner_rspec.rb
    CHANGED
    
    | 
         @@ -87,9 +87,9 @@ module Inspec 
     | 
|
| 
       87 
87 
     | 
    
         
             
                  if stats[:failed][:total] == 0 && stats[:skipped][:total] == 0
         
     | 
| 
       88 
88 
     | 
    
         
             
                    0
         
     | 
| 
       89 
89 
     | 
    
         
             
                  elsif stats[:failed][:total] > 0
         
     | 
| 
       90 
     | 
    
         
            -
                    100
         
     | 
| 
      
 90 
     | 
    
         
            +
                    @conf['distinct_exit'] ? 100 : 1
         
     | 
| 
       91 
91 
     | 
    
         
             
                  elsif stats[:skipped][:total] > 0
         
     | 
| 
       92 
     | 
    
         
            -
                    101
         
     | 
| 
      
 92 
     | 
    
         
            +
                    @conf['distinct_exit'] ? 101 : 0
         
     | 
| 
       93 
93 
     | 
    
         
             
                  else
         
     | 
| 
       94 
94 
     | 
    
         
             
                    @rspec_exit_code
         
     | 
| 
       95 
95 
     | 
    
         
             
                  end
         
     | 
    
        data/lib/inspec/version.rb
    CHANGED
    
    
    
        data/lib/resources/aide_conf.rb
    CHANGED
    
    | 
         @@ -44,12 +44,10 @@ module Inspec::Resources 
     | 
|
| 
       44 
44 
     | 
    
         
             
                end
         
     | 
| 
       45 
45 
     | 
    
         | 
| 
       46 
46 
     | 
    
         
             
                filter = FilterTable.create
         
     | 
| 
       47 
     | 
    
         
            -
                filter. 
     | 
| 
       48 
     | 
    
         
            -
                      . 
     | 
| 
       49 
     | 
    
         
            -
                      .add(:selection_lines, field: 'selection_line')
         
     | 
| 
       50 
     | 
    
         
            -
                      .add(:rules,           field: 'rules')
         
     | 
| 
      
 47 
     | 
    
         
            +
                filter.register_column(:selection_lines, field: 'selection_line')
         
     | 
| 
      
 48 
     | 
    
         
            +
                      .register_column(:rules,           field: 'rules')
         
     | 
| 
       51 
49 
     | 
    
         | 
| 
       52 
     | 
    
         
            -
                filter. 
     | 
| 
      
 50 
     | 
    
         
            +
                filter.install_filter_methods_on_resource(self, :params)
         
     | 
| 
       53 
51 
     | 
    
         | 
| 
       54 
52 
     | 
    
         
             
                private
         
     | 
| 
       55 
53 
     | 
    
         | 
| 
         @@ -85,6 +85,14 @@ module Inspec::Resources 
     | 
|
| 
       85 
85 
     | 
    
         
             
                      assignment_regex: /^\s*(\S+)\s+((?=.*\s+$).*?|.*)\s*$/,
         
     | 
| 
       86 
86 
     | 
    
         
             
                      multiple_values: true,
         
     | 
| 
       87 
87 
     | 
    
         
             
                    ).params
         
     | 
| 
      
 88 
     | 
    
         
            +
             
     | 
| 
      
 89 
     | 
    
         
            +
                    # Capture any characters between quotes that are not escaped in values
         
     | 
| 
      
 90 
     | 
    
         
            +
                    params.values.map! do |value|
         
     | 
| 
      
 91 
     | 
    
         
            +
                      value.map! do |sub_value|
         
     | 
| 
      
 92 
     | 
    
         
            +
                        sub_value[/(?<=["|'])(?:\\.|[^"'\\])*(?=["|'])/] || sub_value
         
     | 
| 
      
 93 
     | 
    
         
            +
                      end
         
     | 
| 
      
 94 
     | 
    
         
            +
                    end
         
     | 
| 
      
 95 
     | 
    
         
            +
             
     | 
| 
       88 
96 
     | 
    
         
             
                    @params.merge!(params)
         
     | 
| 
       89 
97 
     | 
    
         | 
| 
       90 
98 
     | 
    
         
             
                    to_read = to_read.drop(1)
         
     | 
    
        data/lib/resources/auditd.rb
    CHANGED
    
    | 
         @@ -55,21 +55,19 @@ module Inspec::Resources 
     | 
|
| 
       55 
55 
     | 
    
         
             
                end
         
     | 
| 
       56 
56 
     | 
    
         | 
| 
       57 
57 
     | 
    
         
             
                filter = FilterTable.create
         
     | 
| 
       58 
     | 
    
         
            -
                filter. 
     | 
| 
       59 
     | 
    
         
            -
                      . 
     | 
| 
       60 
     | 
    
         
            -
                      . 
     | 
| 
       61 
     | 
    
         
            -
                      . 
     | 
| 
       62 
     | 
    
         
            -
                      . 
     | 
| 
       63 
     | 
    
         
            -
                      . 
     | 
| 
       64 
     | 
    
         
            -
                      . 
     | 
| 
       65 
     | 
    
         
            -
                      . 
     | 
| 
       66 
     | 
    
         
            -
                      . 
     | 
| 
       67 
     | 
    
         
            -
                      . 
     | 
| 
       68 
     | 
    
         
            -
                      . 
     | 
| 
       69 
     | 
    
         
            -
             
     | 
| 
       70 
     | 
    
         
            -
             
     | 
| 
       71 
     | 
    
         
            -
             
     | 
| 
       72 
     | 
    
         
            -
                filter.connect(self, :params)
         
     | 
| 
      
 58 
     | 
    
         
            +
                filter.register_column(:file,         field: 'file')
         
     | 
| 
      
 59 
     | 
    
         
            +
                      .register_column(:list,         field: 'list')
         
     | 
| 
      
 60 
     | 
    
         
            +
                      .register_column(:action,       field: 'action')
         
     | 
| 
      
 61 
     | 
    
         
            +
                      .register_column(:fields,       field: 'fields')
         
     | 
| 
      
 62 
     | 
    
         
            +
                      .register_column(:fields_nokey, field: 'fields_nokey')
         
     | 
| 
      
 63 
     | 
    
         
            +
                      .register_column(:syscall,      field: 'syscall')
         
     | 
| 
      
 64 
     | 
    
         
            +
                      .register_column(:key,          field: 'key')
         
     | 
| 
      
 65 
     | 
    
         
            +
                      .register_column(:arch,         field: 'arch')
         
     | 
| 
      
 66 
     | 
    
         
            +
                      .register_column(:path,         field: 'path')
         
     | 
| 
      
 67 
     | 
    
         
            +
                      .register_column(:permissions,  field: 'permissions')
         
     | 
| 
      
 68 
     | 
    
         
            +
                      .register_column(:exit,         field: 'exit')
         
     | 
| 
      
 69 
     | 
    
         
            +
             
     | 
| 
      
 70 
     | 
    
         
            +
                filter.install_filter_methods_on_resource(self, :params)
         
     | 
| 
       73 
71 
     | 
    
         | 
| 
       74 
72 
     | 
    
         
             
                def status(name = nil)
         
     | 
| 
       75 
73 
     | 
    
         
             
                  @status_content ||= inspec.command('/sbin/auditctl -s').stdout.chomp
         
     | 
| 
         @@ -19,11 +19,10 @@ class AwsCloudTrailTrails < Inspec.resource(1) 
     | 
|
| 
       19 
19 
     | 
    
         | 
| 
       20 
20 
     | 
    
         
             
              # Underlying FilterTable implementation.
         
     | 
| 
       21 
21 
     | 
    
         
             
              filter = FilterTable.create
         
     | 
| 
       22 
     | 
    
         
            -
              filter. 
     | 
| 
       23 
     | 
    
         
            -
             
     | 
| 
       24 
     | 
    
         
            -
             
     | 
| 
       25 
     | 
    
         
            -
             
     | 
| 
       26 
     | 
    
         
            -
              filter.connect(self, :table)
         
     | 
| 
      
 22 
     | 
    
         
            +
              filter.register_custom_matcher(:exists?) { |x| !x.entries.empty? }
         
     | 
| 
      
 23 
     | 
    
         
            +
              filter.register_column(:trail_arns, field: :trail_arn)
         
     | 
| 
      
 24 
     | 
    
         
            +
              filter.register_column(:names, field: :name)
         
     | 
| 
      
 25 
     | 
    
         
            +
              filter.install_filter_methods_on_resource(self, :table)
         
     | 
| 
       27 
26 
     | 
    
         | 
| 
       28 
27 
     | 
    
         
             
              def to_s
         
     | 
| 
       29 
28 
     | 
    
         
             
                'CloudTrail Trails'
         
     | 
| 
         @@ -18,10 +18,9 @@ class AwsEc2Instances < Inspec.resource(1) 
     | 
|
| 
       18 
18 
     | 
    
         | 
| 
       19 
19 
     | 
    
         
             
              # Underlying FilterTable implementation.
         
     | 
| 
       20 
20 
     | 
    
         
             
              filter = FilterTable.create
         
     | 
| 
       21 
     | 
    
         
            -
              filter. 
     | 
| 
       22 
     | 
    
         
            -
             
     | 
| 
       23 
     | 
    
         
            -
             
     | 
| 
       24 
     | 
    
         
            -
              filter.connect(self, :table)
         
     | 
| 
      
 21 
     | 
    
         
            +
              filter.register_custom_matcher(:exists?) { |x| !x.entries.empty? }
         
     | 
| 
      
 22 
     | 
    
         
            +
              filter.register_column(:instance_ids, field: :instance_id)
         
     | 
| 
      
 23 
     | 
    
         
            +
              filter.install_filter_methods_on_resource(self, :table)
         
     | 
| 
       25 
24 
     | 
    
         | 
| 
       26 
25 
     | 
    
         
             
              def to_s
         
     | 
| 
       27 
26 
     | 
    
         
             
                'EC2 Instances'
         
     | 
| 
         @@ -38,24 +38,22 @@ class AwsIamAccessKeys < Inspec.resource(1) 
     | 
|
| 
       38 
38 
     | 
    
         | 
| 
       39 
39 
     | 
    
         
             
              # Underlying FilterTable implementation.
         
     | 
| 
       40 
40 
     | 
    
         
             
              filter = FilterTable.create
         
     | 
| 
       41 
     | 
    
         
            -
              filter. 
     | 
| 
       42 
     | 
    
         
            -
             
     | 
| 
       43 
     | 
    
         
            -
                    . 
     | 
| 
       44 
     | 
    
         
            -
                    . 
     | 
| 
       45 
     | 
    
         
            -
                    . 
     | 
| 
       46 
     | 
    
         
            -
                    . 
     | 
| 
       47 
     | 
    
         
            -
                    . 
     | 
| 
       48 
     | 
    
         
            -
                    . 
     | 
| 
       49 
     | 
    
         
            -
                    . 
     | 
| 
       50 
     | 
    
         
            -
                    . 
     | 
| 
       51 
     | 
    
         
            -
                    . 
     | 
| 
       52 
     | 
    
         
            -
                    . 
     | 
| 
       53 
     | 
    
         
            -
                    . 
     | 
| 
       54 
     | 
    
         
            -
                    . 
     | 
| 
       55 
     | 
    
         
            -
                    . 
     | 
| 
       56 
     | 
    
         
            -
             
     | 
| 
       57 
     | 
    
         
            -
                    .add(:user_created_date,   field: :user_created_date)
         
     | 
| 
       58 
     | 
    
         
            -
              filter.connect(self, :table)
         
     | 
| 
      
 41 
     | 
    
         
            +
              filter.register_custom_matcher(:exists?) { |x| !x.entries.empty? }
         
     | 
| 
      
 42 
     | 
    
         
            +
              filter.register_column(:access_key_ids, field: :access_key_id)
         
     | 
| 
      
 43 
     | 
    
         
            +
                    .register_column(:created_date, field: :create_date)
         
     | 
| 
      
 44 
     | 
    
         
            +
                    .register_column(:created_days_ago, field: :created_days_ago)
         
     | 
| 
      
 45 
     | 
    
         
            +
                    .register_column(:created_with_user, field: :created_with_user)
         
     | 
| 
      
 46 
     | 
    
         
            +
                    .register_column(:created_hours_ago, field: :created_hours_ago)
         
     | 
| 
      
 47 
     | 
    
         
            +
                    .register_column(:usernames, field: :username)
         
     | 
| 
      
 48 
     | 
    
         
            +
                    .register_column(:active, field: :active)
         
     | 
| 
      
 49 
     | 
    
         
            +
                    .register_column(:inactive, field: :inactive)
         
     | 
| 
      
 50 
     | 
    
         
            +
                    .register_column(:last_used_date, field: :last_used_date)
         
     | 
| 
      
 51 
     | 
    
         
            +
                    .register_column(:last_used_hours_ago, field: :last_used_hours_ago)
         
     | 
| 
      
 52 
     | 
    
         
            +
                    .register_column(:last_used_days_ago,  field: :last_used_days_ago)
         
     | 
| 
      
 53 
     | 
    
         
            +
                    .register_column(:ever_used,           field: :ever_used)
         
     | 
| 
      
 54 
     | 
    
         
            +
                    .register_column(:never_used,          field: :never_used)
         
     | 
| 
      
 55 
     | 
    
         
            +
                    .register_column(:user_created_date,   field: :user_created_date)
         
     | 
| 
      
 56 
     | 
    
         
            +
              filter.install_filter_methods_on_resource(self, :table)
         
     | 
| 
       59 
57 
     | 
    
         | 
| 
       60 
58 
     | 
    
         
             
              def to_s
         
     | 
| 
       61 
59 
     | 
    
         
             
                'IAM Access Keys'
         
     |