From d7cf19d7c0fce1697d548af8ab407e6ff93a5d07 Mon Sep 17 00:00:00 2001 From: Eric Yang Date: Wed, 20 May 2020 09:20:53 -0700 Subject: [PATCH] YARN-10228. Relax restriction of file path character in yarn.service.am.java.opts. Contributed by Bilwa S T via eyang --- .../yarn/service/utils/ServiceApiUtil.java | 2 +- .../service/utils/TestServiceApiUtil.java | 19 +++++++++++++++---- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-core/src/main/java/org/apache/hadoop/yarn/service/utils/ServiceApiUtil.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-core/src/main/java/org/apache/hadoop/yarn/service/utils/ServiceApiUtil.java index 3780c99c24..5e7a335f93 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-core/src/main/java/org/apache/hadoop/yarn/service/utils/ServiceApiUtil.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-core/src/main/java/org/apache/hadoop/yarn/service/utils/ServiceApiUtil.java @@ -250,7 +250,7 @@ public static void validateAndResolveService(Service service, public static void validateJvmOpts(String jvmOpts) throws IllegalArgumentException { - Pattern pattern = Pattern.compile("[!~#?@*&%${}()<>\\[\\]|\"\\/,`;]"); + Pattern pattern = Pattern.compile("[!~#?@*&%${}()<>\\[\\]|\",`;]"); Matcher matcher = pattern.matcher(jvmOpts); if (matcher.find()) { throw new IllegalArgumentException( diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-core/src/test/java/org/apache/hadoop/yarn/service/utils/TestServiceApiUtil.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-core/src/test/java/org/apache/hadoop/yarn/service/utils/TestServiceApiUtil.java index a93f3d9279..2a611717f2 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-core/src/test/java/org/apache/hadoop/yarn/service/utils/TestServiceApiUtil.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-core/src/test/java/org/apache/hadoop/yarn/service/utils/TestServiceApiUtil.java @@ -46,10 +46,12 @@ import java.util.List; import static org.assertj.core.api.Assertions.assertThat; +import static org.apache.hadoop.test.LambdaTestUtils.intercept; import static org.apache.hadoop.yarn.service.conf.RestApiConstants.DEFAULT_UNLIMITED_LIFETIME; import static org.apache.hadoop.yarn.service.exceptions.RestApiErrorMessages.*; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.fail; /** * Test for ServiceApiUtil helper methods. @@ -766,10 +768,19 @@ public void run() { Assert.assertTrue(thread.isAlive()); } - @Test(expected = IllegalArgumentException.class) - public void testJvmOpts() { - String jvmOpts = "`ping -c 3 example.com`"; - ServiceApiUtil.validateJvmOpts(jvmOpts); + @Test + public void testJvmOpts() throws Exception { + String invalidJvmOpts = "`ping -c 3 example.com`"; + intercept(IllegalArgumentException.class, + "Invalid character in yarn.service.am.java.opts.", + () -> ServiceApiUtil.validateJvmOpts(invalidJvmOpts)); + String validJvmOpts = "-Dyarn.service.am.java.opts=-Xmx768m " + + "-Djava.security.auth.login.config=/opt/hadoop/etc/jaas-zk.conf"; + try { + ServiceApiUtil.validateJvmOpts(validJvmOpts); + } catch (Exception ex) { + fail("Invalid character in yarn.service.am.java.opts."); + } } public static Service createExampleApplication() {