conjur-cli 4.16.0 → 4.17.0
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 +6 -0
- data/conjur.gemspec +1 -1
- data/lib/conjur/command.rb +1 -1
- data/lib/conjur/command/env.rb +10 -7
- data/lib/conjur/config.rb +19 -1
- data/lib/conjur/conjurenv.rb +25 -13
- data/lib/conjur/version.rb +1 -1
- data/spec/command/env_spec.rb +16 -0
- data/spec/command_spec.rb +20 -0
- data/spec/config_spec.rb +3 -0
- data/spec/env_spec.rb +22 -0
- metadata +7 -9
- data/spec/audit/follower_spec.rb +0 -5
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 432110704aeb067fe4daed4e19defb8bcfce73ba
|
|
4
|
+
data.tar.gz: e515bff89602f42ec641655ff89724f8ce0402c8
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: f79560aa69622e389202e12ce79d328e5d61d055dfea15660503c5684de9b9a031843d8a219f1b68e563db8fa53a7456e745cdcc5d29cf46dc23c747c767f7b3
|
|
7
|
+
data.tar.gz: 6d0045244faab16cd1bd009ac9b1252a6d1ef950aec5bfa266531189d7109513250da60014a4037e89fbf63477ffdc02994e68f42c80888f759493e9b383dd70
|
data/CHANGELOG.md
CHANGED
data/conjur.gemspec
CHANGED
|
@@ -28,7 +28,7 @@ Gem::Specification.new do |gem|
|
|
|
28
28
|
|
|
29
29
|
gem.add_development_dependency 'rspec', '~> 3.0'
|
|
30
30
|
gem.add_development_dependency 'simplecov'
|
|
31
|
-
gem.add_development_dependency 'aruba'
|
|
31
|
+
gem.add_development_dependency 'aruba', '~> 0.6.1'
|
|
32
32
|
gem.add_development_dependency 'ci_reporter_rspec', '~> 1.0'
|
|
33
33
|
gem.add_development_dependency 'ci_reporter_cucumber'
|
|
34
34
|
gem.add_development_dependency 'rake', '~> 10.0'
|
data/lib/conjur/command.rb
CHANGED
|
@@ -104,7 +104,7 @@ module Conjur
|
|
|
104
104
|
obj.resource.attributes['permissions'].each do |p|
|
|
105
105
|
role = api.role(p['role'])
|
|
106
106
|
privilege = p['privilege']
|
|
107
|
-
next if role.roleid == obj.roleid && privilege == 'read'
|
|
107
|
+
next if obj.respond_to?(:roleid) && role.roleid == obj.roleid && privilege == 'read'
|
|
108
108
|
puts "Denying #{privilege} privilege to #{role.roleid}"
|
|
109
109
|
obj.resource.deny(privilege, role)
|
|
110
110
|
end
|
data/lib/conjur/command/env.rb
CHANGED
|
@@ -35,6 +35,9 @@ class Conjur::Command::Env < Conjur::Command
|
|
|
35
35
|
|
|
36
36
|
c.desc "Environment configuration as inline yaml"
|
|
37
37
|
c.flag ["yaml"]
|
|
38
|
+
|
|
39
|
+
c.desc "Policy id to substitute for $policy in the YAML values"
|
|
40
|
+
c.flag ["policy"]
|
|
38
41
|
end
|
|
39
42
|
|
|
40
43
|
def self.get_env_object options
|
|
@@ -42,12 +45,13 @@ class Conjur::Command::Env < Conjur::Command
|
|
|
42
45
|
exit_now! "Options -c and --yaml can not be provided together"
|
|
43
46
|
end
|
|
44
47
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
48
|
+
env_options = if options[:yaml]
|
|
49
|
+
{ yaml: options[:yaml]}
|
|
50
|
+
else
|
|
51
|
+
{ file: (options[:c]||'.conjurenv') }
|
|
52
|
+
end
|
|
53
|
+
env_options[:substitutions] = { "$policy" => options[:policy] } if options[:policy]
|
|
54
|
+
Conjur::Env.new env_options
|
|
51
55
|
end
|
|
52
56
|
|
|
53
57
|
command :env do |env|
|
|
@@ -132,7 +136,6 @@ TEMPLATEDESC
|
|
|
132
136
|
conjurenv = env.obtain(api) # needed for binding
|
|
133
137
|
rendered = ERB.new(template).result(binding)
|
|
134
138
|
|
|
135
|
-
#
|
|
136
139
|
tempfile = if File.directory?("/dev/shm") and File.writable?("/dev/shm")
|
|
137
140
|
Tempfile.new("conjur","/dev/shm")
|
|
138
141
|
else
|
data/lib/conjur/config.rb
CHANGED
|
@@ -52,6 +52,7 @@ module Conjur
|
|
|
52
52
|
def load(config_files = default_config_files)
|
|
53
53
|
require 'yaml'
|
|
54
54
|
require 'conjur/log'
|
|
55
|
+
|
|
55
56
|
config_files.each do |f|
|
|
56
57
|
if File.file?(f)
|
|
57
58
|
if Conjur.log
|
|
@@ -66,8 +67,10 @@ module Conjur
|
|
|
66
67
|
end
|
|
67
68
|
end
|
|
68
69
|
|
|
70
|
+
|
|
69
71
|
def apply
|
|
70
72
|
require 'conjur/configuration'
|
|
73
|
+
|
|
71
74
|
keys = Config.keys.dup
|
|
72
75
|
keys.delete(:plugins)
|
|
73
76
|
|
|
@@ -88,7 +91,10 @@ module Conjur
|
|
|
88
91
|
require 'conjur/api'
|
|
89
92
|
Conjur.log << "Using authn host #{Conjur::Authn::API.host}\n"
|
|
90
93
|
rescue RuntimeError
|
|
91
|
-
|
|
94
|
+
if $!.message == "Missing required option account"
|
|
95
|
+
$stderr.puts "Your config is invalid, did you run 'conjur init'?"
|
|
96
|
+
end
|
|
97
|
+
raise $!
|
|
92
98
|
end
|
|
93
99
|
end
|
|
94
100
|
if Config[:cert_file]
|
|
@@ -121,6 +127,18 @@ module Conjur
|
|
|
121
127
|
def [](key)
|
|
122
128
|
@@attributes[key.to_s]
|
|
123
129
|
end
|
|
130
|
+
|
|
131
|
+
def member? key
|
|
132
|
+
@@attributes.member?(key) || @@attributes.member?(alternate_key(key))
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
def alternate_key key
|
|
136
|
+
case key
|
|
137
|
+
when String then key.to_sym
|
|
138
|
+
when Symbol then key.to_s
|
|
139
|
+
else key
|
|
140
|
+
end
|
|
141
|
+
end
|
|
124
142
|
end
|
|
125
143
|
end
|
|
126
144
|
end
|
data/lib/conjur/conjurenv.rb
CHANGED
|
@@ -29,6 +29,9 @@ module Conjur
|
|
|
29
29
|
raise "#{self.class.name.split('::').last} requires a parameter" if id.to_s.empty?
|
|
30
30
|
@id=id
|
|
31
31
|
end
|
|
32
|
+
def gsub! pattern, replace
|
|
33
|
+
@id.gsub! pattern, replace
|
|
34
|
+
end
|
|
32
35
|
def init_with(coder)
|
|
33
36
|
initialize(coder.scalar)
|
|
34
37
|
end
|
|
@@ -61,21 +64,22 @@ module Conjur
|
|
|
61
64
|
raise ":file and :yaml options can not be provided together" if ( options.has_key?(:file) and options.has_key?(:yaml) )
|
|
62
65
|
|
|
63
66
|
yaml = if options.has_key?(:yaml)
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
67
|
+
raise ":yaml option should be non-empty string" unless options[:yaml].kind_of?(String)
|
|
68
|
+
raise ":yaml option should be non-empty string" if options[:yaml].empty?
|
|
69
|
+
options[:yaml]
|
|
70
|
+
elsif options.has_key?(:file)
|
|
71
|
+
raise ":file option should be non-empty string" unless options[:file].kind_of?(String)
|
|
72
|
+
raise ":file option should be non-empty string" if options[:file].empty?
|
|
73
|
+
File.read(options[:file])
|
|
74
|
+
else
|
|
75
|
+
raise "either :file or :yaml option is mandatory"
|
|
76
|
+
end
|
|
77
|
+
parse_arguments = [ yaml ]
|
|
78
|
+
parse_arguments << options[:substitutions] if options[:substitutions]
|
|
79
|
+
@definition = parse(*parse_arguments)
|
|
76
80
|
end
|
|
77
81
|
|
|
78
|
-
def parse(yaml)
|
|
82
|
+
def parse(yaml, substitutions = {})
|
|
79
83
|
YAML.add_tag("!var", ConjurVariable)
|
|
80
84
|
YAML.add_tag("!tmp", ConjurTempfile)
|
|
81
85
|
definition = YAML.load(yaml)
|
|
@@ -84,6 +88,14 @@ module Conjur
|
|
|
84
88
|
definition.keys.select { |k| definition[k].kind_of? Fixnum }.each { |k| definition[k]="#{definition[k]}" }
|
|
85
89
|
bad_types = definition.values.select { |v| not (v.kind_of?(String) or v.kind_of?(CustomTag)) }.map {|v| v.class}.uniq
|
|
86
90
|
raise "Definition can not include values of types: #{bad_types}" unless bad_types.empty?
|
|
91
|
+
definition.inject({}) do |memo,e|
|
|
92
|
+
key, value = e
|
|
93
|
+
substitutions.each do |k,v|
|
|
94
|
+
value.gsub! k, v
|
|
95
|
+
end
|
|
96
|
+
memo[key] = value
|
|
97
|
+
memo
|
|
98
|
+
end
|
|
87
99
|
definition
|
|
88
100
|
end
|
|
89
101
|
|
data/lib/conjur/version.rb
CHANGED
data/spec/command/env_spec.rb
CHANGED
|
@@ -38,11 +38,25 @@ shared_examples_for "processes environment definition" do |cmd, options|
|
|
|
38
38
|
end
|
|
39
39
|
end
|
|
40
40
|
|
|
41
|
+
shared_examples_for "accepts policy option" do |cmd, options|
|
|
42
|
+
before { # suspend all interaction with the environment
|
|
43
|
+
allow(Kernel).to receive(:system).and_return(true)
|
|
44
|
+
}
|
|
45
|
+
let(:stub_object) { double(obtain:{}, check:{}) }
|
|
46
|
+
describe_command "env:#{cmd} --policy foobar #{options}" do
|
|
47
|
+
it "uses .conjurenv file by default" do
|
|
48
|
+
expect(Conjur::Env).to receive(:new).with(file:".conjurenv", substitutions: { "$policy" => "foobar" }).and_return(stub_object)
|
|
49
|
+
invoke
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
41
54
|
describe Conjur::Command::Env, logged_in: true do
|
|
42
55
|
|
|
43
56
|
let(:stub_env) { double() }
|
|
44
57
|
describe ":check" do
|
|
45
58
|
it_behaves_like "processes environment definition", "check", ''
|
|
59
|
+
it_behaves_like "accepts policy option", "check", ''
|
|
46
60
|
|
|
47
61
|
describe_command "env:check" do
|
|
48
62
|
before { expect(Conjur::Env).to receive(:new).and_return(stub_env) }
|
|
@@ -81,6 +95,7 @@ describe Conjur::Command::Env, logged_in: true do
|
|
|
81
95
|
|
|
82
96
|
describe ":run" do
|
|
83
97
|
it_behaves_like "processes environment definition", "run","-- extcmd"
|
|
98
|
+
it_behaves_like "accepts policy option", "run", '-- extcmd'
|
|
84
99
|
describe_command "env:run" do
|
|
85
100
|
it 'fails because of missing argument' do
|
|
86
101
|
expect(Kernel).not_to receive(:system)
|
|
@@ -119,6 +134,7 @@ describe Conjur::Command::Env, logged_in: true do
|
|
|
119
134
|
allow(FileUtils).to receive(:copy).and_return(true)
|
|
120
135
|
}
|
|
121
136
|
it_behaves_like "processes environment definition", "template","config.erb"
|
|
137
|
+
it_behaves_like "accepts policy option", "template", 'config.erb'
|
|
122
138
|
end
|
|
123
139
|
describe_command "env:template" do
|
|
124
140
|
it 'fails because of missing argument' do
|
data/spec/command_spec.rb
CHANGED
|
@@ -57,4 +57,24 @@ describe Conjur::Command do
|
|
|
57
57
|
end
|
|
58
58
|
end
|
|
59
59
|
end
|
|
60
|
+
|
|
61
|
+
describe "supports asset retirement" do
|
|
62
|
+
let(:role){ double('Role', roleid: 'the-role-id')}
|
|
63
|
+
let(:permission){ { 'role' => 'the-role-id', 'privilege' => 'read' } }
|
|
64
|
+
let(:permissions){ [ permission ] }
|
|
65
|
+
let(:resource){ double('Resource', deny: nil, attributes: {'permissions' => permissions}) }
|
|
66
|
+
let(:resources){ [resource] }
|
|
67
|
+
let(:api){ double('API') }
|
|
68
|
+
let(:asset){ double('Asset', resources: resources, resource: resource) }
|
|
69
|
+
describe "#retire_resource" do
|
|
70
|
+
context "when given an object without a role" do
|
|
71
|
+
it 'works' do
|
|
72
|
+
expect(described_class).to receive(:api).and_return api
|
|
73
|
+
expect(api).to receive(:role).with('the-role-id').and_return role
|
|
74
|
+
described_class.retire_resource(asset)
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
|
|
60
80
|
end
|
data/spec/config_spec.rb
CHANGED
data/spec/env_spec.rb
CHANGED
|
@@ -78,7 +78,29 @@ describe Conjur::Env do
|
|
|
78
78
|
expect(result.keys.sort).to eq(["a","b","c"])
|
|
79
79
|
expect(result["a"]).to eq('literal')
|
|
80
80
|
expect(result["b"]).to be_a_kind_of(Conjur::Env::ConjurTempfile)
|
|
81
|
+
expect(result["b"].conjur_id).to eq('sometmp')
|
|
81
82
|
expect(result["c"]).to be_a_kind_of(Conjur::Env::ConjurVariable)
|
|
83
|
+
expect(result["c"].conjur_id).to eq('somevar')
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
it "Accepts empty string substitution" do
|
|
87
|
+
substitutions = {
|
|
88
|
+
}
|
|
89
|
+
result = Conjur::Env.new(yaml: "{a: $foo, b: !tmp '$foo$foo$bar', c: !var '$foo$bar'}", substitutions: substitutions).instance_variable_get("@definition")
|
|
90
|
+
expect(result["a"]).to eq('$foo')
|
|
91
|
+
expect(result["b"].conjur_id).to eq('$foo$foo$bar')
|
|
92
|
+
expect(result["c"].conjur_id).to eq('$foo$bar')
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
it "Performs requested string substitution" do
|
|
96
|
+
substitutions = {
|
|
97
|
+
"$foo" => "alice",
|
|
98
|
+
"$bar" => "bob"
|
|
99
|
+
}
|
|
100
|
+
result = Conjur::Env.new(yaml: "{a: $foo, b: !tmp '$foo$foo$bar', c: !var '$foo$bar'}", substitutions: substitutions).instance_variable_get("@definition")
|
|
101
|
+
expect(result["a"]).to eq('alice')
|
|
102
|
+
expect(result["b"].conjur_id).to eq('alicealicebob')
|
|
103
|
+
expect(result["c"].conjur_id).to eq('alicebob')
|
|
82
104
|
end
|
|
83
105
|
|
|
84
106
|
it "Converts numbers to string literals" do
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: conjur-cli
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 4.
|
|
4
|
+
version: 4.17.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Rafał Rzepecki
|
|
@@ -9,7 +9,7 @@ authors:
|
|
|
9
9
|
autorequire:
|
|
10
10
|
bindir: bin
|
|
11
11
|
cert_chain: []
|
|
12
|
-
date: 2014-10-
|
|
12
|
+
date: 2014-10-28 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
|
14
14
|
- !ruby/object:Gem::Dependency
|
|
15
15
|
name: activesupport
|
|
@@ -155,16 +155,16 @@ dependencies:
|
|
|
155
155
|
name: aruba
|
|
156
156
|
requirement: !ruby/object:Gem::Requirement
|
|
157
157
|
requirements:
|
|
158
|
-
- -
|
|
158
|
+
- - ~>
|
|
159
159
|
- !ruby/object:Gem::Version
|
|
160
|
-
version:
|
|
160
|
+
version: 0.6.1
|
|
161
161
|
type: :development
|
|
162
162
|
prerelease: false
|
|
163
163
|
version_requirements: !ruby/object:Gem::Requirement
|
|
164
164
|
requirements:
|
|
165
|
-
- -
|
|
165
|
+
- - ~>
|
|
166
166
|
- !ruby/object:Gem::Version
|
|
167
|
-
version:
|
|
167
|
+
version: 0.6.1
|
|
168
168
|
- !ruby/object:Gem::Dependency
|
|
169
169
|
name: ci_reporter_rspec
|
|
170
170
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -294,7 +294,6 @@ files:
|
|
|
294
294
|
- lib/conjur/identifier_manipulation.rb
|
|
295
295
|
- lib/conjur/version.rb
|
|
296
296
|
- profile.rb
|
|
297
|
-
- spec/audit/follower_spec.rb
|
|
298
297
|
- spec/authn_spec.rb
|
|
299
298
|
- spec/command/assets_spec.rb
|
|
300
299
|
- spec/command/audit_spec.rb
|
|
@@ -336,7 +335,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
336
335
|
version: '0'
|
|
337
336
|
requirements: []
|
|
338
337
|
rubyforge_project:
|
|
339
|
-
rubygems_version: 2.
|
|
338
|
+
rubygems_version: 2.0.14
|
|
340
339
|
signing_key:
|
|
341
340
|
specification_version: 4
|
|
342
341
|
summary: Conjur command line interface
|
|
@@ -352,7 +351,6 @@ test_files:
|
|
|
352
351
|
- features/step_definitions/dsl_steps.rb
|
|
353
352
|
- features/support/env.rb
|
|
354
353
|
- features/support/hooks.rb
|
|
355
|
-
- spec/audit/follower_spec.rb
|
|
356
354
|
- spec/authn_spec.rb
|
|
357
355
|
- spec/command/assets_spec.rb
|
|
358
356
|
- spec/command/audit_spec.rb
|