anaconda/anaconda-40.22.3.13/pyanaconda/core/live_user.py
2024-11-14 21:39:56 -08:00

75 lines
2.2 KiB
Python

#
# live_user.py: Provide information about liveuser user from the
# currently running system
#
# Copyright (C) 2023
# Red Hat, Inc. All rights reserved.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
import os
from collections import namedtuple
from pwd import getpwuid
from pyanaconda.anaconda_loggers import get_module_logger
from pyanaconda.core.configuration.anaconda import conf
log = get_module_logger(__name__)
User = namedtuple("User", ["name", "uid", "env_add", "env_prune"])
def get_live_user():
"""Get the user name and uid of the liveuser user.
:return: user name and uid as namedtuple or None
:rtype: namedtuple User["name", "uid"] | None
"""
if not conf.system.provides_liveuser:
return None
if "PKEXEC_UID" not in os.environ:
return None
pkexec_value = os.environ.get("PKEXEC_UID")
try:
uid = int(pkexec_value)
except ValueError:
log.error("Wrong UID obtained from system '%s'", pkexec_value)
return None
if uid == 0:
log.warning("PKEXEC was started by root, it should be live user - not root!")
return None
try:
passwd_entry = getpwuid(uid)
except KeyError:
log.error("Can't obtain user information from pkexec UID: '%s'", pkexec_value)
return None
username = passwd_entry.pw_name
home_dir = passwd_entry.pw_dir
env_prune = ("GDK_BACKEND",)
env_add = {
"XDG_RUNTIME_DIR": "/run/user/{}".format(uid),
"USER": username,
"HOME": home_dir,
}
return User(name=username,
uid=uid,
env_add=env_add,
env_prune=env_prune)