YARN-10228. Relax restriction of file path character in yarn.service.am.java.opts.

Contributed by Bilwa S T via eyang
This commit is contained in:
Eric Yang 2020-05-20 09:20:53 -07:00
parent e452163a06
commit d7cf19d7c0
2 changed files with 16 additions and 5 deletions

View File

@ -250,7 +250,7 @@ public static void validateAndResolveService(Service service,
public static void validateJvmOpts(String jvmOpts) public static void validateJvmOpts(String jvmOpts)
throws IllegalArgumentException { throws IllegalArgumentException {
Pattern pattern = Pattern.compile("[!~#?@*&%${}()<>\\[\\]|\"\\/,`;]"); Pattern pattern = Pattern.compile("[!~#?@*&%${}()<>\\[\\]|\",`;]");
Matcher matcher = pattern.matcher(jvmOpts); Matcher matcher = pattern.matcher(jvmOpts);
if (matcher.find()) { if (matcher.find()) {
throw new IllegalArgumentException( throw new IllegalArgumentException(

View File

@ -46,10 +46,12 @@
import java.util.List; import java.util.List;
import static org.assertj.core.api.Assertions.assertThat; 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.conf.RestApiConstants.DEFAULT_UNLIMITED_LIFETIME;
import static org.apache.hadoop.yarn.service.exceptions.RestApiErrorMessages.*; import static org.apache.hadoop.yarn.service.exceptions.RestApiErrorMessages.*;
import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.fail;
/** /**
* Test for ServiceApiUtil helper methods. * Test for ServiceApiUtil helper methods.
@ -766,10 +768,19 @@ public void run() {
Assert.assertTrue(thread.isAlive()); Assert.assertTrue(thread.isAlive());
} }
@Test(expected = IllegalArgumentException.class) @Test
public void testJvmOpts() { public void testJvmOpts() throws Exception {
String jvmOpts = "`ping -c 3 example.com`"; String invalidJvmOpts = "`ping -c 3 example.com`";
ServiceApiUtil.validateJvmOpts(jvmOpts); 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() { public static Service createExampleApplication() {