From f3cd32503240eee2c0f1749ba5410dddb59355a4 Mon Sep 17 00:00:00 2001 From: Michele Calgaro Date: Sat, 22 Feb 2020 14:08:40 +0900 Subject: Prevent tdenetworkmanager from crashing when using unmanaged devices. This relates to bug 2929. Signed-off-by: Michele Calgaro (cherry picked from commit 3192a72a465d6e5051ab77a43e75716bb641441c) --- .../network-manager/network-manager.cpp | 83 ++++++++++++---------- 1 file changed, 46 insertions(+), 37 deletions(-) (limited to 'tdecore/tdehw') diff --git a/tdecore/tdehw/networkbackends/network-manager/network-manager.cpp b/tdecore/tdehw/networkbackends/network-manager/network-manager.cpp index 2f11dd59b..d15db3dc8 100644 --- a/tdecore/tdehw/networkbackends/network-manager/network-manager.cpp +++ b/tdecore/tdehw/networkbackends/network-manager/network-manager.cpp @@ -1158,16 +1158,16 @@ TQString TDENetworkConnectionManager_BackendNM::deviceInterfaceString(TQString d return (*it); } } - return ""; + return TQString::null; } else { // Error! PRINT_ERROR((error.name() + ": " + error.message())) - return ""; + return TQString::null; } } else { - return ""; + return TQString::null; } } @@ -1251,7 +1251,7 @@ TDENetworkConnectionManager_BackendNM::TDENetworkConnectionManager_BackendNM(TDE d->m_vpnProxy->setConnection(TQT_DBusConnection::systemBus()); d->m_dbusDeviceString = deviceInterfaceString(deviceNode()); - if (d->m_dbusDeviceString != "") { + if (!d->m_dbusDeviceString.isEmpty()) { d->m_networkDeviceProxy = new DBus::DeviceProxy(NM_DBUS_SERVICE, d->m_dbusDeviceString); d->m_networkDeviceProxy->setConnection(TQT_DBusConnection::systemBus()); if (deviceType() == TDENetworkDeviceType::WiFi) { @@ -1569,28 +1569,27 @@ TDENetworkDeviceType::TDENetworkDeviceType TDENetworkConnectionManager_BackendNM if (!m_networkDevice) { return TDENetworkDeviceType::BackendOnly; } - else { - if (d->m_dbusDeviceString != "") { - // Query NM for the device type - TQT_DBusError error; - d->m_dbusDeviceString = deviceInterfaceString(deviceNode()); - DBus::DeviceProxy genericDevice(NM_DBUS_SERVICE, d->m_dbusDeviceString); - genericDevice.setConnection(TQT_DBusConnection::systemBus()); - TDENetworkDeviceType::TDENetworkDeviceType ret = nmDeviceTypeToTDEDeviceType(genericDevice.getDeviceType(error)); - if (error.isValid()) { - // Error! - PRINT_ERROR((error.name() + ": " + error.message())) - return TDENetworkDeviceType::Other; - } - else { - return ret; - } - } - else { + + // Query NM for the device type + TQT_DBusError error; + d->m_dbusDeviceString = deviceInterfaceString(deviceNode()); + if (!d->m_dbusDeviceString.isEmpty()) { + DBus::DeviceProxy genericDevice(NM_DBUS_SERVICE, d->m_dbusDeviceString); + genericDevice.setConnection(TQT_DBusConnection::systemBus()); + TDENetworkDeviceType::TDENetworkDeviceType ret = nmDeviceTypeToTDEDeviceType(genericDevice.getDeviceType(error)); + if (error.isValid()) { // Error! - PRINT_ERROR(TQString("Invalid DBUS device string '%1'").arg(d->m_dbusDeviceString)) + PRINT_ERROR((error.name() + ": " + error.message())) return TDENetworkDeviceType::Other; } + else { + return ret; + } + } + else { + // Error! + PRINT_ERROR(TQString("Invalid empty DBUS device string")) + return TDENetworkDeviceType::Other; } } @@ -4843,6 +4842,10 @@ TDENetworkConnectionStatus::TDENetworkConnectionStatus TDENetworkConnectionManag else { d->m_dbusDeviceString = deviceInterfaceString(deviceNode()); } + if (d->m_dbusDeviceString.isEmpty()) { + PRINT_ERROR(TQString("Invalid empty DBUS device string")) + return TDENetworkConnectionStatus::Invalid; + } #ifndef USE_ASYNC_DBUS_CONNECTION_COMMAND_CALLS TQT_DBusObjectPath active_connection; ret = d->m_networkManagerProxy->ActivateConnection(existingConnection, TQT_DBusObjectPath(d->m_dbusDeviceString.ascii()), TQT_DBusObjectPath("/"), active_connection, error); @@ -5036,6 +5039,10 @@ TDENetworkConnectionStatus::TDENetworkConnectionStatus TDENetworkConnectionManag else { d->m_dbusDeviceString = deviceInterfaceString(deviceNode()); } + if (d->m_dbusDeviceString.isEmpty()) { + PRINT_ERROR(TQString("Invalid empty DBUS device string")) + return TDENetworkConnectionStatus::Invalid; + } #ifndef USE_ASYNC_DBUS_CONNECTION_COMMAND_CALLS ret = d->m_networkManagerProxy->DeactivateConnection(existingConnection, error); if (ret && error.isValid()) { @@ -5322,20 +5329,22 @@ TDENetworkHWNeighborList* TDENetworkConnectionManager_BackendNM::siteSurvey() { clearTDENetworkHWNeighborList(); if (myDeviceType == TDENetworkDeviceType::WiFi) { - DBus::WiFiDeviceProxy wiFiDevice(NM_DBUS_SERVICE, d->m_dbusDeviceString); - wiFiDevice.setConnection(TQT_DBusConnection::systemBus()); - // FIXME - // Should call wiFiDevice.RequestScanAsync first to rescan all access points - TQT_DBusObjectPathList accessPoints; - ret = wiFiDevice.GetAccessPoints(accessPoints, error); - if (ret) { - TQT_DBusObjectPathList::iterator it; - for (it = accessPoints.begin(); it != accessPoints.end(); ++it) { - TDENetworkWiFiAPInfo* apInfo = getAccessPointDetails(TQString(*it)); - if (apInfo) { - m_hwNeighborList->append(apInfo); - // Ensure that this AP is monitored for changes - d->internalProcessWiFiAccessPointAdded(*it); + if (!d->m_dbusDeviceString.isEmpty()) { + DBus::WiFiDeviceProxy wiFiDevice(NM_DBUS_SERVICE, d->m_dbusDeviceString); + wiFiDevice.setConnection(TQT_DBusConnection::systemBus()); + // FIXME + // Should call wiFiDevice.RequestScanAsync first to rescan all access points + TQT_DBusObjectPathList accessPoints; + ret = wiFiDevice.GetAccessPoints(accessPoints, error); + if (ret) { + TQT_DBusObjectPathList::iterator it; + for (it = accessPoints.begin(); it != accessPoints.end(); ++it) { + TDENetworkWiFiAPInfo* apInfo = getAccessPointDetails(TQString(*it)); + if (apInfo) { + m_hwNeighborList->append(apInfo); + // Ensure that this AP is monitored for changes + d->internalProcessWiFiAccessPointAdded(*it); + } } } } -- cgit v1.2.1