inspec 0.12.0 → 0.14.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (71) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +39 -2
  3. data/bin/inspec +11 -9
  4. data/docs/matchers.rst +129 -0
  5. data/docs/resources.rst +64 -37
  6. data/inspec.gemspec +1 -1
  7. data/lib/bundles/inspec-compliance/cli.rb +1 -1
  8. data/lib/bundles/inspec-compliance/configuration.rb +1 -0
  9. data/lib/bundles/inspec-compliance/target.rb +16 -32
  10. data/lib/bundles/inspec-init/cli.rb +2 -0
  11. data/lib/bundles/inspec-supermarket.rb +13 -0
  12. data/lib/bundles/inspec-supermarket/api.rb +2 -0
  13. data/lib/bundles/inspec-supermarket/cli.rb +2 -2
  14. data/lib/bundles/inspec-supermarket/target.rb +11 -15
  15. data/lib/fetchers/local.rb +31 -0
  16. data/lib/fetchers/tar.rb +48 -0
  17. data/lib/fetchers/url.rb +100 -0
  18. data/lib/fetchers/zip.rb +47 -0
  19. data/lib/inspec.rb +2 -3
  20. data/lib/inspec/fetcher.rb +22 -0
  21. data/lib/inspec/metadata.rb +4 -2
  22. data/lib/inspec/plugins.rb +2 -0
  23. data/lib/inspec/plugins/fetcher.rb +97 -0
  24. data/lib/inspec/plugins/source_reader.rb +36 -0
  25. data/lib/inspec/profile.rb +92 -81
  26. data/lib/inspec/resource.rb +1 -0
  27. data/lib/inspec/runner.rb +15 -35
  28. data/lib/inspec/source_reader.rb +32 -0
  29. data/lib/inspec/version.rb +1 -1
  30. data/lib/matchers/matchers.rb +5 -6
  31. data/lib/resources/file.rb +8 -2
  32. data/lib/resources/passwd.rb +71 -45
  33. data/lib/resources/service.rb +13 -9
  34. data/lib/resources/shadow.rb +135 -0
  35. data/lib/source_readers/flat.rb +38 -0
  36. data/lib/source_readers/inspec.rb +78 -0
  37. data/lib/utils/base_cli.rb +2 -2
  38. data/lib/utils/parser.rb +1 -1
  39. data/lib/utils/plugin_registry.rb +93 -0
  40. data/test/docker_test.rb +1 -1
  41. data/test/helper.rb +62 -2
  42. data/test/integration/cookbooks/os_prepare/recipes/service.rb +4 -2
  43. data/test/integration/test/integration/default/compare_matcher_spec.rb +11 -0
  44. data/test/integration/test/integration/default/service_spec.rb +16 -1
  45. data/test/unit/fetchers.rb +61 -0
  46. data/test/unit/fetchers/local_test.rb +67 -0
  47. data/test/unit/fetchers/tar_test.rb +36 -0
  48. data/test/unit/fetchers/url_test.rb +152 -0
  49. data/test/unit/fetchers/zip_test.rb +36 -0
  50. data/test/unit/mock/files/passwd +1 -1
  51. data/test/unit/mock/files/shadow +2 -0
  52. data/test/unit/mock/profiles/complete-profile/libraries/testlib.rb +1 -0
  53. data/test/unit/plugin_test.rb +0 -1
  54. data/test/unit/profile_test.rb +32 -53
  55. data/test/unit/resources/passwd_test.rb +69 -14
  56. data/test/unit/resources/shadow_test.rb +67 -0
  57. data/test/unit/source_reader_test.rb +17 -0
  58. data/test/unit/source_readers/flat_test.rb +61 -0
  59. data/test/unit/source_readers/inspec_test.rb +38 -0
  60. data/test/unit/utils/passwd_parser_test.rb +1 -1
  61. metadata +40 -21
  62. data/lib/inspec/targets.rb +0 -10
  63. data/lib/inspec/targets/archive.rb +0 -33
  64. data/lib/inspec/targets/core.rb +0 -56
  65. data/lib/inspec/targets/dir.rb +0 -144
  66. data/lib/inspec/targets/file.rb +0 -33
  67. data/lib/inspec/targets/folder.rb +0 -38
  68. data/lib/inspec/targets/tar.rb +0 -61
  69. data/lib/inspec/targets/url.rb +0 -78
  70. data/lib/inspec/targets/zip.rb +0 -55
  71. data/test/unit/targets.rb +0 -132
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5e3b076ffed41d9148eb98065a025a6acb6a9f70
4
- data.tar.gz: eb36dc73cf37bc30a46949943ba7db582ed82417
3
+ metadata.gz: 0e8809fbed2418c889f95bdd22b409fe730ccb92
4
+ data.tar.gz: a21f007a1136db0e5869d8789152a59ef648f462
5
5
  SHA512:
