From 9e1d5e085f00238c1d823814cbd164260022648b Mon Sep 17 00:00:00 2001 From: Paul Van Eck Date: Tue, 8 Aug 2023 17:11:51 -0700 Subject: [PATCH] [Identity] Suppress stdin for subprocess-based creds In some cases, the underyling executable being called hangs waiting for user input. When calling the executables we should just ignore stdin. Signed-off-by: Paul Van Eck --- sdk/identity/azure-identity/CHANGELOG.md | 1 + .../azure-identity/azure/identity/_credentials/azd_cli.py | 1 + .../azure-identity/azure/identity/_credentials/azure_cli.py | 1 + .../azure/identity/_credentials/azure_powershell.py | 1 + .../azure-identity/azure/identity/aio/_credentials/azd_cli.py | 1 + .../azure-identity/azure/identity/aio/_credentials/azure_cli.py | 1 + .../azure/identity/aio/_credentials/azure_powershell.py | 1 + 7 files changed, 7 insertions(+) diff --git a/sdk/identity/azure-identity/CHANGELOG.md b/sdk/identity/azure-identity/CHANGELOG.md index 35a0e4353ae7..579bec779640 100644 --- a/sdk/identity/azure-identity/CHANGELOG.md +++ b/sdk/identity/azure-identity/CHANGELOG.md @@ -9,6 +9,7 @@ ### Bugs Fixed - Ensure `AzurePowershellCredential` calls PowerShell with the `-NoProfile` flag to avoid loading user profiles for more consistent behavior. ([#31682](https://github.com/Azure/azure-sdk-for-python/pull/31682)) +- Fixed an issue with subprocess-based developer credentials (such as AzureCliCredential) where the process would sometimes hang waiting for user input. ([#31534](https://github.com/Azure/azure-sdk-for-python/pull/31534)) ### Other Changes diff --git a/sdk/identity/azure-identity/azure/identity/_credentials/azd_cli.py b/sdk/identity/azure-identity/azure/identity/_credentials/azd_cli.py index 4d1d5ff9e740..bbb5ac12a43d 100644 --- a/sdk/identity/azure-identity/azure/identity/_credentials/azd_cli.py +++ b/sdk/identity/azure-identity/azure/identity/_credentials/azd_cli.py @@ -211,6 +211,7 @@ def _run_command(command: str, timeout: int) -> str: kwargs: Dict[str, Any] = { "stderr": subprocess.PIPE, + "stdin": subprocess.DEVNULL, "cwd": working_directory, "universal_newlines": True, "env": dict(os.environ, NO_COLOR="true"), diff --git a/sdk/identity/azure-identity/azure/identity/_credentials/azure_cli.py b/sdk/identity/azure-identity/azure/identity/_credentials/azure_cli.py index 2cdd7f1a3a32..14923f9c5b24 100644 --- a/sdk/identity/azure-identity/azure/identity/_credentials/azure_cli.py +++ b/sdk/identity/azure-identity/azure/identity/_credentials/azure_cli.py @@ -187,6 +187,7 @@ def _run_command(command: str, timeout: int) -> str: kwargs: Dict[str, Any] = { "stderr": subprocess.PIPE, + "stdin": subprocess.DEVNULL, "cwd": working_directory, "universal_newlines": True, "timeout": timeout, diff --git a/sdk/identity/azure-identity/azure/identity/_credentials/azure_powershell.py b/sdk/identity/azure-identity/azure/identity/_credentials/azure_powershell.py index 3dfab8fdcdce..d226d042a3af 100644 --- a/sdk/identity/azure-identity/azure/identity/_credentials/azure_powershell.py +++ b/sdk/identity/azure-identity/azure/identity/_credentials/azure_powershell.py @@ -158,6 +158,7 @@ def start_process(args: List[str]) -> "subprocess.Popen": cwd=working_directory, stdout=subprocess.PIPE, stderr=subprocess.PIPE, + stdin=subprocess.DEVNULL, universal_newlines=True, ) return proc diff --git a/sdk/identity/azure-identity/azure/identity/aio/_credentials/azd_cli.py b/sdk/identity/azure-identity/azure/identity/aio/_credentials/azd_cli.py index b1c229edf617..0238cfafd33d 100644 --- a/sdk/identity/azure-identity/azure/identity/aio/_credentials/azd_cli.py +++ b/sdk/identity/azure-identity/azure/identity/aio/_credentials/azd_cli.py @@ -158,6 +158,7 @@ async def _run_command(command: str, timeout: int) -> str: *args, stdout=asyncio.subprocess.PIPE, stderr=asyncio.subprocess.PIPE, + stdin=asyncio.subprocess.DEVNULL, cwd=working_directory, env=dict(os.environ, NO_COLOR="true"), ) diff --git a/sdk/identity/azure-identity/azure/identity/aio/_credentials/azure_cli.py b/sdk/identity/azure-identity/azure/identity/aio/_credentials/azure_cli.py index c767e8840009..9df42b417c22 100644 --- a/sdk/identity/azure-identity/azure/identity/aio/_credentials/azure_cli.py +++ b/sdk/identity/azure-identity/azure/identity/aio/_credentials/azure_cli.py @@ -136,6 +136,7 @@ async def _run_command(command: str, timeout: int) -> str: *args, stdout=asyncio.subprocess.PIPE, stderr=asyncio.subprocess.PIPE, + stdin=asyncio.subprocess.DEVNULL, cwd=working_directory, env=dict(os.environ, AZURE_CORE_NO_COLOR="true"), ) diff --git a/sdk/identity/azure-identity/azure/identity/aio/_credentials/azure_powershell.py b/sdk/identity/azure-identity/azure/identity/aio/_credentials/azure_powershell.py index 59560f26b3fb..725ed15a9fe2 100644 --- a/sdk/identity/azure-identity/azure/identity/aio/_credentials/azure_powershell.py +++ b/sdk/identity/azure-identity/azure/identity/aio/_credentials/azure_powershell.py @@ -139,5 +139,6 @@ async def start_process(command_line): cwd=working_directory, stdout=asyncio.subprocess.PIPE, stderr=asyncio.subprocess.PIPE, + stdin=asyncio.subprocess.DEVNULL, ) return proc