aws / aws/aws-parallelcluster

dcv connect does not work if username is longer than 8 characters

Open
#7,352 0 comments 0 reactions 0 assignees View on GitHub
3.x
Dominant language
Python
Stars
888
Forks
314
Avg merge
1d 10h
Merged PRs (30d)
43

Description

dcv connect hangs for users when their username is longer than 8 characters.

Fixed by https://github.com/aws/aws-parallelcluster-cookbook/pull/2472

The patch is outdated at this point, see attached patch we have
```
--- pcluster_dcv_authenticator.py.bak 2026-04-25 00:00:45.154569647 +0000
+++ pcluster_dcv_authenticator.py 2026-04-25 06:15:14.674231954 +0000
@@ -361,13 +361,17 @@
# TODO change this method if DCV updates his behaviour.
"""
logger.info("Verifying Amazon DCV session validity..")
+
+ # Query by uid rather than username to avoid truncation by ps command
+ uid = subprocess.check_output(["/usr/bin/id", "-u", user]).decode("utf-8").strip() # nosec B603
+
# Remove the first and the last because they are the heading and empty, respectively
# All commands and arguments in this subprocess call are built as literals
- processes = subprocess.check_output(["/bin/ps", "aux"]).decode("utf-8").split("\n")[1:-1] # nosec B603
+ processes = subprocess.check_output(["/bin/ps", "aunx"]).decode("utf-8").split("\n")[1:-1] # nosec B603

# Check the filter is empty
if not next(
- filter(lambda process: DCVAuthenticator.check_dcv_process(process, user, session_id), processes), None
+ filter(lambda process: DCVAuthenticator.check_dcv_process(process, uid, session_id), processes), None
):
raise DCVAuthenticator.IncorrectRequestError("The given session does not exists")
logger.info("The Amazon DCV session is valid.")
@@ -377,21 +381,21 @@
retry(DCVAuthenticator._is_session_valid, func_args=[user, session_id], attempts=20, wait=1)

@staticmethod
- def check_dcv_process(row, user, session_id):
+ def check_dcv_process(row, uid, session_id):
"""Check if there is a dcvagent process running for the given user and for the given session_id."""
# row example:
- # centos 63 0.0 0.0 4348844 3108 ?? Ss 23Jul19 2:32.46 /usr/libexec/dcv/dcvagent --mode full \
+ # 1000 63 0.0 0.0 4348844 3108 ?? Ss 23Jul19 2:32.46 /usr/libexec/dcv/dcvagent --mode full \
# --session-id mysession
- # ubuntu 2949 0.3 0.4 860568 34328 ? Sl 20:10 0:18 /usr/lib/x86_64-linux-gnu/dcv/dcvagent --mode full \
+ # 2000 2949 0.3 0.4 860568 34328 ? Sl 20:10 0:18 /usr/lib/x86_64-linux-gnu/dcv/dcvagent --mode full \
# --session-id mysession
fields = row.split()
command_index = 10
session_name_index = 14
- user_index = 0
+ uid_index = 0

return (
fields[command_index].endswith("/dcv/dcvagent")
- and fields[user_index] == user
+ and fields[uid_index] == uid
and fields[session_name_index] == session_id
)
```

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.