From e6f03bfd3876f668e0bf5f2bb4a3427384644c15 Mon Sep 17 00:00:00 2001 From: "Dmitry.Krasilschikov" Date: Mon, 24 Aug 2015 19:45:28 +0300 Subject: [PATCH] #RUBY-16963: pkexec failed to execute ruby bundler without parent environment --- .../configurations/GeneralCommandLine.java | 2 +- .../src/com/intellij/execution/util/ExecUtil.java | 13 ++++++++++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/platform/platform-api/src/com/intellij/execution/configurations/GeneralCommandLine.java b/platform/platform-api/src/com/intellij/execution/configurations/GeneralCommandLine.java index 86c13f886734..d1bb5b0344ab 100644 --- a/platform/platform-api/src/com/intellij/execution/configurations/GeneralCommandLine.java +++ b/platform/platform-api/src/com/intellij/execution/configurations/GeneralCommandLine.java @@ -146,7 +146,7 @@ public class GeneralCommandLine implements UserDataHolder { * @return unmodifiable map of the parent environment, that will be passed to the process if isPassParentEnvironment() == true */ @NotNull - public Map getParentEnvironment() { + public static Map getParentEnvironment() { return PlatformUtils.isAppCode() ? System.getenv() // Temporarily fix for OC-8606 : EnvironmentUtil.getEnvironmentMap(); } diff --git a/platform/platform-api/src/com/intellij/execution/util/ExecUtil.java b/platform/platform-api/src/com/intellij/execution/util/ExecUtil.java index 9107e7f53f8f..652d83efa65d 100644 --- a/platform/platform-api/src/com/intellij/execution/util/ExecUtil.java +++ b/platform/platform-api/src/com/intellij/execution/util/ExecUtil.java @@ -26,6 +26,8 @@ import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.vfs.CharsetToolkit; import com.intellij.util.Function; +import com.intellij.util.containers.ContainerUtil; +import com.intellij.util.containers.ContainerUtilRt; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -217,7 +219,16 @@ public class ExecUtil { final List sudoCommand = new ArrayList(); sudoCommand.add("pkexec"); sudoCommand.addAll(command); - return new GeneralCommandLine(sudoCommand).withWorkDirectory(workDir).withEnvironment(environment).createProcess(); + + final Map parentEnvironment = GeneralCommandLine.getParentEnvironment(); + final Map inheritedEnvironment = ContainerUtilRt.newHashMap(parentEnvironment.size()); + + for (Map.Entry envVariable : parentEnvironment.entrySet()) { + inheritedEnvironment.put(envVariable.getKey(), escapeUnixShellArgument(envVariable.getValue())); + } + inheritedEnvironment.putAll(environment); + + return new GeneralCommandLine(sudoCommand).withWorkDirectory(workDir).withEnvironment(inheritedEnvironment).createProcess(); } else if (SystemInfo.isUnix && hasTerminalApp()) { final String escapedCommandLine = StringUtil.join(command, new Function() {