UserEnvironment.preSudo constructor
UserEnvironment.preSudo({
- required String pathToHome,
Creates a UserEnvironment from the SUDO env args that describe the pre-sudo user.
Implementation
UserEnvironment.preSudo({required this.pathToHome}) {
// get the details of the user, pre-sudo starting.
final sUID = env['SUDO_UID'];
final gUID = env['SUDO_GID'];
// convert id's to integers.
gid = gUID != null ? int.tryParse(gUID) ?? 0 : 0;
uid = sUID != null ? int.tryParse(sUID) ?? 0 : 0;
// CONSIDER: throw an exception if we can't determine the opre-sudo
// user?
username = env['SUDO_USER'] ?? env['USER'] ?? '';
pathToShell = env['SHELL'];
final inheritedRuntimeDirectory = env['XDG_RUNTIME_DIR'];
final standardRuntimeDirectory = '/run/user/$uid';
if (Platform.isLinux &&
(inheritedRuntimeDirectory == null ||
inheritedRuntimeDirectory.isEmpty ||
(inheritedRuntimeDirectory.startsWith('/run/user/') &&
inheritedRuntimeDirectory != standardRuntimeDirectory))) {
pathToXdgRuntimeDirectory = standardRuntimeDirectory;
} else {
pathToXdgRuntimeDirectory = inheritedRuntimeDirectory;
}
final inheritedSessionBus = env['DBUS_SESSION_BUS_ADDRESS'];
if (Platform.isLinux &&
(inheritedSessionBus == null ||
inheritedSessionBus.isEmpty ||
(inheritedSessionBus.contains('path=/run/user/') &&
!inheritedSessionBus.contains(
'path=$standardRuntimeDirectory/',
)))) {
dbusSessionBusAddress = 'unix:path=$pathToXdgRuntimeDirectory/bus';
} else {
dbusSessionBusAddress = inheritedSessionBus;
}
}