From 79113d99e44ace405bd9211e2c0f73659ff94c0f Mon Sep 17 00:00:00 2001 From: Nicolas Fella Date: Wed, 16 Feb 2022 12:38:51 +0000 Subject: [PATCH] [kcms/user] Set interactive auth flag for more calls Creating and deleting users needs that too This also means that we need to be more correct with the types passed into the DBus calls since with passing the args as list we don't get implicit conversion to the correct type any more BUG: 450122 FIXED-IN: 5.24.2 --- kcms/users/src/kcm.cpp | 15 ++++++++++++--- kcms/users/src/kcm.h | 2 +- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/kcms/users/src/kcm.cpp b/kcms/users/src/kcm.cpp index 872c61bc7..0f62a098d 100644 --- a/kcms/users/src/kcm.cpp +++ b/kcms/users/src/kcm.cpp @@ -28,6 +28,15 @@ Q_LOGGING_CATEGORY(kcm_users, "kcm_users") K_PLUGIN_CLASS_WITH_JSON(KCMUser, "kcm_users.json") +// Work around QTBUG-100458 +inline auto asyncCall(OrgFreedesktopAccountsInterface *ptr, const QString &method, const QVariantList &arguments) +{ + auto mc = QDBusMessage::createMethodCall(ptr->service(), ptr->path(), ptr->interface(), method); + mc.setArguments(arguments); + mc.setInteractiveAuthorizationAllowed(true); + return QDBusConnection::systemBus().asyncCall(mc); +} + KCMUser::KCMUser(QObject *parent, const KPluginMetaData &data, const QVariantList &args) : KQuickAddons::ConfigModule(parent, data, args) , m_dbusInterface(new OrgFreedesktopAccountsInterface(QStringLiteral("org.freedesktop.Accounts"), @@ -56,7 +65,7 @@ KCMUser::KCMUser(QObject *parent, const KPluginMetaData &data, const QVariantLis bool KCMUser::createUser(const QString &name, const QString &realName, const QString &password, bool isAdmin) { - QDBusPendingReply reply = m_dbusInterface->CreateUser(name, realName, isAdmin); + QDBusPendingReply reply = asyncCall(m_dbusInterface, "CreateUser", {name, realName, static_cast(isAdmin)}); reply.waitForFinished(); if (reply.isValid()) { User *createdUser = new User(this); @@ -68,9 +77,9 @@ bool KCMUser::createUser(const QString &name, const QString &realName, const QSt return false; } -bool KCMUser::deleteUser(int id, bool deleteHome) +bool KCMUser::deleteUser(qint64 id, bool deleteHome) { - QDBusPendingReply<> reply = m_dbusInterface->DeleteUser(id, deleteHome); + QDBusPendingReply<> reply = asyncCall(m_dbusInterface, "DeleteUser", {id, deleteHome}); reply.waitForFinished(); if (reply.isError()) { return false; diff --git a/kcms/users/src/kcm.h b/kcms/users/src/kcm.h index 90df68c47..808ad9284 100644 --- a/kcms/users/src/kcm.h +++ b/kcms/users/src/kcm.h @@ -32,7 +32,7 @@ public: ~KCMUser() override; Q_SCRIPTABLE bool createUser(const QString &name, const QString &realName, const QString &password, bool admin); - Q_SCRIPTABLE bool deleteUser(int index, bool deleteHome); + Q_SCRIPTABLE bool deleteUser(qint64 index, bool deleteHome); // Grab the initials of a string Q_SCRIPTABLE QString initializeString(const QString &stringToGrabInitialsOf); Q_SCRIPTABLE QString plonkImageInTempfile(const QImage &image);