Skip to content

Commit 6fc6384

Browse files
committed
fix: Add VPN configuration parameter check
Add VPN configuration parameter check pms: BUG-303545
1 parent 8f507a6 commit 6fc6384

File tree

6 files changed

+479
-7
lines changed

6 files changed

+479
-7
lines changed

dcc-network/qml/PageVPNSettings.qml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,10 @@ DccObject {
3232
sectionIPv6.setConfig(config.ipv6)
3333
sectionDNS.setConfig((config.hasOwnProperty("ipv4") && config.ipv4.hasOwnProperty("dns")) ? config.ipv4.dns : null)
3434
modified = config.connection.uuid === "{00000000-0000-0000-0000-000000000000}"
35+
36+
if (c.check && (!sectionGeneric.checkInput() || !sectionVPN.checkInput() || !sectionIPv4.checkInput() || !sectionIPv6.checkInput() || !sectionDNS.checkInput())) {
37+
return
38+
}
3539
}
3640

3741
weight: 10

dcc-network/qml/SectionVPN.qml

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -796,7 +796,14 @@ DccTitleObject {
796796
dataMapChanged()
797797
root.editClicked()
798798
}
799-
Component.onCompleted: currentIndex = root.dataMap.hasOwnProperty(dccObj.name) ? indexOfValue(root.dataMap[dccObj.name]) : 0
799+
Component.onCompleted: {
800+
currentIndex = root.dataMap.hasOwnProperty(dccObj.name) ? indexOfValue(root.dataMap[dccObj.name]) : 0
801+
if (currentIndex < 0) {
802+
currentIndex = 0
803+
root.dataMap[dccObj.name] = currentValue
804+
dataMapChanged()
805+
}
806+
}
800807
}
801808
}
802809
DccObject {

net-view/operation/private/netmanagerthreadprivate.cpp

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
#include "networkdetails.h"
1818
#include "networkdevicebase.h"
1919
#include "networkmanagerqt/manager.h"
20+
#include "private/vpnparameterschecker.h"
2021
#include "wireddevice.h"
2122
#include "wirelessdevice.h"
2223

@@ -961,8 +962,16 @@ void NetManagerThreadPrivate::doConnectOrInfo(const QString &id, NetType::NetIte
961962
case NetType::ConnectionItem: {
962963
NetworkManager::Connection::Ptr conn = findConnection(id);
963964
if (conn) {
965+
if (conn->settings()->connectionType() == NetworkManager::ConnectionSettings::ConnectionType::Vpn) {
966+
QSharedPointer<VPNParametersChecker> checker(VPNParametersChecker::createVpnChecker(conn.data()));
967+
if (!checker->isValid()) {
968+
QVariantMap p = param;
969+
p.insert("check", true);
970+
doGetConnectInfo(id, type, p);
971+
return;
972+
}
973+
}
964974
QString devicePath;
965-
NetworkManager::isNetworkingEnabled();
966975
for (NetworkManager::Device::Ptr device : NetworkManager::networkInterfaces()) {
967976
NetworkManager::Connection::List connections = device->availableConnections();
968977
NetworkManager::Connection::List::iterator itConnection = std::find_if(connections.begin(), connections.end(), [conn](NetworkManager::Connection::Ptr connection) {
@@ -1356,6 +1365,9 @@ void NetManagerThreadPrivate::doGetConnectInfo(const QString &id, NetType::NetIt
13561365
typeMap.insert("optionalDevice", optionalDevice);
13571366
retParam[deviceKey] = typeMap;
13581367
}
1368+
if (param.value("check").toBool()) {
1369+
retParam.insert("check", true);
1370+
}
13591371
Q_EMIT request(NetManager::ConnectInfo, id, retParam);
13601372
} break;
13611373
case NetType::HotspotControlItem:
@@ -1534,8 +1546,8 @@ void NetManagerThreadPrivate::changeVpnId()
15341546
NetworkManager::Connection::Ptr uuidConn = findConnectionByUuid(m_newVPNuuid);
15351547
if (uuidConn) {
15361548
ConnectionSettings::Ptr connSettings = uuidConn->settings();
1537-
QString vpnName = connectionSuffixNum(connSettings->id() + "(%1)");
1538-
if (vpnName.isEmpty()) {
1549+
QString vpnName = connectionSuffixNum(connSettings->id() + "(%1)", connSettings->id(), uuidConn.data());
1550+
if (vpnName.isEmpty() || vpnName == connSettings->id()) {
15391551
m_newVPNuuid.clear();
15401552
return;
15411553
}
@@ -2804,7 +2816,7 @@ void NetManagerThreadPrivate::requestPassword(const QString &dev, const QString
28042816
Q_EMIT requestInputPassword(dev, id, param);
28052817
}
28062818

2807-
QString NetManagerThreadPrivate::connectionSuffixNum(const QString &matchConnName, const QString &name)
2819+
QString NetManagerThreadPrivate::connectionSuffixNum(const QString &matchConnName, const QString &name, NetworkManager::Connection *exception)
28082820
{
28092821
if (matchConnName.isEmpty()) {
28102822
return QString();
@@ -2814,7 +2826,9 @@ QString NetManagerThreadPrivate::connectionSuffixNum(const QString &matchConnNam
28142826
QStringList connNameList;
28152827

28162828
for (const auto &conn : connList) {
2817-
connNameList.append(conn->name());
2829+
if (conn.data() != exception) {
2830+
connNameList.append(conn->name());
2831+
}
28182832
}
28192833
if (!name.isEmpty() && !connNameList.contains(name)) {
28202834
return name;

net-view/operation/private/netmanagerthreadprivate.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -255,7 +255,7 @@ protected Q_SLOTS:
255255

256256
AccessPoints *fromApID(const QString &id);
257257
void requestPassword(const QString &dev, const QString &id, const QVariantMap &param);
258-
QString connectionSuffixNum(const QString &matchConnName, const QString &name = QString());
258+
QString connectionSuffixNum(const QString &matchConnName, const QString &name = QString(), NetworkManager::Connection *exception = nullptr);
259259
NetworkManager::WirelessSecuritySetting::KeyMgmt getKeyMgmtByAp(NetworkManager::AccessPoint *ap);
260260

261261
static NetType::NetDeviceStatus toNetDeviceStatus(ConnectionStatus status);

0 commit comments

Comments
 (0)