From 9e86b90bba8d373f530438192cb1622831e71e94 Mon Sep 17 00:00:00 2001 From: Eric Hameleers Date: Thu, 18 Jun 2020 19:31:54 +0200 Subject: Fix KDEBUG 423093 See https://bugs.kde.org/show_bug.cgi?id=423093 (Password is asked twice when connecting to a new WiFi network) Fixed in Frameworks 5.72.0 and Plasma 5.20.0, but annoying enough that I applied the patches that were made available. --- kde/patch/plasma5-nm/plasma-nm-fixes.patch | 322 +++++++++++++++++++++++++++++ 1 file changed, 322 insertions(+) create mode 100644 kde/patch/plasma5-nm/plasma-nm-fixes.patch (limited to 'kde/patch/plasma5-nm/plasma-nm-fixes.patch') diff --git a/kde/patch/plasma5-nm/plasma-nm-fixes.patch b/kde/patch/plasma5-nm/plasma-nm-fixes.patch new file mode 100644 index 0000000..d98448d --- /dev/null +++ b/kde/patch/plasma5-nm/plasma-nm-fixes.patch @@ -0,0 +1,322 @@ +diff --git a/applet/declarative/contents/ui/main.qml b/applet/declarative/contents/ui/main.qml +index 8ea88cc..aa81707 100644 +--- a/applet/declarative/contents/ui/main.qml ++++ b/applet/declarative/contents/ui/main.qml +@@ -19,6 +19,7 @@ + */ + + import QtQuick 1.1 ++import org.kde.plasma.extras 0.1 as PlasmaExtras + import org.kde.plasma.components 0.1 as PlasmaComponents + import org.kde.plasma.core 0.1 as PlasmaCore + import org.kde.networkmanagement 0.1 as PlasmaNM +@@ -77,16 +78,7 @@ Item { + anchors.fill: parent + } + +- ListView { +- id: connectionView; +- +- property bool expandedItem: false; +- property string previouslyExpandedItem: ""; +- +- property bool activeExpanded: true; +- property bool previousExpanded: true; +- property bool unknownExpanded: true; +- ++ PlasmaExtras.ScrollArea { + anchors { + left: parent.left; + right: parent.right; +@@ -95,50 +87,64 @@ Item { + topMargin: padding.margins.top; + bottomMargin: padding.margins.bottom + } +- clip: true +- model: connectionSortModel; +- currentIndex: -1; +- interactive: true; +- boundsBehavior: Flickable.StopAtBounds; +- section.property: "itemSection"; +- section.delegate: SectionHeader { +- onHideSection: { +- if (section == i18n("Active connections")) { +- connectionView.activeExpanded = false; +- } else if (section == i18n("Previous connections")) { +- connectionView.previousExpanded = false; +- } else { +- connectionView.unknownExpanded = false; ++ ++ ListView { ++ id: connectionView; ++ ++ property bool expandedItem: false; ++ property string previouslyExpandedItem: ""; ++ ++ property bool activeExpanded: true; ++ property bool previousExpanded: true; ++ property bool unknownExpanded: true; ++ ++ anchors.fill: parent; ++ ++ clip: true ++ model: connectionSortModel; ++ currentIndex: -1; ++ interactive: true; ++ boundsBehavior: Flickable.StopAtBounds; ++ section.property: "itemSection"; ++ section.delegate: SectionHeader { ++ onHideSection: { ++ if (section == i18n("Active connections")) { ++ connectionView.activeExpanded = false; ++ } else if (section == i18n("Previous connections")) { ++ connectionView.previousExpanded = false; ++ } else { ++ connectionView.unknownExpanded = false; ++ } + } +- } + +- onShowSection: { +- if (section == i18n("Active connections")) { +- connectionView.activeExpanded = true; +- } else if (section == i18n("Previous connections")) { +- connectionView.previousExpanded = true; +- } else { +- connectionView.unknownExpanded = true; ++ onShowSection: { ++ if (section == i18n("Active connections")) { ++ connectionView.activeExpanded = true; ++ } else if (section == i18n("Previous connections")) { ++ connectionView.previousExpanded = true; ++ } else { ++ connectionView.unknownExpanded = true; ++ } + } + } +- } + +- delegate: ConnectionItem { +- expanded: connectionView.expandedItem && connectionView.previouslyExpandedItem == itemUni; +- onItemExpanded: { +- if (itemExpanded) { +- connectionView.expandedItem = true; +- connectionView.previouslyExpandedItem = itemUni;; +- connectionView.currentIndex = index; +- } else { +- connectionView.expandedItem = false; +- connectionView.previouslyExpandedItem = ""; ++ delegate: ConnectionItem { ++ expanded: connectionView.expandedItem && connectionView.previouslyExpandedItem == itemUni; ++ onItemExpanded: { ++ if (itemExpanded) { ++ connectionView.expandedItem = true; ++ connectionView.previouslyExpandedItem = itemUni;; ++ connectionView.currentIndex = index; ++ } else { ++ connectionView.expandedItem = false; ++ connectionView.previouslyExpandedItem = ""; ++ } + } +- } + +- ListView.onRemove: { +- if (ListView.isCurrentItem) { +- connectionView.previouslyExpandedItem = ""; ++ ListView.onRemove: { ++ if (ListView.isCurrentItem) { ++ connectionView.previouslyExpandedItem = ""; ++ } + } + } + } +diff --git a/declarative-plugins/applet/connectionicon.cpp b/declarative-plugins/applet/connectionicon.cpp +index c3f8540..76bdca0 100644 +--- a/declarative-plugins/applet/connectionicon.cpp ++++ b/declarative-plugins/applet/connectionicon.cpp +@@ -166,12 +166,24 @@ void ConnectionIcon::setIcons() + + foreach (const NetworkManager::ActiveConnection::Ptr & active, actives) { + if (((active->default4() || active->default6()) && active->state() == NetworkManager::ActiveConnection::Activated) || !defaultRouteExists) { ++ NetworkManager::ActiveConnection::Ptr activeConnection; ++ if (active->vpn()) { ++ NetworkManager::ActiveConnection::Ptr activeTmp; ++ activeTmp = NetworkManager::findActiveConnection(active->specificObject()); ++ if (activeTmp) { ++ activeConnection = activeTmp; ++ } + +- if (active->vpn() || active->devices().isEmpty()) { ++ vpnFound = true; ++ NMAppletDebug() << "Emit signal setHoverIcon(object-locked)"; ++ Q_EMIT setHoverIcon("object-locked"); ++ } else { ++ activeConnection = active; ++ } ++ if (activeConnection->devices().isEmpty()) { + continue; + } +- +- NetworkManager::Device::Ptr device = NetworkManager::findNetworkInterface(active->devices().first()); ++ NetworkManager::Device::Ptr device = NetworkManager::findNetworkInterface(activeConnection->devices().first()); + if (device) { + NetworkManager::Device::Type type = device->type(); + +@@ -184,7 +196,7 @@ void ConnectionIcon::setIcons() + setWirelessIconForSignalStrength(100); + connectionFound = true; + } else { +- NetworkManager::AccessPoint::Ptr ap = wifiDevice->findAccessPoint(active->specificObject()); ++ NetworkManager::AccessPoint::Ptr ap = wifiDevice->findAccessPoint(activeConnection->specificObject()); + if (ap) { + setWirelessIcon(device, ap->ssid()); + connectionFound = true; +@@ -222,9 +234,7 @@ void ConnectionIcon::setIcons() + } + } + } +- } +- +- if (active->vpn() && active->state() == NetworkManager::ActiveConnection::Activated) { ++ } else if (active->vpn() && active->state() == NetworkManager::ActiveConnection::Activated) { + vpnFound = true; + NMAppletDebug() << "Emit signal setHoverIcon(object-locked)"; + Q_EMIT setHoverIcon("object-locked"); +diff --git a/declarative-plugins/applet/networkstatus.cpp b/declarative-plugins/applet/networkstatus.cpp +index d63066d..8149da9 100644 +--- a/declarative-plugins/applet/networkstatus.cpp ++++ b/declarative-plugins/applet/networkstatus.cpp +@@ -129,8 +129,8 @@ void NetworkStatus::changeTooltip() + } + + QString tooltip = ""; +- QString format = "%1 - %2
%3

