fix: root privileges drop on non unix systems (#1191)

Skip root privileges drop on non unix systems. It is
just not supported.

Signed-off-by: Andreas Schmitz <akkudoktor.net>
Signed-off-by: Bobby Noelte <b0661n0e17e@gmail.com>
This commit is contained in:
Bobby Noelte
2026-07-29 16:34:06 +02:00
committed by GitHub
parent e23bb7b497
commit 3c1f5d8bc0

View File

@@ -1,14 +1,21 @@
"""Server Module."""
import grp
import ipaddress
import os
import pwd
import re
import socket
import sys
import time
from typing import Any, Optional
try:
# Only available on Linux/Unix type systems
import grp
import pwd
except ModuleNotFoundError:
grp = None # type: ignore[assignment]
pwd = None # type: ignore[assignment]
import psutil
from loguru import logger
from pydantic import Field, field_validator
@@ -185,6 +192,12 @@ def drop_root_privileges(run_as_user: Optional[str] = None) -> bool:
- The target user must exist inside the container (valid entry in
``/etc/passwd`` and ``/etc/group``).
"""
if pwd is None or grp is None or not hasattr(os, "geteuid"):
if run_as_user is not None:
logger.error(f"Privilege switching is not supported on `{sys.platform}`.")
return False
return True
# Determine current user
current_user = pwd.getpwuid(os.geteuid()).pw_name
@@ -264,6 +277,10 @@ def fix_data_directories_permissions(run_as_user: Optional[str] = None) -> None:
run_as_user (Optional[str]): The user who should own the data directories and files.
Defaults to current one.
"""
if pwd is None or not hasattr(os, "geteuid") or not hasattr(os, "chown"):
logger.debug(f"Skipping data directory ownership fix on `{sys.platform}`.")
return
config_eos = get_config()
base_dirs = [
@@ -442,6 +459,8 @@ class ServerCommonSettings(SettingsBaseModel):
@field_validator("run_as_user")
def validate_user(cls, value: Optional[str]) -> Optional[str]:
if value is not None:
if pwd is None:
raise ValueError(f"User privilege switching is not supported on `{sys.platform}`.")
# Resolve target user info
try:
pw_record = pwd.getpwnam(value)