SVN commit 1067774 by dafre: Reading pkla files works for implicit authorizations Signed-off-by: Dario Freddi M +2 -4 helper/org.kde.polkitkde1.helper.xml M +9 -9 helper/polkitkde1helper.cpp M +3 -6 helper/polkitkde1helper.h M +91 -63 polkitactions/ActionWidget.cpp M +12 -6 polkitactions/ActionWidget.h --- trunk/extragear/base/polkit-kde-1/kcmodules/helper/org.kde.polkitkde1.helper.xml #1067773:1067774 @@ -8,11 +8,9 @@ + + - - - - \ No newline at end of file --- trunk/extragear/base/polkit-kde-1/kcmodules/helper/polkitkde1helper.cpp #1067773:1067774 @@ -82,7 +82,7 @@ // TODO: Move files around if the priority was changed } -void PolkitKde1Helper::retrievePolicies() +QVariantList PolkitKde1Helper::retrievePolicies() { qDebug() << "Request to retrieve the action authorizations by " << message().service(); PolkitQt1::Authority::Result result; @@ -98,10 +98,10 @@ } else { // It's not ok qDebug() << "UnAuthorized! " << PolkitQt1::Authority::instance()->lastError(); - return; + return QVariantList(); } - QList retlist; + QVariantList retlist; // Iterate over the directory and find out everything QDir baseDir("/var/lib/polkit-1/localauthority/"); @@ -120,16 +120,16 @@ } } - emit policiesRetrieved(retlist); + return retlist; } -QList< PKLAEntry > PolkitKde1Helper::entriesFromFile(int filePriority, const QString& filePath) +QVariantList PolkitKde1Helper::entriesFromFile(int filePriority, const QString& filePath) { - QList< PKLAEntry > retlist; + QList< QVariant > retlist; QFile file(filePath); if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { qWarning() << "Failed to open " << filePath; - return QList< PKLAEntry >(); + return QVariantList(); } int priority = 0; @@ -159,7 +159,7 @@ } else if (line.startsWith('[')) { // Ouch!! qWarning() << "The file appears malformed!! " << filePath; - return QList< PKLAEntry >(); + return QVariantList(); } // Did we parse it all? @@ -169,7 +169,7 @@ ++priority; qDebug() << "PKLA Parsed:" << entry.title << entry.action << entry.identity << entry.resultAny << entry.resultInactive << entry.resultActive << entry.fileOrder; - retlist.append(entry); + retlist.append(QVariant::fromValue(entry)); break; } } --- trunk/extragear/base/polkit-kde-1/kcmodules/helper/polkitkde1helper.h #1067773:1067774 @@ -25,15 +25,12 @@ PolkitKde1Helper(QObject* parent = 0); virtual ~PolkitKde1Helper(); - public slots: + public Q_SLOTS: void saveGlobalConfiguration(const QString &adminIdentities, int systemPriority, int policiesPriority); - void retrievePolicies(); + QVariantList retrievePolicies(); - Q_SIGNALS: - void policiesRetrieved(const PKLAEntryList &policies); - private: - QList entriesFromFile(int filePriority, const QString &fileContents); + QVariantList entriesFromFile(int filePriority, const QString &fileContents); }; #endif // POLKITKDE1HELPER_H --- trunk/extragear/base/polkit-kde-1/kcmodules/polkitactions/ActionWidget.cpp #1067773:1067774 @@ -17,99 +17,127 @@ #include #include #include +#include namespace PolkitKde { ActionWidget::ActionWidget(PolkitQt1::ActionDescription* action, QWidget* parent) : QWidget(parent) , m_ui(new Ui::ActionWidget) - , m_action(action) + , m_action(0) { m_ui->setupUi(this); // Initialize - switch (action->implicitActive()) { - case PolkitQt1::ActionDescription::Authorized: - m_ui->activeComboBox->setCurrentIndex(0); - break; - case PolkitQt1::ActionDescription::NotAuthorized: - m_ui->activeComboBox->setCurrentIndex(1); - break; - case PolkitQt1::ActionDescription::AuthenticationRequired: - m_ui->activeComboBox->setCurrentIndex(4); - break; - case PolkitQt1::ActionDescription::AuthenticationRequiredRetained: - m_ui->activeComboBox->setCurrentIndex(5); - break; - case PolkitQt1::ActionDescription::AdministratorAuthenticationRequired: - m_ui->activeComboBox->setCurrentIndex(2); - break; - case PolkitQt1::ActionDescription::AdministratorAuthenticationRequiredRetained: - m_ui->activeComboBox->setCurrentIndex(3); - break; + reloadPKLAs(); + + setAction(action); +} + +ActionWidget::~ActionWidget() +{ + +} + +void ActionWidget::reloadPKLAs() +{ + m_entries.clear(); + QDBusMessage message = QDBusMessage::createMethodCall("org.kde.polkitkde1.helper", + "/Helper", + "org.kde.polkitkde1.helper", + QLatin1String("retrievePolicies")); + QDBusPendingCall reply = QDBusConnection::systemBus().asyncCall(message); + reply.waitForFinished(); + if (reply.reply().arguments().count() >= 1) { + QVariantList vlist; + reply.reply().arguments().first().value() >> vlist; + foreach (const QVariant &variant, vlist) { + PKLAEntry entry; + variant.value() >> entry; + qDebug() << entry.title; + m_entries.append(entry); + } } - switch (action->implicitInactive()) { - case PolkitQt1::ActionDescription::Authorized: - m_ui->inactiveComboBox->setCurrentIndex(0); - break; - case PolkitQt1::ActionDescription::NotAuthorized: - m_ui->inactiveComboBox->setCurrentIndex(1); - break; - case PolkitQt1::ActionDescription::AuthenticationRequired: - m_ui->inactiveComboBox->setCurrentIndex(4); - break; - case PolkitQt1::ActionDescription::AuthenticationRequiredRetained: - m_ui->inactiveComboBox->setCurrentIndex(5); - break; - case PolkitQt1::ActionDescription::AdministratorAuthenticationRequired: - m_ui->inactiveComboBox->setCurrentIndex(2); - break; - case PolkitQt1::ActionDescription::AdministratorAuthenticationRequiredRetained: - m_ui->inactiveComboBox->setCurrentIndex(3); - break; + + if (m_action) { + computeActionPolicies(); } - switch (action->implicitAny()) { +} + +void ActionWidget::computeActionPolicies() +{ + foreach (const PKLAEntry &entry, m_entries) { + QStringList realActions = entry.action.split(';'); + if (realActions.contains(m_action->actionId())) { + // Match! Is it, actually, an implicit override? + if (entry.title == "PolkitKdeOverrideImplicit") { + // It is! + setImplicitAuthorization(implFromText(entry.resultActive), m_ui->activeComboBox); + setImplicitAuthorization(implFromText(entry.resultInactive), m_ui->inactiveComboBox); + setImplicitAuthorization(implFromText(entry.resultAny), m_ui->anyComboBox); + } else { + // TODO: Add it to the local auths + } + } + } +} + +PolkitQt1::ActionDescription::ImplicitAuthorization ActionWidget::implFromText(const QString& text) +{ + if (text == "yes") { + return PolkitQt1::ActionDescription::Authorized; + } else if (text == "no") { + return PolkitQt1::ActionDescription::NotAuthorized; + } else if (text == "auth_admin") { + return PolkitQt1::ActionDescription::AdministratorAuthenticationRequired; + } else if (text == "auth_admin_keep") { + return PolkitQt1::ActionDescription::AdministratorAuthenticationRequiredRetained; + } else if (text == "auth_self") { + return PolkitQt1::ActionDescription::AuthenticationRequired; + } else if (text == "auth_self_keep") { + return PolkitQt1::ActionDescription::AuthenticationRequiredRetained; + } else { + return PolkitQt1::ActionDescription::Unknown; + } +} + +void ActionWidget::setImplicitAuthorization(PolkitQt1::ActionDescription::ImplicitAuthorization auth, QComboBox* box) +{ + switch (auth) { case PolkitQt1::ActionDescription::Authorized: - m_ui->anyComboBox->setCurrentIndex(0); + box->setCurrentIndex(0); break; case PolkitQt1::ActionDescription::NotAuthorized: - m_ui->anyComboBox->setCurrentIndex(1); + box->setCurrentIndex(1); break; case PolkitQt1::ActionDescription::AuthenticationRequired: - m_ui->anyComboBox->setCurrentIndex(4); + box->setCurrentIndex(4); break; case PolkitQt1::ActionDescription::AuthenticationRequiredRetained: - m_ui->anyComboBox->setCurrentIndex(5); + box->setCurrentIndex(5); break; case PolkitQt1::ActionDescription::AdministratorAuthenticationRequired: - m_ui->anyComboBox->setCurrentIndex(2); + box->setCurrentIndex(2); break; case PolkitQt1::ActionDescription::AdministratorAuthenticationRequiredRetained: - m_ui->anyComboBox->setCurrentIndex(3); + box->setCurrentIndex(3); break; } +} + +void ActionWidget::setAction(PolkitQt1::ActionDescription* action) +{ + m_action = action; + setImplicitAuthorization(action->implicitActive(), m_ui->activeComboBox); + setImplicitAuthorization(action->implicitInactive(), m_ui->inactiveComboBox); + setImplicitAuthorization(action->implicitAny(), m_ui->anyComboBox); + m_ui->descriptionLabel->setText(action->description()); m_ui->vendorLabel->setText(action->vendorName()); m_ui->vendorLabel->setUrl(action->vendorUrl()); m_ui->pixmapLabel->setPixmap(KIcon(action->iconName()).pixmap(64)); - qDBusRegisterMetaType(); - QDBusConnection::systemBus().connect("org.kde.polkitkde1.helper", "/Helper", "org.kde.polkitkde1.helper", - "policiesRetrieved", this, SLOT(slotPoliciesRetrieved(PKLAEntryList))); - QDBusMessage message = QDBusMessage::createMethodCall("org.kde.polkitkde1.helper", - "/Helper", - "org.kde.polkitkde1.helper", - QLatin1String("retrievePolicies")); - QDBusPendingCall reply = QDBusConnection::systemBus().asyncCall(message); + computeActionPolicies(); } -ActionWidget::~ActionWidget() -{ - } - -void ActionWidget::slotPoliciesRetrieved(const PKLAEntryList& policies) -{ -} - -} --- trunk/extragear/base/polkit-kde-1/kcmodules/polkitactions/ActionWidget.h #1067773:1067774 @@ -13,11 +13,9 @@ #include #include "../PKLAEntry.h" +#include -namespace PolkitQt1 { -class ActionDescription; -} - +class QComboBox; namespace Ui { class ActionWidget; } @@ -31,12 +29,20 @@ explicit ActionWidget(PolkitQt1::ActionDescription *action, QWidget* parent = 0); virtual ~ActionWidget(); - public slots: - void slotPoliciesRetrieved(const PKLAEntryList &policies); + public Q_SLOTS: + void setAction(PolkitQt1::ActionDescription *action); + void computeActionPolicies(); + private Q_SLOTS: + void reloadPKLAs(); + private: + PolkitQt1::ActionDescription::ImplicitAuthorization implFromText(const QString &text); + void setImplicitAuthorization(PolkitQt1::ActionDescription::ImplicitAuthorization auth, QComboBox *box); + Ui::ActionWidget *m_ui; PolkitQt1::ActionDescription *m_action; + PKLAEntryList m_entries; }; }