"; +- QString formatDefault = "%1 - %2
%3

"; ++ const QString format = "%1 - %2
%3

"; ++ const QString formatDefault = "%1 - %2
%3

"; + + foreach (const NetworkManager::ActiveConnection::Ptr & active, NetworkManager::activeConnections()) { + if (!active->devices().isEmpty()) { +@@ -145,7 +145,6 @@ void NetworkStatus::changeTooltip() + } else { + devName = device->ipInterfaceName(); + } +-// conType = NetworkManager::ConnectionSettings::typeAsString(active->connection()->settings()->connectionType()); + if (active->vpn()) { + conType = i18n("VPN Connection"); + } else { +diff --git a/declarative-plugins/model/model.cpp b/declarative-plugins/model/model.cpp +index 1b3f4c3..bb88362 100644 +--- a/declarative-plugins/model/model.cpp ++++ b/declarative-plugins/model/model.cpp +@@ -230,7 +230,7 @@ void Model::addConnection(const QString& connection, const QString& device) + { + NetworkManager::Connection::Ptr con = NetworkManager::findConnection(connection); + +- if (con->settings()->isSlave()) { ++ if (con->settings()->isSlave() || con->name().isEmpty() || con->uuid().isEmpty()) { + return; + } + +@@ -395,7 +395,11 @@ void Model::removeWirelessNetwork(const QString& ssid, const QString& device) + if (wirelessDevice) { + accessPoint = wirelessDevice->findAccessPoint(item->specificPath()); + } +- if (accessPoint && accessPoint->mode() == NetworkManager::AccessPoint::Adhoc && ++ ++ // When accesspoint in ad-hoc mode dissapears, we should remove the item only when there is no connection. Similar case is when ++ // a wireless device is in AP mode, but in this case there could be only one visible AP and this should always be associated with some connection. ++ if (accessPoint && ((accessPoint->mode() == NetworkManager::AccessPoint::Adhoc && !item->connectionPath().isEmpty()) || ++ wirelessDevice->mode() == NetworkManager::WirelessDevice::ApMode) && + NetworkManager::isWirelessEnabled() && NetworkManager::isWirelessHardwareEnabled()) { + item->setWirelessNetwork(QString()); + if (updateItem(item)) { +diff --git a/declarative-plugins/model/modelitem.cpp b/declarative-plugins/model/modelitem.cpp +index 9a5931f..58d5c42 100644 +--- a/declarative-plugins/model/modelitem.cpp ++++ b/declarative-plugins/model/modelitem.cpp +@@ -151,6 +151,17 @@ QString ModelItem::icon() const + break; + case NetworkManager::ConnectionSettings::Wireless: + if (m_signal == 0 ) { ++ if (!m_connectionPath.isEmpty()) { ++ NetworkManager::Connection::Ptr con = NetworkManager::findConnection(m_connectionPath); ++ if (con) { ++ NetworkManager::WirelessSetting::Ptr wirelessSetting; ++ wirelessSetting = con->settings()->setting(NetworkManager::Setting::Wireless).dynamicCast(); ++ if (wirelessSetting && (wirelessSetting->mode() == NetworkManager::WirelessSetting::Adhoc || ++ wirelessSetting->mode() == NetworkManager::WirelessSetting::Ap)) { ++ return "network-wireless-100"; ++ } ++ } ++ } + return "network-wireless-00"; + } else if (m_signal < 20) { + return "network-wireless-20"; +diff --git a/kded/bluetoothmonitor.cpp b/kded/bluetoothmonitor.cpp +index 2221d09..5d0218b 100644 +--- a/kded/bluetoothmonitor.cpp ++++ b/kded/bluetoothmonitor.cpp +@@ -220,6 +220,7 @@ void BluetoothMonitor::init() + + mDunDevice = reply.value(); + } ++ + #if WITH_MODEMMANAGER_SUPPORT + void BluetoothMonitor::modemAdded(const QString &udi) + { +diff --git a/lib/editor/bridgewidget.cpp b/lib/editor/bridgewidget.cpp +index 8815eb2..95344c4 100644 +--- a/lib/editor/bridgewidget.cpp ++++ b/lib/editor/bridgewidget.cpp +@@ -216,5 +216,5 @@ void BridgeWidget::populateBridges() + + bool BridgeWidget::isValid() const + { +- return !m_ui->ifaceName->text().isEmpty() && m_ui->bridges->count() > 0; ++ return !m_ui->ifaceName->text().isEmpty(); + } +diff --git a/vpn/vpnc/vpnc.cpp b/vpn/vpnc/vpnc.cpp +index d4a511d..645249d 100644 +--- a/vpn/vpnc/vpnc.cpp ++++ b/vpn/vpnc/vpnc.cpp +@@ -145,7 +145,6 @@ NMVariantMapMap VpncUiPlugin::importConnectionSettings(const QString &fileName) + KConfigGroup cg(config, "main"); // Keys&Values are stored under [main] + if (cg.exists()) { + // Setup cisco-decrypt binary to decrypt the passwords +- QStringList decrArgs; + const QString ciscoDecryptBinary = KStandardDirs::findExe("cisco-decrypt", QString::fromLocal8Bit(qgetenv("PATH")) + ":/usr/lib/vpnc"); + if (ciscoDecryptBinary.isEmpty()) { + mErrorMessage = i18n("Needed executable cisco-decrypt could not be found."); +@@ -174,11 +173,11 @@ NMVariantMapMap VpncUiPlugin::importConnectionSettings(const QString &fileName) + } + else if (!decrPlugin->readStringKeyValue(cg,"enc_UserPassword").isEmpty() && !ciscoDecryptBinary.isEmpty()) { + // Decrypt the password and insert into map +- decrArgs.clear(); +- decrArgs << decrPlugin->readStringKeyValue(cg,"enc_UserPassword"); +- decrPlugin->ciscoDecrypt->setProgram(ciscoDecryptBinary, decrArgs); ++ decrPlugin->ciscoDecrypt->setProgram(ciscoDecryptBinary); + decrPlugin->ciscoDecrypt->start(); +- if (decrPlugin->ciscoDecrypt->waitForStarted() && decrPlugin->ciscoDecrypt->waitForFinished()) { ++ decrPlugin->ciscoDecrypt->waitForStarted(); ++ decrPlugin->ciscoDecrypt->write(decrPlugin->readStringKeyValue(cg,"enc_UserPassword").toUtf8()); ++ if (decrPlugin->ciscoDecrypt->waitForFinished()) { + secretData.insert(NM_VPNC_KEY_XAUTH_PASSWORD, decrPlugin->decryptedPasswd); + } + } +@@ -203,11 +202,11 @@ NMVariantMapMap VpncUiPlugin::importConnectionSettings(const QString &fileName) + } + else if (!decrPlugin->readStringKeyValue(cg,"enc_GroupPwd").isEmpty() && !ciscoDecryptBinary.isEmpty()) { + //Decrypt the password and insert into map +- decrArgs.clear(); +- decrArgs << decrPlugin->readStringKeyValue(cg,"enc_GroupPwd"); +- decrPlugin->ciscoDecrypt->setProgram(ciscoDecryptBinary, decrArgs); ++ decrPlugin->ciscoDecrypt->setProgram(ciscoDecryptBinary); + decrPlugin->ciscoDecrypt->start(); +- if (decrPlugin->ciscoDecrypt->waitForStarted() && decrPlugin->ciscoDecrypt->waitForFinished()) { ++ decrPlugin->ciscoDecrypt->waitForStarted(); ++ decrPlugin->ciscoDecrypt->write(decrPlugin->readStringKeyValue(cg,"enc_GroupPwd").toUtf8()); ++ if (decrPlugin->ciscoDecrypt->waitForFinished()) { + secretData.insert(NM_VPNC_KEY_SECRET, decrPlugin->decryptedPasswd); + data.insert(NM_VPNC_KEY_SECRET"-flags", QString::number(NetworkManager::Setting::AgentOwned)); + } -- cgit v1.2.3