diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/ContainerExecutor.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/ContainerExecutor.java index 98171af..c6f53bb 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/ContainerExecutor.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/ContainerExecutor.java @@ -270,9 +270,17 @@ public void writeLaunchEnv(OutputStream out, whitelist.add(ApplicationConstants.Environment.HADOOP_CONF_DIR.name()); whitelist.add(ApplicationConstants.Environment.JAVA_HOME.name()); if (environment != null) { - for (Map.Entry env : environment.entrySet()) { + sb.validatorRoutine(); + for (Map.Entry env : environment.entrySet()) { if (!whitelist.contains(env.getKey())) { sb.env(env.getKey().toString(), env.getValue().toString()); + + // We need to validate those shell variables which has some + // variable substitution is present. + if (env.getValue().toString().indexOf('$') >= 0) { + sb.validateShellVariable(env.getKey().toString(), + env.getValue().toString()); + } } else { sb.whitelistedEnv(env.getKey().toString(), env.getValue().toString()); } diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/launcher/ContainerLaunch.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/launcher/ContainerLaunch.java index 7e9030c..a61cb93 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/launcher/ContainerLaunch.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/launcher/ContainerLaunch.java @@ -824,6 +824,14 @@ protected final void line(String... command) { sb.append(LINE_SEPARATOR); } + public void validatorRoutine() { + // Dummy implementation. + } + + public void validateShellVariable(String key, String value) { + // Dummy implementation. + } + protected abstract void link(Path src, Path dst) throws IOException; protected abstract void mkdir(Path path) throws IOException; @@ -839,6 +847,18 @@ private void errorCheck() { line("fi"); } + @Override + public void validatorRoutine() { + line("verify_shell_variable() {"); + line(" echo \"Shell variable ${1} is defined as ${2:?}\""); + line("}"); + } + + @Override + public void validateShellVariable(String key, String value) { + line("verify_shell_variable ", key," ${", key,"}"); + } + public UnixShellScriptBuilder(){ line("#!/bin/bash"); line(); -- 2.7.4 (Apple Git-66)