6
- metadata.gz: 09d87d6da242d31586af6d3e39e913223a141d6dbc39474c921636d3169a57bcf1b5029defc1d2f6a8f01c246fe3494846edfe9d00a27381f3aa13f8f335435a
7
- data.tar.gz: d2806a4c8e637a1ec46cf3ed9ea5a40fc8dd32a6e3bb0de63f405d33f4de9a09d3f25faf36932d949b73c7d9ff1d11949e59963f6ab6116402890632facb0227
6
+ metadata.gz: 9a28f59896f7ae9ce9668ec6c6ba03ff78b1437e1d1a10def6bdb9967fc1257f4b8f22395e5174ca4b2271dcf7f27165f302d0dd4f535c04f7351faa7919139a
7
+ data.tar.gz: c4e01382ab5344ce014379172526f770341cb3fab75cb8da24be156f13efba8316fc2a0b055d96e6148e1a1b700e10a04386e387c9da98c726f7ab5e3e234c31
data/CHANGELOG.md CHANGED
@@ -1,7 +1,43 @@
1
1
  # Change Log
2
2
 
3
- ## [0.12.0](https://github.com/chef/inspec/tree/0.12.0) (2016-02-15)
4
- [Full Changelog](https://github.com/chef/inspec/compare/v0.11.0...0.12.0)
3
+ ## [0.14.0](https://github.com/chef/inspec/tree/0.14.0) (2016-02-22)
4
+ [Full Changelog](https://github.com/chef/inspec/compare/v0.13.0...0.14.0)
5
+
6
+ **Fixed bugs:**
7
+
8
+ - force encoding to utf-8 [\#476](https://github.com/chef/inspec/pull/476) ([arlimus](https://github.com/arlimus))
9
+ - bugfix: make sure version is always a string [\#475](https://github.com/chef/inspec/pull/475) ([arlimus](https://github.com/arlimus))
10
+ - bugfix: handle edge-cases in upstart service [\#474](https://github.com/chef/inspec/pull/474) ([arlimus](https://github.com/arlimus))
11
+ - replace targets with fetcher+reader system [\#473](https://github.com/chef/inspec/pull/473) ([arlimus](https://github.com/arlimus))
12
+
13
+ ## [v0.13.0](https://github.com/chef/inspec/tree/v0.13.0) (2016-02-19)
14
+ [Full Changelog](https://github.com/chef/inspec/compare/v0.12.0...v0.13.0)
15
+
16
+ **Implemented enhancements:**
17
+
18
+ - add shadow resource for /etc/shadow [\#471](https://github.com/chef/inspec/pull/471) ([arlimus](https://github.com/arlimus))
19
+ - improve url handling [\#470](https://github.com/chef/inspec/pull/470) ([chris-rock](https://github.com/chris-rock))
20
+ - add filters to passwd resource + deprecate old accessors [\#467](https://github.com/chef/inspec/pull/467) ([arlimus](https://github.com/arlimus))
21
+ - cmp for single-entry arrays; add cmp docs [\#466](https://github.com/chef/inspec/pull/466) ([arlimus](https://github.com/arlimus))
22
+
23
+ **Fixed bugs:**
24
+
25
+ - Windows 2008 Still not detected correctly [\#453](https://github.com/chef/inspec/issues/453)
26
+ - Service-related docs, bugs, integration tests [\#463](https://github.com/chef/inspec/pull/463) ([srenatus](https://github.com/srenatus))
27
+ - fix url target resolution with zip and tar [\#462](https://github.com/chef/inspec/pull/462) ([arlimus](https://github.com/arlimus))
28
+ - ensure permissions of inspec-compliance config.json on store [\#461](https://github.com/chef/inspec/pull/461) ([srenatus](https://github.com/srenatus))
29
+
30
+ **Closed issues:**
31
+
32
+ - No way to reload the add resources from test code [\#459](https://github.com/chef/inspec/issues/459)
33
+ - add documentation for new server runlevel support [\#456](https://github.com/chef/inspec/issues/456)
34
+
35
+ **Merged pull requests:**
36
+
37
+ - 0.13.0 [\#472](https://github.com/chef/inspec/pull/472) ([chris-rock](https://github.com/chris-rock))
38
+
39
+ ## [v0.12.0](https://github.com/chef/inspec/tree/v0.12.0) (2016-02-15)
40
+ [Full Changelog](https://github.com/chef/inspec/compare/v0.11.0...v0.12.0)
5
41
 
6
42
  **Implemented enhancements:**
7
43
 
@@ -17,6 +53,7 @@
17
53
 
18
54
  **Merged pull requests:**
19
55
 
56
+ - 0.12.0 [\#457](https://github.com/chef/inspec/pull/457) ([arlimus](https://github.com/arlimus))
20
57
  - rework target to resolver connection [\#447](https://github.com/chef/inspec/pull/447) ([arlimus](https://github.com/arlimus))
21
58
  - separate directory resolver from target resolver [\#446](https://github.com/chef/inspec/pull/446) ([arlimus](https://github.com/arlimus))
22
59
 
data/bin/inspec CHANGED
@@ -20,12 +20,12 @@ class Inspec::InspecCLI < Inspec::BaseCLI # rubocop:disable Metrics/ClassLength
20
20
  desc: 'Attach a profile ID to all test results'
21
21
  option :output, aliases: :o, type: :string,
22
22
  desc: 'Save the created profile to a path'
23
- def json(path)
23
+ def json(target)
24
24
  diagnose
25
25
  o = opts.dup
26
26
  o[:ignore_supports] = true
27
27
 
28
- profile = Inspec::Profile.from_path(path, o)
28
+ profile = Inspec::Profile.for_target(target, o)
29
29
  dst = o[:output].to_s
30
30
  if dst.empty?
31
31
  puts JSON.pretty_generate(profile.info)
@@ -49,7 +49,7 @@ class Inspec::InspecCLI < Inspec::BaseCLI # rubocop:disable Metrics/ClassLength
49
49
  o[:ignore_supports] = true # we check for integrity only
50
50
 
51
51
  # run check
52
- profile = Inspec::Profile.from_path(path, o)
52
+ profile = Inspec::Profile.for_target(path, o)
53
53
  result = profile.check
54
54
 
55
55
  if opts['format'] == 'json'
@@ -88,7 +88,7 @@ class Inspec::InspecCLI < Inspec::BaseCLI # rubocop:disable Metrics/ClassLength
88
88
  o[:logger] = Logger.new(STDOUT)
89
89
  o[:logger].level = get_log_level(o.log_level)
90
90
 
91
- profile = Inspec::Profile.from_path(path, o)
91
+ profile = Inspec::Profile.for_target(path, o)
92
92
  result = profile.check
93
93
 
94
94
  if result && !opts[:ignore_errors] == false
@@ -105,9 +105,9 @@ class Inspec::InspecCLI < Inspec::BaseCLI # rubocop:disable Metrics/ClassLength
105
105
  desc: 'Attach a profile ID to all test results'
106
106
  target_options
107
107
  option :format, type: :string
108
- def exec(*tests)
108
+ def exec(*targets)
109
109
  diagnose
110
- run_tests(opts, tests)
110
+ run_tests(targets, opts)
111
111
  end
112
112
 
113
113
  desc 'detect', 'detect the target OS'
@@ -115,11 +115,13 @@ class Inspec::InspecCLI < Inspec::BaseCLI # rubocop:disable Metrics/ClassLength
115
115
  def detect
116
116
  diagnose
117
117
 
118
- runner = Inspec::Runner.new(opts)
119
118
  rel = File.join(File.dirname(__FILE__), *%w{.. lib utils detect.rb})
120
119
  detect_util = File.expand_path(rel)
121
- runner.add_tests([detect_util])
122
- runner.run
120
+ # exits on execution:
121
+ runner = Inspec::Runner.new(opts)
122
+ profile = Inspec::Profile.for_target(detect_util, opts)
123
+ runner.add_profile(profile)
124
+ exit runner.run
123
125
  rescue RuntimeError => e
124
126
  puts e.message
125
127
  end
data/docs/matchers.rst ADDED
@@ -0,0 +1,129 @@
1
+ =====================================================
2
+ InSpec Matchers Reference
3
+ =====================================================
4
+
5
+
6
+ Inspec uses matchers to help compare resource values to expectations. The following matchers are available:
7
+
8
+ * `be`
9
+ * `cmp`
10
+ * `eq`
11
+ * `include`
12
+ * `match`
13
+
14
+
15
+ be
16
+ =====================================================
17
+
18
+ This matcher can be followed by many different comparison operators. Always make sure to use numbers, not strings, for these comparisons.
19
+
20
+ .. code-block:: ruby
21
+
22
+ describe file('/proc/cpuinfo') do
23
+ its('size') { should be >= 10 }
24
+ its('size') { should be < 1000 }
25
+ end
26
+
27
+ cmp
28
+ =====================================================
29
+
30
+ Unlike ``eq``, cmp is a matcher for less-restrictive comparisons. It will try to fit the actual value to the type you are comparing it to. This is meant to relieve the user from having to write type-casts and resolutions.
31
+
32
+ .. code-block:: ruby
33
+
34
+ describe sshd_config do
35
+ its('Protocol') { should cmp 2 }
36
+ end
37
+
38
+ describe passwd.uid(0) do
39
+ its('users') { should cmp 'root' }
40
+ end
41
+
42
+ ``cmp`` behaves in the following way:
43
+
44
+ * Compare strings to numbers
45
+
46
+ .. code-block:: ruby
47
+
48
+ describe sshd_config do
49
+ its('Protocol') { should eq '2' }
50
+
51
+ its('Protocol') { should cmp '2' }
52
+ its('Protocol') { should cmp 2 }
53
+ end
54
+
55
+ * String comparisons are not case-sensitive
56
+
57
+ .. code-block:: ruby
58
+
59
+ describe auditd_conf do
60
+ its('log_format') { should cmp 'raw' }
61
+ its('log_format') { should cmp 'RAW' }
62
+ end
63
+
64
+ * Compare arrays with only one entry to a value
65
+
66
+ .. code-block:: ruby
67
+
68
+ describe passwd.uids(0) do
69
+ its('users') { should cmp 'root' }
70
+ its('users') { should cmp ['root'] }
71
+ end
72
+
73
+ * Improved printing of octal comparisons
74
+
75
+ .. code-block:: ruby
76
+
77
+ describe file('/proc/cpuinfo') do
78
+ its('mode') { should cmp '0345' }
79
+ end
80
+
81
+ expected: 0345
82
+ got: 0444
83
+
84
+ eq
85
+ =====================================================
86
+
87
+ Test for exact equality of two values.
88
+
89
+ .. code-block:: ruby
90
+
91
+ describe sshd_config do
92
+ its('RSAAuthentication') { should_not eq 'no' }
93
+ its('Protocol') { should eq '2' }
94
+ end
95
+
96
+ It fails if types don't match. Please keep this in mind, when comparing configuration
97
+ entries that are numbers:
98
+
99
+ .. code-block:: ruby
100
+
101
+ its('Port') { should eq '22' } # ok
102
+
103
+ its('Port') { should eq 22 }
104
+ # fails: '2' != 2 (string vs int)
105
+
106
+ For less restrictive comparisons, please use ``cmp``.
107
+
108
+ include
109
+ =====================================================
110
+
111
+ Verifies if a value is included in a list.
112
+
113
+ .. code-block:: ruby
114
+
115
+ describe passwd do
116
+ its('users') { should include 'my_user' }
117
+ end
118
+
119
+
120
+ match
121
+ =====================================================
122
+
123
+ Check if a string matches a regular expression.
124
+
125
+ .. code-block:: ruby
126
+
127
+ describe sshd_config do
128
+ its('Ciphers') { should_not match /cbc/ }
129
+ end
data/docs/resources.rst CHANGED
@@ -3102,19 +3102,22 @@ A ``passwd`` |inspec resource| block declares one (or more) users and associated
3102
3102
  .. code-block:: ruby
3103
3103
 
3104
3104
  describe passwd do
3105
- its('matcher') { should eq 0 }
3105
+ its(:users) { should_not include 'forbidden_user' }
3106
3106
  end
3107
3107
 
3108
- describe passwd.uid(filter) do
3109
- its(:username) { should eq 'root' }
3108
+ describe passwd.uid(0) do
3109
+ its(:users) { should cmp 'root' }
3110
3110
  its(:count) { should eq 1 }
3111
3111
  end
3112
3112
 
3113
3113
  where
3114
3114
 
3115
- * ``gids``, ``passwords``, ``uids``, and ``usernames`` are valid matchers for ``passwd``
3116
- * ``filter`` is a filter for a specific uid
3117
- * ``count``, ``uid``, ``username`` are valid matchers for ``passwd.uid(userid)``
3115
+ * ``users``, ``uids``, ``gids``, ``passwords``, ``homes``, and ``shells`` are valid accessors for ``passwd``
3116
+ * All of these matchers can be given an argument to filter by, for example: ``passwd.users(/name/)``
3117
+ * There is an explicit method to filter by (``filter``) which can take multiple arguments at once
3118
+ * ``count`` retrieves the number of entries
3119
+ * ``lines`` provides raw passwd lines
3120
+ * ``params`` returns an array of maps for all entries
3118
3121
 
3119
3122
 
3120
3123
  Matchers for ``passwd``
@@ -3127,7 +3130,8 @@ The ``gids`` matcher tests if the group indentifiers in the test match group ide
3127
3130
 
3128
3131
  .. code-block:: ruby
3129
3132
 
3130
- its('gids') { should eq 1234 }
3133
+ its('gids') { should include 1234 }
3134
+ its('gids') { should cmp 0 }
3131
3135
 
3132
3136
  passwords
3133
3137
  +++++++++++++++++++++++++++++++++++++++++++++++++++++
@@ -3141,7 +3145,8 @@ For example:
3141
3145
 
3142
3146
  .. code-block:: ruby
3143
3147
 
3144
- its('passwords') { should eq 'x' }
3148
+ its('passwords') { should eq ['x'] }
3149
+ its('passwords') { should cmp '*' }
3145
3150
 
3146
3151
  uids
3147
3152
  +++++++++++++++++++++++++++++++++++++++++++++++++++++
@@ -3151,42 +3156,25 @@ The ``uids`` matcher tests if the user indentifiers in the test match user ident
3151
3156
 
3152
3157
  its('uids') { should eq ['1234', '1235'] }
3153
3158
 
3154
- usernames
3159
+ users
3155
3160
  +++++++++++++++++++++++++++++++++++++++++++++++++++++
3156
- The ``usernames`` matcher tests if the usernames in the test match usernames in ``/etc/passwd``:
3161
+ The ``users`` matcher tests if the usernames in the test match usernames in ``/etc/passwd``:
3157
3162
 
3158
3163
  .. code-block:: ruby
3159
3164
 
3160
- its('usernames') { should eq ['root', 'www-data'] }
3161
-
3165
+ its('users') { should_not include 'www-data' }
3162
3166
 
3163
- Matchers for ``passwd.uid(userid)``
3164
- -----------------------------------------------------
3165
- This InSpec audit resource has the following matchers.
3166
3167
 
3167
3168
  count
3168
3169
  +++++++++++++++++++++++++++++++++++++++++++++++++++++
3169
- The ``count`` matcher tests the number of times the named user appears in ``/etc/passwd``:
3170
-
3171
- .. code-block:: ruby
3172
-
3173
- its('count') { should eq 1 }
3174
-
3175
- uid
3176
- +++++++++++++++++++++++++++++++++++++++++++++++++++++
3177
- The ``uid`` matcher tests if the user identifier in the test matches a user identifier in ``/etc/passwd``:
3170
+ The ``count`` matcher tests the number of entries in ``/etc/passwd``. It becomes especially useful in conjunction combination with filters:
3178
3171
 
3179
3172
  .. code-block:: ruby
3180
3173
 
3181
- its('uid') { should eq 1234 }
3182
-
3183
- username
3184
- +++++++++++++++++++++++++++++++++++++++++++++++++++++
3185
- The ``username`` matcher tests if the user name in the test matches a user name in ``/etc/passwd``:
3186
-
3187
- .. code-block:: ruby
3174
+ describe passwd.users('highlander') do
3175
+ its('count') { should eq 1 }
3176
+ end
3188
3177
 
3189
- its('username') { should eq 'root' }
3190
3178
 
3191
3179
  Examples
3192
3180
  -----------------------------------------------------
@@ -3197,7 +3185,7 @@ The following examples show how to use this InSpec audit resource.
3197
3185
  .. code-block:: ruby
3198
3186
 
3199
3187
  describe passwd do
3200
- its('usernames') { should eq ['root', 'www-data'] }
3188
+ its('users') { should eq ['root', 'www-data'] }
3201
3189
  its('uids') { should eq [0, 33] }
3202
3190
  end
3203
3191
 
@@ -3205,13 +3193,13 @@ The following examples show how to use this InSpec audit resource.
3205
3193
 
3206
3194
  .. code-block:: ruby
3207
3195
 
3208
- describe passwd.uid(0) do
3209
- its('username') { should eq 'root' }
3196
+ describe passwd.uids(0) do
3197
+ its('users') { should cmp 'root' }
3210
3198
  its('count') { should eq 1 }
3211
3199
  end
3212
3200
 
3213
- describe passwd.uid(33) do
3214
- its('username') { should eq 'www-data' }
3201
+ describe passwd.filter(user: 'www-data') do
3202
+ its('uids') { should cmp 33 }
3215
3203
  its('count') { should eq 1 }
3216
3204
  end
3217
3205
 
@@ -3875,6 +3863,45 @@ The following examples show how to use this InSpec audit resource.
3875
3863
  end
3876
3864
 
3877
3865
 
3866
+ **Test the runlevels for Sys-V services**
3867
+
3868
+ On targets using Sys-V services, the existing runlevels can also be checked:
3869
+
3870
+ .. code-block:: ruby
3871
+
3872
+ describe service('sshd').runlevels do
3873
+ its('keys') { should include(2) }
3874
+ end
3875
+
3876
+ describe service('sshd').runlevels(2,4) do
3877
+ it { should be_enabled }
3878
+ end
3879
+
3880
+ **Override the service manager**
3881
+
3882
+ Under some circumstances, it may be required to override the logic in place to select the right service manager. For example, if you want to check a service managed by Upstart, you can explicitly do so:
3883
+
3884
+ .. code-block:: ruby
3885
+
3886
+ describe upstart_service('service') do
3887
+ it { should_not be_enabled }
3888
+ it { should be_installed }
3889
+ it { should be_running }
3890
+ end
3891
+
3892
+ This is also possible with `systemd_service`, `runit_service`, `sysv_service`, `bsd_service`, and `launchd_service`.
3893
+ You can also provide the control command, for when it is not to be found at the default location.
3894
+ For example, if your `sv` command for services managed by Runit is not in PATH:
3895
+
3896
+ .. code-block:: ruby
3897
+
3898
+ describe runit_service('service', '/opt/chef/embedded/sbin/sv') do
3899
+ it { should be_enabled }
3900
+ it { should be_installed }
3901
+ it { should be_running }
3902
+ end
3903
+
3904
+
3878
3905
  ssh_config
3879
3906
  =====================================================
3880
3907
  Use the ``ssh_config`` |inspec resource| to test |openssh| |ssh| client configuration data located at ``/etc/ssh/ssh_config`` on |linux| and |unix| platforms.
data/inspec.gemspec CHANGED
@@ -24,7 +24,7 @@ Gem::Specification.new do |spec|
24
24
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
25
25
  spec.require_paths = ['lib']
26
26
 
27
- spec.add_dependency 'r-train', '~> 0.9', '>= 0.9.6'
27
+ spec.add_dependency 'r-train', '~> 0.10'
28
28
  spec.add_dependency 'thor', '~> 0.19'
29
29
  spec.add_dependency 'json', '~> 1.8'
30
30
  spec.add_dependency 'rainbow', '~> 2'
@@ -47,7 +47,7 @@ module Compliance
47
47
 
48
48
  # execute profile from inspec exec implementation
49
49
  diagnose
50
- run_tests(opts, tests)
50
+ run_tests(tests, opts)
51
51
  end
52
52
 
53
53
  desc 'upload PATH', 'uploads a local profile to Chef Compliance'
@@ -40,6 +40,7 @@ module Compliance
40
40
  # stores a hash to json
41
41
  def store
42
42
  File.open(@config_file, 'w') do |f|
43
+ f.chmod(0600)
43
44
  f.write(@config.to_json)
44
45
  end
45
46
  end