x11-misc/sddm: move 0.18.1 patches into patchset tarball

Signed-off-by: Andreas Sturmlechner <asturm@gentoo.org>
This commit is contained in:
Andreas Sturmlechner
2024-03-09 00:57:41 +01:00
parent f6a5011c20
commit 34ed989923
14 changed files with 19 additions and 625 deletions

View File

@@ -1,4 +1,5 @@
DIST sddm-0.18.1-patchset.tar.xz 7860 BLAKE2B b79738c58f19ebac24dd790ba7613d85ae78bc0c5161d35249e13ddbac3acefff2753b8d92fa47a73a607b3105310ea5d05e1a5a170068030fe28420ffee88b1 SHA512 30ca961f065188d570b1498f9eea5aeafb31ab53b7e9ce41e98e26cba12f8c16a245fffb25ea4d84c6fb9037a24523cd41acc9a8b140a1420282435c9497d9b4
DIST sddm-0.18.1.tar.xz 3402972 BLAKE2B 99ab43d374e9a3d318f692a6d496d8a6d68927af3c8e8fc2208d7355ec90649a14758b39f5733dd32f942ed569de88085576d4f5f8666f4f97079e0fb6dcb99e SHA512 ff0637600cda2f4da1f643f047f8ee822bd9651ae4ccbb614b9804175c97360ada7af93e07a7b63832f014ef6e7d1b5380ab2b8959f8024ea520fa5ff17efd60
DIST sddm-0.20.0.tar.gz 3552722 BLAKE2B 8086c9555d5ce1598db3279353de077d51adbcc5222a929750e8558a1bcdad395a411f90608bffdc6e1ca7e7ac2b8325e25cf04cbf8476698d787ce7e60c2105 SHA512 0f64b405f1451873a01a2210530feb6f4cbbdea17be9d039c105088963a48322968db7b60c0d20ac5d97c8ec2a19e5130f0a74c0f9de58c61453d8ce8bb6272a
DIST sddm-0.21.0.tar.gz 3557266 BLAKE2B 849cb8b06b9510e5366ea28ef322c242db7d5a77d94c0a5a727f468209880a717055ad8b0c2f5a857852202a4d6bc1f68281fe0e0ab3c6a32327b5a4219af3a0 SHA512 2e8e460e7f318f20a406dcbb1a9fa1dc78b6a5b8d888bfbbaae22b9c642dbc49cf2ac682b4ea9ed847bbafa9bdc361ba08795e59cad970088b370caaaa70f458
DIST sddm-0.21.0-pam.tar.xz 676 BLAKE2B 06a79f74a5833eca9877df4be8639311382d13061b21aa3627e6c4b07725878ded62221fca943440bacc143f6be2a23b2e0a2124012ff2c9fac82e1eded11144 SHA512 6d91eef2434346f7707122454522cf19f104994ac95d562417f6060a92b4e6c9792bebcccabac8290479200b4ba02fc4d92c6098c435c7ceda796d619d8913c2
DIST sddm-0.21.0.tar.gz 3557266 BLAKE2B 849cb8b06b9510e5366ea28ef322c242db7d5a77d94c0a5a727f468209880a717055ad8b0c2f5a857852202a4d6bc1f68281fe0e0ab3c6a32327b5a4219af3a0 SHA512 2e8e460e7f318f20a406dcbb1a9fa1dc78b6a5b8d888bfbbaae22b9c642dbc49cf2ac682b4ea9ed847bbafa9bdc361ba08795e59cad970088b370caaaa70f458

View File

@@ -1,31 +0,0 @@
--- sddm-0.18.1/services/sddm-autologin.pam.bak 2020-06-19 22:27:57.305580696 +0200
+++ sddm-0.18.1/services/sddm-autologin.pam 2020-06-19 22:30:50.513583973 +0200
@@ -1,6 +1,5 @@
#%PAM-1.0
auth required pam_env.so
-auth required pam_tally.so file=/var/log/faillog onerr=succeed
auth required pam_shells.so
auth required pam_nologin.so
auth required pam_permit.so
--- sddm-0.18.1/services/sddm.pam.bak 2020-06-19 22:27:26.721580117 +0200
+++ sddm-0.18.1/services/sddm.pam 2020-06-19 22:27:48.729580533 +0200
@@ -1,15 +1,15 @@
#%PAM-1.0
-auth include system-login
+auth substack system-login
-auth optional pam_gnome_keyring.so
-auth optional pam_kwallet5.so
-account include system-login
+account substack system-login
-password include system-login
+password substack system-login
-password optional pam_gnome_keyring.so use_authtok
session optional pam_keyinit.so force revoke
-session include system-login
+session substack system-login
-session optional pam_gnome_keyring.so auto_start
-session optional pam_kwallet5.so auto_start

