Skip to content

Commit 91f03b0

Browse files
committed
Only take env variables needed for sudo
This helps with how `sudo -E` doesn't work in sudo-rs. Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
1 parent 64b1cad commit 91f03b0

File tree

3 files changed

+32
-11
lines changed

3 files changed

+32
-11
lines changed

src/amd_debug/common.py

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -382,7 +382,19 @@ def relaunch_sudo() -> None:
382382
"""Relaunch the script with sudo if not already running as root"""
383383
if not is_root():
384384
logging.debug("Relaunching with sudo")
385-
os.execvp("sudo", ["sudo", "-E"] + sys.argv)
385+
env_vars = []
386+
for var in ["DISPLAY", "WAYLAND_DISPLAY", "XAUTHORITY", "XDG_RUNTIME_DIR",
387+
"DBUS_SESSION_BUS_ADDRESS", "XDG_SESSION_TYPE"]:
388+
value = os.environ.get(var)
389+
if value:
390+
env_vars.append(f"{var}={value}")
391+
392+
if env_vars:
393+
sudo_cmd = ["sudo"] + [f"--preserve-env={var.split('=')[0]}" for var in env_vars] + sys.argv
394+
else:
395+
sudo_cmd = ["sudo"] + sys.argv
396+
397+
os.execvp("sudo", sudo_cmd)
386398

387399

388400
def running_ssh():

src/amd_debug/s2idle.py

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -60,14 +60,20 @@ def display_report_file(fname, fmt) -> None:
6060
return
6161
user = os.environ.get("SUDO_USER")
6262
if user:
63-
# ensure that xdg tools will know how to display the file
64-
# (user may need to call tool with sudo -E)
65-
if os.environ.get("XDG_SESSION_TYPE"):
66-
subprocess.call(["sudo", "-E", "-u", user, "xdg-open", fname])
63+
env_vars = []
64+
for var in ["DISPLAY", "WAYLAND_DISPLAY", "XAUTHORITY", "XDG_RUNTIME_DIR",
65+
"DBUS_SESSION_BUS_ADDRESS", "XDG_SESSION_TYPE"]:
66+
value = os.environ.get(var)
67+
if value:
68+
env_vars.append(f"{var}={value}")
69+
70+
if env_vars:
71+
cmd = ["sudo", "-u", user] + [f"env"] + env_vars + ["xdg-open", fname]
72+
subprocess.call(cmd)
6773
else:
6874
print(
69-
"To display report automatically in browser launch tool "
70-
f"with '-E' argument (Example: sudo -E {sys.argv[0]})"
75+
"Unable to detect graphical session environment. "
76+
"Report saved to: " + fname
7177
)
7278

7379

src/test_s2idle.py

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -614,10 +614,13 @@ def test_display_report_file_html_root_with_user(
614614
display_report_file("report.html", "html")
615615
mock_is_root.assert_called_once()
616616
mock_env_get.assert_any_call("SUDO_USER")
617-
mock_env_get.assert_any_call("XDG_SESSION_TYPE")
618-
mock_subprocess_call.assert_called_once_with(
619-
["sudo", "-E", "-u", "testuser", "xdg-open", "report.html"]
620-
)
617+
call_args = mock_subprocess_call.call_args[0][0]
618+
assert call_args[0] == "sudo"
619+
assert call_args[1] == "-u"
620+
assert call_args[2] == "testuser"
621+
assert call_args[3] == "env"
622+
assert "xdg-open" in call_args
623+
assert "report.html" in call_args
621624

622625
@patch("amd_debug.s2idle.is_root", return_value=True)
623626
@patch("os.environ.get", side_effect=lambda key: None)

0 commit comments

Comments
 (0)