Skip to content

Commit e59cec5

Browse files
amunizVlatombe
authored andcommitted
[SECURITY-3079]
(cherry picked from commit ac7bfe4c82fa10529106582fb6ba1e97046db233)
1 parent 1f2c633 commit e59cec5

File tree

2 files changed

+18
-2
lines changed

2 files changed

+18
-2
lines changed

src/main/java/org/csanchez/jenkins/plugins/kubernetes/pipeline/SecretsMasker.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@
4242
import java.util.concurrent.TimeUnit;
4343
import java.util.logging.Level;
4444
import java.util.logging.Logger;
45+
import java.util.regex.Pattern;
46+
4547
import org.csanchez.jenkins.plugins.kubernetes.KubernetesComputer;
4648
import org.csanchez.jenkins.plugins.kubernetes.KubernetesSlave;
4749
import org.csanchez.jenkins.plugins.kubernetes.PodTemplate;
@@ -61,14 +63,19 @@ public final class SecretsMasker extends TaskListenerDecorator {
6163

6264
private final Set<String> values;
6365

66+
private final Pattern pattern;
67+
6468
private SecretsMasker(Set<String> values) {
6569
assert !values.isEmpty();
6670
this.values = values;
71+
// stored at creation time so SecretPatternFactory extensions are properly loaded
72+
// when/if this decorator runs at agent side (see DurableTaskStep.USE_WATCHING)
73+
this.pattern = SecretPatterns.getAggregateSecretPattern(values);
6774
}
6875

6976
@Override
7077
public OutputStream decorate(OutputStream logger) throws IOException, InterruptedException {
71-
return new SecretPatterns.MaskingOutputStream(logger, () -> SecretPatterns.getAggregateSecretPattern(values), "UTF-8");
78+
return new SecretPatterns.MaskingOutputStream(logger, () -> pattern, "UTF-8");
7279
}
7380

7481
@Extension

src/test/java/org/csanchez/jenkins/plugins/kubernetes/pipeline/KubernetesPipelineTest.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@
7474
import org.hamcrest.MatcherAssert;
7575
import org.hamcrest.Matchers;
7676
import org.jenkinsci.plugins.workflow.job.WorkflowRun;
77+
import org.jenkinsci.plugins.workflow.steps.durable_task.DurableTaskStep;
7778
import org.jenkinsci.plugins.workflow.test.steps.SemaphoreStep;
7879
import org.junit.After;
7980
import org.junit.Before;
@@ -247,7 +248,7 @@ public void runIn2Pods() throws Exception {
247248
deletePods(cloud.connect(), getLabels(cloud, this, name), true));
248249
}
249250

250-
@Issue("JENKINS-57893")
251+
@Issue({"JENKINS-57893", "SECURITY-3079"})
251252
@Test
252253
public void runInPodFromYaml() throws Exception {
253254
List<PodTemplate> templates = cloud.getTemplates();
@@ -265,6 +266,14 @@ public void runInPodFromYaml() throws Exception {
265266
r.assertLogContains("INSIDE_CONTAINER_ENV_VAR_FROM_SECRET = **** or " + CONTAINER_ENV_VAR_FROM_SECRET_VALUE.toUpperCase(Locale.ROOT) + "\n", b);
266267
assertFalse("There are pods leftover after test execution, see previous logs",
267268
deletePods(cloud.connect(), getLabels(cloud, this, name), true));
269+
270+
// SECURITY-3079
271+
DurableTaskStep.USE_WATCHING = true;
272+
WorkflowRun build = p.scheduleBuild2(0).waitForStart();
273+
r.assertBuildStatusSuccess(r.waitForCompletion(build));
274+
r.assertLogNotContains(CONTAINER_ENV_VAR_FROM_SECRET_VALUE, build);
275+
r.assertLogContains("INSIDE_CONTAINER_ENV_VAR_FROM_SECRET = **** or " + CONTAINER_ENV_VAR_FROM_SECRET_VALUE.toUpperCase(Locale.ROOT) + "\n", build);
276+
DurableTaskStep.USE_WATCHING = false;
268277
}
269278

270279
@Test

0 commit comments

Comments
 (0)