Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:Leap:15.1:Update
sddm
sddm-relaxed-auth.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File sddm-relaxed-auth.patch of Package sddm
From a84e5b670aaef199d881b9f20e6bf886c21330c7 Mon Sep 17 00:00:00 2001 From: Fabian Vogt <fabian@ritter-vogt.de> Date: Mon, 9 Nov 2020 22:15:13 +0100 Subject: [PATCH] Set XAUTHLOCALHOSTNAME to allow hostname changes Our libxcb is patched to retry with $XAUTHLOCALHOSTNAME as hostname if the Xauthority entry for the current hostname does not work. There's a stale PR to do something similar (FamilyWild using libXau) upstream: https://github.com/sddm/sddm/pull/863 FamilyWild is not a complete solution either, only when using a temporary Xauthority file for each session separately. --- src/daemon/DaemonApp.cpp | 3 ++- src/daemon/Display.cpp | 4 +++- src/daemon/Greeter.cpp | 2 ++ src/daemon/XorgDisplayServer.cpp | 5 +++-- src/helper/Backend.cpp | 2 ++ 5 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/helper/Backend.cpp b/src/helper/Backend.cpp index d6bb4d0..0fbbd75 100644 --- a/src/helper/Backend.cpp +++ b/src/helper/Backend.cpp @@ -27,6 +27,7 @@ #include "UserSession.h" #include <QtCore/QProcessEnvironment> +#include <QtNetwork/QHostInfo> #include <pwd.h> @@ -69,6 +70,7 @@ namespace SDDM { .arg(QString::fromLocal8Bit(pw->pw_dir)) .arg(mainConfig.X11.UserAuthFile.get()); env.insert(QStringLiteral("XAUTHORITY"), value); + env.insert(QStringLiteral("XAUTHLOCALHOSTNAME"), QHostInfo::localHostName()); } // TODO: I'm fairly sure this shouldn't be done for PAM sessions, investigate! m_app->session()->setProcessEnvironment(env); diff --git a/src/daemon/DaemonApp.cpp b/src/daemon/DaemonApp.cpp index 537f9b4..fd6ca2f 100644 --- a/src/daemon/DaemonApp.cpp +++ b/src/daemon/DaemonApp.cpp @@ -96,7 +96,8 @@ namespace SDDM { QString DaemonApp::hostName() const { - return QHostInfo::localHostName(); + static QString hostname = QHostInfo::localHostName(); + return hostname; } DisplayManager *DaemonApp::displayManager() const { diff --git a/src/daemon/Display.cpp b/src/daemon/Display.cpp index f6569e8..6a3a2df 100644 --- a/src/daemon/Display.cpp +++ b/src/daemon/Display.cpp @@ -316,8 +316,10 @@ namespace SDDM { QProcessEnvironment env; env.insert(QStringLiteral("PATH"), mainConfig.Users.DefaultPath.get()); - if (session.xdgSessionType() == QLatin1String("x11")) + if (session.xdgSessionType() == QLatin1String("x11")) { env.insert(QStringLiteral("DISPLAY"), name()); + env.insert(QStringLiteral("XAUTHLOCALHOSTNAME"), daemonApp->hostName()); + } env.insert(QStringLiteral("XDG_SEAT_PATH"), daemonApp->displayManager()->seatPath(seat()->name())); env.insert(QStringLiteral("XDG_SESSION_PATH"), daemonApp->displayManager()->sessionPath(QStringLiteral("Session%1").arg(daemonApp->newSessionId()))); env.insert(QStringLiteral("DESKTOP_SESSION"), session.desktopSession()); diff --git a/src/daemon/Greeter.cpp b/src/daemon/Greeter.cpp index 11ec19d..ee6a411 100644 --- a/src/daemon/Greeter.cpp +++ b/src/daemon/Greeter.cpp @@ -114,6 +114,7 @@ namespace SDDM { // set process environment QProcessEnvironment env = QProcessEnvironment::systemEnvironment(); env.insert(QStringLiteral("DISPLAY"), m_display->name()); + env.insert(QStringLiteral("XAUTHLOCALHOSTNAME"), daemonApp->hostName()); env.insert(QStringLiteral("XAUTHORITY"), m_authPath); env.insert(QStringLiteral("XCURSOR_THEME"), xcursorTheme); env.insert(QStringLiteral("QT_IM_MODULE"), mainConfig.InputMethod.get()); @@ -175,6 +176,7 @@ namespace SDDM { env.insert(QStringLiteral("PATH"), mainConfig.Users.DefaultPath.get()); env.insert(QStringLiteral("DISPLAY"), m_display->name()); env.insert(QStringLiteral("XAUTHORITY"), m_authPath); + env.insert(QStringLiteral("XAUTHLOCALHOSTNAME"), daemonApp->hostName()); env.insert(QStringLiteral("XCURSOR_THEME"), xcursorTheme); env.insert(QStringLiteral("XDG_SEAT"), m_display->seat()->name()); env.insert(QStringLiteral("XDG_SEAT_PATH"), daemonApp->displayManager()->seatPath(m_display->seat()->name())); diff --git a/src/daemon/XorgDisplayServer.cpp b/src/daemon/XorgDisplayServer.cpp index bddef79..c5a0e3b 100644 --- a/src/daemon/XorgDisplayServer.cpp +++ b/src/daemon/XorgDisplayServer.cpp @@ -104,8 +104,8 @@ namespace SDDM { // check file if (!fp) return false; - fprintf(fp, "remove %s\n", qPrintable(m_display)); - fprintf(fp, "add %s . %s\n", qPrintable(m_display), qPrintable(m_cookie)); + fprintf(fp, "remove %s/unix%s\n", qPrintable(daemonApp->hostName()), qPrintable(m_display)); + fprintf(fp, "add %s/unix%s . %s\n", qPrintable(daemonApp->hostName()), qPrintable(m_display), qPrintable(m_cookie)); fprintf(fp, "exit\n"); // close pipe @@ -313,6 +313,7 @@ namespace SDDM { env.insert(QStringLiteral("HOME"), QStringLiteral("/")); env.insert(QStringLiteral("PATH"), mainConfig.Users.DefaultPath.get()); env.insert(QStringLiteral("XAUTHORITY"), m_authPath); + env.insert(QStringLiteral("XAUTHLOCALHOSTNAME"), daemonApp->hostName()); env.insert(QStringLiteral("SHELL"), QStringLiteral("/bin/sh")); env.insert(QStringLiteral("XCURSOR_THEME"), mainConfig.Theme.CursorTheme.get()); setCursor->setProcessEnvironment(env); -- 2.25.1
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor