summaryrefslogtreecommitdiff
path: root/backend
diff options
context:
space:
mode:
authorKirill Nikiforov <me@allmazz.me>2026-04-12 02:35:54 +0400
committerGitHub <noreply@github.com>2026-04-11 15:35:54 -0700
commitb7a884f26f4732ff58ad9d4f1d35c179765ba253 (patch)
tree1cd05780b6d145b1daff9b0887f2a54aca6cada4 /backend
parenta477bf682932acaf4ccbfb85c722aa0c79e0a603 (diff)
downloaddecky-loader-b7a884f26f4732ff58ad9d4f1d35c179765ba253.tar.gz
decky-loader-b7a884f26f4732ff58ad9d4f1d35c179765ba253.zip
fix setuid/setgid when running rootless (#892)HEADmain
Diffstat (limited to 'backend')
-rw-r--r--backend/decky_loader/localplatform/localplatformlinux.py26
1 files changed, 12 insertions, 14 deletions
diff --git a/backend/decky_loader/localplatform/localplatformlinux.py b/backend/decky_loader/localplatform/localplatformlinux.py
index 1c8f2ace..21993e4c 100644
--- a/backend/decky_loader/localplatform/localplatformlinux.py
+++ b/backend/decky_loader/localplatform/localplatformlinux.py
@@ -116,28 +116,26 @@ def get_username() -> str:
return _get_user()
def setgid(user : UserType = UserType.HOST_USER):
- user_id = 0
-
- if user == UserType.HOST_USER:
- user_id = _get_user_group_id()
+ host_user_group_id, effective_user_group_id = _get_user_group_id(), _get_effective_user_group_id()
+ if host_user_group_id == effective_user_group_id:
+ pass
+ elif user == UserType.HOST_USER:
+ os.setgid(host_user_group_id)
elif user == UserType.EFFECTIVE_USER:
- pass # we already are
+ os.setgid(effective_user_group_id)
else:
raise Exception("Unknown user type")
-
- os.setgid(user_id)
def setuid(user : UserType = UserType.HOST_USER):
- user_id = 0
-
- if user == UserType.HOST_USER:
- user_id = _get_user_id()
+ host_user_id, effective_user_id = _get_user_id(), _get_effective_user_id()
+ if host_user_id == effective_user_id:
+ pass
+ elif user == UserType.HOST_USER:
+ os.setuid(host_user_id)
elif user == UserType.EFFECTIVE_USER:
- pass # we already are
+ os.setuid(effective_user_id)
else:
raise Exception("Unknown user type")
-
- os.setuid(user_id)
async def service_active(service_name : str) -> bool:
res, _, _ = await run(["systemctl", "is-active", service_name], stdout=DEVNULL, stderr=DEVNULL)