Skip to content

Commit df3cfda

Browse files
committed
Fix shell_escape of unless command
A bug was introduced in 74ea1de . It resulted in an error: ``` Error: /Stage[main]/Java::Config/Exec[create-java-alternatives]: Could not evaluate: Could not find command 'alternatives\' ``` The effective exec was: ```puppet exec{'create-java-alternatives': path => '/usr/bin:/usr/sbin:/bin:/sbi command => ['alternatives', '--install', '/usr/bin/java', 'java', $java::use_java_alternative_path, '20000'], unless => shell_escape("alternatives --display java | grep -q $java::use_java_alternative_path}"), } ``` This errors since the spaces inside the `shell_escape` are also escaped to `\ `. This patch only shell_escapes the external supplied string `java::java_alternative_path` which was I expect the object the exercise. Configuration to trigger the bug, but it should not be hard. ``` class{'java': distribution => 'jdk', java_alternative => '/usr/lib/jvm/java-11-openjdk/bin/java', java_alternative_path => '/usr/lib/jvm/java-11-openjdk/bin/java', java_home => '/usr/lib/jvm/java-11-openjdk/', package => 'java-11-openjdk-devel', version => 'present', } ```
1 parent 245185b commit df3cfda

File tree

2 files changed

+17
-3
lines changed

2 files changed

+17
-3
lines changed

manifests/config.pp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,12 @@
2626
# For the stanard packages java::params needs these added.
2727
if $java::use_java_package_name != $java::default_package_name {
2828
$command_redhat = ['alternatives', '--install', '/usr/bin/java', 'java', $java::use_java_alternative_path, '20000']
29-
$unless_redhat = "alternatives --display java | grep -q ${java::use_java_alternative_path}"
29+
$unless_redhat = "alternatives --display java | grep -q ${shell_escape($java::use_java_alternative_path)}"
3030

3131
exec { 'create-java-alternatives':
3232
path => '/usr/bin:/usr/sbin:/bin:/sbin',
3333
command => $command_redhat,
34-
unless => shell_escape($unless_redhat),
34+
unless => $unless_redhat,
3535
before => Exec['update-java-alternatives'],
3636
}
3737
}

spec/classes/java_spec.rb

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,10 +36,24 @@
3636
let(:params) { { 'package' => 'jre', 'java_alternative' => '/usr/bin/java', 'java_alternative_path' => '/usr/java/jre1.7.0_67/bin/java' } }
3737

3838
it { is_expected.to contain_package('java').with_name('jre') }
39-
it { is_expected.to contain_exec('create-java-alternatives').with_command(['alternatives', '--install', '/usr/bin/java', 'java', '/usr/java/jre1.7.0_67/bin/java', '20000']) }
39+
it {
40+
is_expected.to contain_exec('create-java-alternatives').with(
41+
{
42+
command: ['alternatives', '--install', '/usr/bin/java', 'java', '/usr/java/jre1.7.0_67/bin/java', '20000'],
43+
unless: 'alternatives --display java | grep -q /usr/java/jre1.7.0_67/bin/java',
44+
},
45+
)
46+
}
4047
it { is_expected.to contain_exec('update-java-alternatives').with_command(['alternatives', '--set', 'java', '/usr/java/jre1.7.0_67/bin/java']) }
4148
end
4249

50+
context 'when select Malicious JRE with alternatives for CentOS 6.3' do
51+
let(:facts) { { os: { family: 'RedHat', name: 'CentOS', release: { full: '6.3' }, architecture: 'x86_64' } } }
52+
let(:params) { { 'package' => 'jre', 'java_alternative' => '/usr/bin/java', 'java_alternative_path' => '/usr/java ; rm -rf /etc' } }
53+
54+
it { is_expected.to contain_exec('create-java-alternatives').with_unless('alternatives --display java | grep -q /usr/java\\ \\;\\ rm\\ -rf\\ /etc') }
55+
end
56+
4357
context 'when select passed value for CentOS 5.3' do
4458
let(:facts) { { os: { family: 'RedHat', name: 'CentOS', release: { full: '5.3' }, architecture: 'x86_64' } } }
4559
let(:params) { { 'package' => 'jdk', 'java_home' => '/usr/local/lib/jre' } }

0 commit comments

Comments
 (0)