View File

@@ -1,32 +0,0 @@
From 300078995ae82495cf09a0646a07e0214f0ae030 Mon Sep 17 00:00:00 2001
From: Andreas Sturmlechner <andreas.sturmlechner@gmail.com>
Date: Sat, 21 Jul 2018 22:41:29 +0200
Subject: [PATCH] Change location of sddm.conf.d to DATAROOTDIR
/usr/lib is not a location that should be hardcoded - depending on
distribution and architecture this can be different. So far, SDDM
does not use this path unless the above conditions happen to make
it coincide with the install location of its Qml modules.
DATAROOTDIR is defined as: Read-only architecture-independent data.
This seems to be a better fit for a system SDDM default config dir.
---
CMakeLists.txt | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 8500c65..5150b7d 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -184,7 +184,7 @@ set(WAYLAND_SESSION_COMMAND "${DATA_INSTALL_DIR}/scripts/wayland-session"
set(CONFIG_FILE "${CMAKE_INSTALL_FULL_SYSCONFDIR}/sddm.conf" CACHE PATH "Path of the sddm config file")
set(CONFIG_DIR "${CMAKE_INSTALL_FULL_SYSCONFDIR}/sddm.conf.d" CACHE PATH "Path of the sddm config directory")
-set(SYSTEM_CONFIG_DIR "${CMAKE_INSTALL_PREFIX}/lib/sddm/sddm.conf.d" CACHE PATH "Path of the system sddm config directory")
+set(SYSTEM_CONFIG_DIR "${CMAKE_INSTALL_FULL_DATAROOTDIR}/sddm/sddm.conf.d" CACHE PATH "Path of the system sddm config directory")
set(LOG_FILE "${CMAKE_INSTALL_FULL_LOCALSTATEDIR}/log/sddm.log" CACHE PATH "Path of the sddm log file")
set(DBUS_CONFIG_FILENAME "org.freedesktop.DisplayManager.conf" CACHE STRING "Name of the sddm config file")
set(COMPONENTS_TRANSLATION_DIR "${DATA_INSTALL_DIR}/translations" CACHE PATH "Components translations directory")
--
2.18.0

View File

@@ -1,94 +0,0 @@
From be202f533ab98a684c6a007e8d5b4357846bc222 Mon Sep 17 00:00:00 2001
From: Fabian Vogt <fabian@ritter-vogt.de>
Date: Tue, 6 Oct 2020 21:21:38 +0200
Subject: [PATCH] Fix X not having access control on startup
If the auth file is empty, X allows any local application (= any user on the
system) to connect. This is currently the case until X wrote the display
number to sddm and sddm used that to write the entry into the file.
To work around this chicken-and-egg problem, make use of the fact that X
doesn't actually look at the display number in the passed auth file and just
use :0 unconditionally. Also make sure that writing the entry was actually
successful.
CVE-2020-28049
---
src/daemon/XorgDisplayServer.cpp | 25 ++++++++++++++++++++-----
src/daemon/XorgDisplayServer.h | 2 +-
2 files changed, 21 insertions(+), 6 deletions(-)
diff --git a/src/daemon/XorgDisplayServer.cpp b/src/daemon/XorgDisplayServer.cpp
index d04f6344..df685b2d 100644
--- a/src/daemon/XorgDisplayServer.cpp
+++ b/src/daemon/XorgDisplayServer.cpp
@@ -88,7 +88,7 @@ namespace SDDM {
return m_cookie;
}
- void XorgDisplayServer::addCookie(const QString &file) {
+ bool XorgDisplayServer::addCookie(const QString &file) {
// log message
qDebug() << "Adding cookie to" << file;
@@ -104,13 +104,13 @@ namespace SDDM {
// check file
if (!fp)
- return;
+ return false;
fprintf(fp, "remove %s\n", qPrintable(m_display));
fprintf(fp, "add %s . %s\n", qPrintable(m_display), qPrintable(m_cookie));
fprintf(fp, "exit\n");
// close pipe
- pclose(fp);
+ return pclose(fp) == 0;
}
bool XorgDisplayServer::start() {
@@ -127,6 +127,15 @@ namespace SDDM {
// log message
qDebug() << "Display server starting...";
+ // generate auth file.
+ // For the X server's copy, the display number doesn't matter.
+ // An empty file would result in no access control!
+ m_display = QStringLiteral(":0");
+ if(!addCookie(m_authPath)) {
+ qCritical() << "Failed to write xauth file";
+ return false;
+ }
+
if (daemonApp->testing()) {
QStringList args;
QDir x11socketDir(QStringLiteral("/tmp/.X11-unix"));
@@ -217,8 +226,14 @@ namespace SDDM {
emit started();
}
- // generate auth file
- addCookie(m_authPath);
+ // The file is also used by the greeter, which does care about the
+ // display number. Write the proper entry, if it's different.
+ if(m_display != QStringLiteral(":0")) {
+ if(!addCookie(m_authPath)) {
+ qCritical() << "Failed to write xauth file";
+ return false;
+ }
+ }
changeOwner(m_authPath);
// set flag
diff --git a/src/daemon/XorgDisplayServer.h b/src/daemon/XorgDisplayServer.h
index d2bdf6d4..e97a0b53 100644
--- a/src/daemon/XorgDisplayServer.h
+++ b/src/daemon/XorgDisplayServer.h
@@ -40,7 +40,7 @@ namespace SDDM {
const QString &cookie() const;
- void addCookie(const QString &file);
+ bool addCookie(const QString &file);
public slots:
bool start();

View File

@@ -1,28 +0,0 @@
From 9a440ba5917ff93c6a78726380c6267d91c13f19 Mon Sep 17 00:00:00 2001
From: Alex <alex.shaw.as@gmail.com>
Date: Mon, 30 Sep 2019 16:50:16 -0400
Subject: [PATCH] Prevent duplicate session name.
Several desktop sessions (e.g. KDE Plasma) already include the string " (Wayland)" in the session name. When this happens, the session name displayed to the user is "Plasma (Wayland) (Wayland)". This change makes it so that only "Plasma (Wayland)" will be displayed.
(cherry picked from commit f9a0648ff3f841b68a07c139c3540b9e75bfd279)
---
src/common/Session.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/common/Session.cpp b/src/common/Session.cpp
index aa4dad3..923ecd4 100644
--- a/src/common/Session.cpp
+++ b/src/common/Session.cpp
@@ -169,7 +169,7 @@ namespace SDDM {
if (line.startsWith(QLatin1String("Name="))) {
if (type == WaylandSession)
- m_displayName = QObject::tr("%1 (Wayland)").arg(line.mid(5));
+ m_displayName = QObject::tr("%1").arg(line.mid(5));
else
m_displayName = line.mid(5);
}
--
2.38.1

View File

@@ -1,33 +0,0 @@
From 5fe712d0e73c6263647bf306f40fbac94a52f4a6 Mon Sep 17 00:00:00 2001
From: Harald Sitter <sitter@kde.org>
Date: Mon, 24 Oct 2022 13:15:48 +0200
Subject: disable automatic portal launching
in Qt6 (and the KDE patch collection for Qt 5) genericunixservices will
internally attempt to probe the portal tech early on in the app life
cycle. this causes the protal system to launch app and then crash
because we aren't actually providing a fully functional session. instead
opt out of this altogether
(cherry picked from commit fc24321541f6f65b7d1aac89cd82336ffd53e1a0)
---
src/greeter/GreeterApp.cpp | 3 +++
1 file changed, 3 insertions(+)
diff --git a/src/greeter/GreeterApp.cpp b/src/greeter/GreeterApp.cpp
index 4e117a7..a491f4d 100644
--- a/src/greeter/GreeterApp.cpp
+++ b/src/greeter/GreeterApp.cpp
@@ -318,6 +318,9 @@ int main(int argc, char **argv)
QSurfaceFormat::setDefaultFormat(format);
}
+ // Qt internally may load the xdg portal system early on, prevent this, we do not have a functional session running.
+ qputenv("QT_NO_XDG_DESKTOP_PORTAL", "1");
+
QGuiApplication app(argc, argv);
QCommandLineParser parser;
--
2.38.1

View File

@@ -1,182 +0,0 @@
From 75e6e00d9e1ecf25e3a9c8332530a1e40d737cdb Mon Sep 17 00:00:00 2001
From: "J. Konrad Tegtmeier-Rottach" <jktr@0x16.de>
Date: Thu, 9 May 2019 03:06:48 +0200
Subject: [PATCH] Honor PAM's supplemental groups (v2) (#834, #1159)
This moves the supplemental group initialization step from
UserSession.cpp to the Backend system, so that the Pam Backend can
inject additional supplemental groups via modules like pam_group.so.
pam_setcred(3) assumes that it operates on an already initialized
supplemental group list. However, PamBackend calls
pam_setcred(PAM_ESTABLISH_CRED) earlier, at the start
PamBackend::openSession, so a pam_setcred(PAM_REINITIALIZE_CRED) call
must be issued to repeat the injection of PAM's supplemental groups.
---
src/helper/Backend.cpp | 5 +++++
src/helper/Backend.h | 3 +++
src/helper/HelperApp.cpp | 4 ++++
src/helper/HelperApp.h | 1 +
src/helper/UserSession.cpp | 13 ++++++++-----
src/helper/backend/PamBackend.cpp | 18 ++++++++++++++++++
src/helper/backend/PamBackend.h | 2 ++
7 files changed, 41 insertions(+), 5 deletions(-)
diff --git a/src/helper/Backend.cpp b/src/helper/Backend.cpp
index d6bb4d0a..35ae2bdf 100644
--- a/src/helper/Backend.cpp
+++ b/src/helper/Backend.cpp
@@ -29,6 +29,7 @@
#include <QtCore/QProcessEnvironment>
#include <pwd.h>
+#include <grp.h>
namespace SDDM {
Backend::Backend(HelperApp* parent)
@@ -79,4 +80,8 @@ namespace SDDM {
bool Backend::closeSession() {
return true;
}
+
+ bool Backend::setupSupplementalGroups(struct passwd *pw) {
+ return !initgroups(pw->pw_name, pw->pw_gid);
+ }
}
diff --git a/src/helper/Backend.h b/src/helper/Backend.h
index b790e001..3caf1592 100644
--- a/src/helper/Backend.h
+++ b/src/helper/Backend.h
@@ -22,6 +22,7 @@
#define BACKEND_H
#include <QtCore/QObject>
+#include <pwd.h>
namespace SDDM {
class HelperApp;
@@ -38,6 +39,8 @@ namespace SDDM {
void setAutologin(bool on = true);
void setGreeter(bool on = true);
+ virtual bool setupSupplementalGroups(struct passwd *pw);
+
public slots:
virtual bool start(const QString &user = QString()) = 0;
virtual bool authenticate() = 0;
diff --git a/src/helper/HelperApp.cpp b/src/helper/HelperApp.cpp
index cad93bd8..d0891d75 100644
--- a/src/helper/HelperApp.cpp
+++ b/src/helper/HelperApp.cpp
@@ -253,6 +253,10 @@ namespace SDDM {
return m_session;
}
+ Backend *HelperApp::backend() {
+ return m_backend;
+ }
+
const QString& HelperApp::user() const {
return m_user;
}
diff --git a/src/helper/HelperApp.h b/src/helper/HelperApp.h
index 3742df12..cb5959a7 100644
--- a/src/helper/HelperApp.h
+++ b/src/helper/HelperApp.h
@@ -39,6 +39,7 @@ namespace SDDM {
virtual ~HelperApp();
UserSession *session();
+ Backend *backend();
const QString &user() const;
const QString &cookie() const;
diff --git a/src/helper/UserSession.cpp b/src/helper/UserSession.cpp
index f71fd358..62fd4d70 100644
--- a/src/helper/UserSession.cpp
+++ b/src/helper/UserSession.cpp
@@ -19,6 +19,7 @@
*
*/
+#include "Backend.h"
#include "Configuration.h"
#include "UserSession.h"
#include "HelperApp.h"
@@ -129,7 +130,8 @@ namespace SDDM {
#endif
// switch user
- const QByteArray username = qobject_cast<HelperApp*>(parent())->user().toLocal8Bit();
+ HelperApp* app = qobject_cast<HelperApp*>(parent());
+ const QByteArray username = app->user().toLocal8Bit();
struct passwd pw;
struct passwd *rpw;
long bufsize = sysconf(_SC_GETPW_R_SIZE_MAX);
@@ -146,12 +148,13 @@ namespace SDDM {
qCritical() << "getpwnam_r(" << username << ") failed with error: " << strerror(err);
exit(Auth::HELPER_OTHER_ERROR);
}
- if (setgid(pw.pw_gid) != 0) {
- qCritical() << "setgid(" << pw.pw_gid << ") failed for user: " << username;
+
+ if (!app->backend()->setupSupplementalGroups(&pw)) {
+ qCritical() << "failed to set up supplemental groups for user: " << username;
exit(Auth::HELPER_OTHER_ERROR);
}
- if (initgroups(pw.pw_name, pw.pw_gid) != 0) {
- qCritical() << "initgroups(" << pw.pw_name << ", " << pw.pw_gid << ") failed for user: " << username;
+ if (setgid(pw.pw_gid) != 0) {
+ qCritical() << "setgid(" << pw.pw_gid << ") failed for user: " << username;
exit(Auth::HELPER_OTHER_ERROR);
}
if (setuid(pw.pw_uid) != 0) {
diff --git a/src/helper/backend/PamBackend.cpp b/src/helper/backend/PamBackend.cpp
index f86d77d6..cccfa258 100644
--- a/src/helper/backend/PamBackend.cpp
+++ b/src/helper/backend/PamBackend.cpp
@@ -289,6 +289,24 @@ namespace SDDM {
return QString::fromLocal8Bit((const char*) m_pam->getItem(PAM_USER));
}
+ bool PamBackend::setupSupplementalGroups(struct passwd *pw) {
+ if (!Backend::setupSupplementalGroups(pw))
+ return false;
+
+ // pam_setcred(3) may inject additional groups into the user's
+ // list of supplemental groups, and assumes that the user's
+ // supplemental groups have already been initialized before
+ // its invocation. Since pam_setcred was already called at the
+ // start of openSession, we need to repeat this step here as
+ // the user's groups have only just now been initialized.
+
+ if (!m_pam->setCred(PAM_REINITIALIZE_CRED)) {
+ m_app->error(m_pam->errorString(), Auth::ERROR_AUTHENTICATION);
+ return false;
+ }
+ return true;
+ }
+
int PamBackend::converse(int n, const struct pam_message **msg, struct pam_response **resp) {
qDebug() << "[PAM] Conversation with" << n << "messages";
diff --git a/src/helper/backend/PamBackend.h b/src/helper/backend/PamBackend.h
index 4c8b4b35..5b079099 100644
--- a/src/helper/backend/PamBackend.h
+++ b/src/helper/backend/PamBackend.h
@@ -28,6 +28,7 @@
#include <QtCore/QObject>
#include <security/pam_appl.h>
+#include <pwd.h>
namespace SDDM {
class PamHandle;
@@ -61,6 +62,7 @@ namespace SDDM {
explicit PamBackend(HelperApp *parent);
virtual ~PamBackend();
int converse(int n, const struct pam_message **msg, struct pam_response **resp);
+ virtual bool setupSupplementalGroups(struct passwd *pw);
public slots:
virtual bool start(const QString &user = QString());

View File

@@ -1,46 +0,0 @@
From 76c11653522453efcf86f6f2f53bca1a497ea350 Mon Sep 17 00:00:00 2001
From: David Edmundson <kde@davidedmundson.co.uk>
Date: Thu, 28 Mar 2019 11:43:37 +0000
Subject: Enable QSurfaceFormat::ResetNotification on new Qt
This fixes graphical glitches on nvidia after VT switching.
It's opt-in as it requires code paths to handle glGetError differently.
The version comparison is because my early implementations missed a code
path. This was fixed in 5.12.2, but we may as well play safe
(cherry picked from commit cd4e1fa21e1ab7178fa5d2ef858f3271575fd315)
---
src/greeter/GreeterApp.cpp | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/src/greeter/GreeterApp.cpp b/src/greeter/GreeterApp.cpp
index d47998e..4e117a7 100644
--- a/src/greeter/GreeterApp.cpp
+++ b/src/greeter/GreeterApp.cpp
@@ -40,6 +40,9 @@
#include <QDebug>
#include <QTimer>
#include <QTranslator>
+#include <QLibraryInfo>
+#include <QVersionNumber>
+#include <QSurfaceFormat>
#include <iostream>
@@ -309,6 +312,12 @@ int main(int argc, char **argv)
qDebug() << "High-DPI autoscaling not Enabled";
}
+ if (QLibraryInfo::version() >= QVersionNumber(5, 13, 0)) {
+ auto format(QSurfaceFormat::defaultFormat());
+ format.setOption(QSurfaceFormat::ResetNotification);
+ QSurfaceFormat::setDefaultFormat(format);
+ }
+
QGuiApplication app(argc, argv);
QCommandLineParser parser;
--
2.38.1

View File

@@ -1,27 +0,0 @@
From f131270ff3ae6e6b4e2dc965cd05b46e194b48c1 Mon Sep 17 00:00:00 2001
From: Fabian Vogt <fabian@ritter-vogt.de>
Date: Tue, 31 Jul 2018 16:51:13 +0200
Subject: [PATCH] Session reuse: Only consider "online" sessions
Otherwise it might switch to already dead sessions ("closing" or "lingering").
---
src/daemon/Display.cpp | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/daemon/Display.cpp b/src/daemon/Display.cpp
index 86e597e..ec442b0 100644
--- a/src/daemon/Display.cpp
+++ b/src/daemon/Display.cpp
@@ -290,8 +290,8 @@ namespace SDDM {
foreach(const SessionInfo &s, reply.value()) {
if (s.userName == user) {
OrgFreedesktopLogin1SessionInterface session(Logind::serviceName(), s.sessionPath.path(), QDBusConnection::systemBus());
- if (session.service() == QLatin1String("sddm")) {
- m_reuseSessionId = s.sessionId;
+ if (session.service() == QLatin1String("sddm") && session.state() == QLatin1String("online")) {
+ m_reuseSessionId = s.sessionId;
break;
}
}
--
2.18.0

View File

@@ -1,23 +0,0 @@
From e93bf95c54ad8c2a1604f8d7be05339164b19308 Mon Sep 17 00:00:00 2001
From: "aacid@kde.org" <aacid@kde.org>
Date: Thu, 12 Nov 2020 23:42:48 +0100
Subject: [PATCH] Fix compilation once QTBUG-88431 gets fixed
And also comes closes to Qt6 compatibility
---
src/daemon/XorgDisplayServer.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/daemon/XorgDisplayServer.cpp b/src/daemon/XorgDisplayServer.cpp
index 5f93a1b3..d5f29a94 100644
--- a/src/daemon/XorgDisplayServer.cpp
+++ b/src/daemon/XorgDisplayServer.cpp
@@ -65,7 +65,7 @@ namespace SDDM {
// create a random hexadecimal number
const char *digits = "0123456789abcdef";
for (int i = 0; i < 32; ++i)
- m_cookie[i] = digits[dis(gen)];
+ m_cookie[i] = QLatin1Char(digits[dis(gen)]);
}
XorgDisplayServer::~XorgDisplayServer() {

View File

@@ -1,25 +0,0 @@
--- a/CMakeLists.txt 2020-10-12 13:03:39.000000000 +0200
+++ b/CMakeLists.txt 2020-10-12 23:40:04.480687143 +0200
@@ -41,22 +41,6 @@
# Definitions
add_definitions(-Wall -std=c++11 -DQT_NO_CAST_FROM_ASCII -DQT_NO_CAST_FROM_BYTEARRAY -DQT_NO_FOREACH)
-# Default build type
-if(NOT CMAKE_BUILD_TYPE)
- set(CMAKE_BUILD_TYPE Release)
-endif()
-
-# Handle build type
-if(CMAKE_BUILD_TYPE MATCHES [Dd]ebug)
- message(STATUS "Debug build")
- add_definitions(-DDEBUG)
- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -O0")
-else()
- message(STATUS "Release build")
- add_definitions(-DNDEBUG)
- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O2")
-endif()
-
# Default absolute paths
if(NOT DEFINED CMAKE_INSTALL_SYSCONFDIR)
set(CMAKE_INSTALL_SYSCONFDIR "/etc")

View File

@@ -1,87 +0,0 @@
From d3953e88a94ec25a87d3c5136517b3d1009cb1fd Mon Sep 17 00:00:00 2001
From: "J. Konrad Tegtmeier-Rottach" <jktr@0x16.de>
Date: Wed, 8 May 2019 18:58:53 +0200
Subject: [PATCH] Revert "Honor PAM's ambient supplemental groups. (#834)"
This reverts commit 1bc813d08b8130e458a6550ec47fb2bfbe6de080, which
misuses PAM and leads to pulling in all of root's supplemental groups
during session initialization instead of only adding PAM's extra
groups. The problem was masked due to the root user not having any
supplemental groups in some common contexts, like running sddm from a
systemd unit.
---
src/helper/UserSession.cpp | 57 --------------------------------------
1 file changed, 57 deletions(-)
diff --git a/src/helper/UserSession.cpp b/src/helper/UserSession.cpp
index b3aec356..f71fd358 100644
--- a/src/helper/UserSession.cpp
+++ b/src/helper/UserSession.cpp
@@ -150,67 +150,10 @@ namespace SDDM {
qCritical() << "setgid(" << pw.pw_gid << ") failed for user: " << username;
exit(Auth::HELPER_OTHER_ERROR);
}
-
-#ifdef USE_PAM
-
- // fetch ambient groups from PAM's environment;
- // these are set by modules such as pam_groups.so
- int n_pam_groups = getgroups(0, NULL);
- gid_t *pam_groups = NULL;
- if (n_pam_groups > 0) {
- pam_groups = new gid_t[n_pam_groups];
- if ((n_pam_groups = getgroups(n_pam_groups, pam_groups)) == -1) {
- qCritical() << "getgroups() failed to fetch supplemental"
- << "PAM groups for user:" << username;
- exit(Auth::HELPER_OTHER_ERROR);
- }
- } else {
- n_pam_groups = 0;
- }
-
- // fetch session's user's groups
- int n_user_groups = 0;
- gid_t *user_groups = NULL;
- if (-1 == getgrouplist(username.constData(), pw.pw_gid,
- NULL, &n_user_groups)) {
- user_groups = new gid_t[n_user_groups];
- if ((n_user_groups = getgrouplist(username.constData(),
- pw.pw_gid, user_groups,
- &n_user_groups)) == -1 ) {
- qCritical() << "getgrouplist(" << username << ", " << pw.pw_gid
- << ") failed";
- exit(Auth::HELPER_OTHER_ERROR);
- }
- }
-
- // set groups to concatenation of PAM's ambient
- // groups and the session's user's groups
- int n_groups = n_pam_groups + n_user_groups;
- if (n_groups > 0) {
- gid_t *groups = new gid_t[n_groups];
- memcpy(groups, pam_groups, (n_pam_groups * sizeof(gid_t)));
- memcpy((groups + n_pam_groups), user_groups,
- (n_user_groups * sizeof(gid_t)));
-
- // setgroups(2) handles duplicate groups
- if (setgroups(n_groups, groups) != 0) {
- qCritical() << "setgroups() failed for user: " << username;
- exit (Auth::HELPER_OTHER_ERROR);
- }
- delete[] groups;
- }
- delete[] pam_groups;
- delete[] user_groups;
-
-#else
-
if (initgroups(pw.pw_name, pw.pw_gid) != 0) {
qCritical() << "initgroups(" << pw.pw_name << ", " << pw.pw_gid << ") failed for user: " << username;
exit(Auth::HELPER_OTHER_ERROR);
}
-
-#endif /* USE_PAM */
-
if (setuid(pw.pw_uid) != 0) {
qCritical() << "setuid(" << pw.pw_uid << ") failed for user: " << username;
exit(Auth::HELPER_OTHER_ERROR);

View File

@@ -1 +0,0 @@
d /var/lib/sddm 0755 sddm sddm

View File

@@ -1,13 +1,15 @@
# Copyright 1999-2022 Gentoo Authors
# Copyright 1999-2024 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
PATCHSET="${P}-patchset"
inherit cmake linux-info systemd tmpfiles
DESCRIPTION="Simple Desktop Display Manager"
HOMEPAGE="https://github.com/sddm/sddm"
SRC_URI="https://github.com/${PN}/${PN}/releases/download/v${PV}/${P}.tar.xz"
SRC_URI="https://github.com/${PN}/${PN}/releases/download/v${PV}/${P}.tar.xz
https://dev.gentoo.org/~asturm/distfiles/${PATCHSET}.tar.xz"
LICENSE="GPL-2+ MIT CC-BY-3.0 CC-BY-SA-3.0 public-domain"
SLOT="0"
@@ -47,22 +49,22 @@ BDEPEND="
"
PATCHES=(
"${FILESDIR}/${P}-respect-user-flags.patch"
"${FILESDIR}/${P}-Xsession.patch" # bug 611210
"${FILESDIR}/${PN}-0.18.0-sddmconfdir.patch"
"${WORKDIR}/${PATCHSET}/${P}-respect-user-flags.patch"
"${WORKDIR}/${PATCHSET}/${P}-Xsession.patch" # bug 611210
"${WORKDIR}/${PATCHSET}/${PN}-0.18.0-sddmconfdir.patch"
# fix for groups: https://github.com/sddm/sddm/issues/1159
"${FILESDIR}/${P}-revert-honor-PAM-supplemental-groups.patch"
"${FILESDIR}/${P}-honor-PAM-supplemental-groups-v2.patch"
"${WORKDIR}/${PATCHSET}/${P}-revert-honor-PAM-supplemental-groups.patch"
"${WORKDIR}/${PATCHSET}/${P}-honor-PAM-supplemental-groups-v2.patch"
# fix for ReuseSession=true
"${FILESDIR}/${P}-only-reuse-online-sessions.patch"
"${WORKDIR}/${PATCHSET}/${P}-only-reuse-online-sessions.patch"
# TODO: fix properly
"${FILESDIR}/pam-1.4-substack.patch"
"${WORKDIR}/${PATCHSET}/pam-1.4-substack.patch"
# upstream git develop branch:
"${FILESDIR}/${P}-qt-5.15.2.patch"
"${FILESDIR}/${P}-cve-2020-28049.patch" # bug 753104
"${FILESDIR}/${P}-nvidia-glitches-vt-switch.patch"
"${FILESDIR}/${P}-drop-wayland-suffix.patch"
"${FILESDIR}/${P}-fix-qt-5.15.7.patch" # KDE-bug 458865
"${WORKDIR}/${PATCHSET}/${P}-qt-5.15.2.patch"
"${WORKDIR}/${PATCHSET}/${P}-cve-2020-28049.patch" # bug 753104
"${WORKDIR}/${PATCHSET}/${P}-nvidia-glitches-vt-switch.patch"
"${WORKDIR}/${PATCHSET}/${P}-drop-wayland-suffix.patch"
"${WORKDIR}/${PATCHSET}/${P}-fix-qt-5.15.7.patch" # KDE-bug 458865
)
pkg_setup() {
@@ -93,7 +95,7 @@ src_configure() {
src_install() {
cmake_src_install
newtmpfiles "${FILESDIR}/${PN}.tmpfiles" "${PN}.conf"
newtmpfiles "${WORKDIR}/${PATCHSET}/${PN}.tmpfiles" "${PN}.conf"
# Create a default.conf as upstream dropped /etc/sddm.conf w/o replacement
local confd="/usr/share/sddm/sddm.conf.d"