Add extra IPv6 address validation, fix crash when saving IPv6 settings
This commit is contained in:
parent
04c53a4e03
commit
d69935679c
@ -22,6 +22,11 @@ Ipv6SettingsTab::~Ipv6SettingsTab()
|
||||
|
||||
QVariantMap Ipv6SettingsTab::readSettings()
|
||||
{
|
||||
// If the user has invalid data in here, just return the original settings data
|
||||
if (!checkValidity()) {
|
||||
return origSettings;
|
||||
}
|
||||
|
||||
QVariantMap output;
|
||||
switch (ui->methodComboBox->currentIndex()) {
|
||||
case 0: // Automatic
|
||||
@ -79,6 +84,7 @@ QVariantMap Ipv6SettingsTab::readSettings()
|
||||
|
||||
void Ipv6SettingsTab::loadSettings(QVariantMap settings)
|
||||
{
|
||||
origSettings = settings; // We may need to restore these if something about the settings the user puts in is invalid.
|
||||
if (settings["ipv6Method"].isValid()) {
|
||||
switch (settings["ipv6Method"].toInt()) {
|
||||
case ConnectionSettingsEngine::Ipv6Automatic:
|
||||
@ -179,3 +185,35 @@ void Ipv6SettingsTab::onManualIpv6ConfigurationRemoveButtonClicked()
|
||||
{
|
||||
ui->manualIpv6ConfigurationTable->removeRow(ui->manualIpv6ConfigurationTable->currentRow());
|
||||
}
|
||||
|
||||
bool Ipv6SettingsTab::checkValidity()
|
||||
{
|
||||
// almost copied verbatim from plasma-nm
|
||||
if (ui->methodComboBox->currentIndex() == 4) { // manual
|
||||
if (!ui->manualIpv6ConfigurationTable->rowCount()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
for (int i = 0, rowCount = ui->manualIpv6ConfigurationTable->rowCount(); i < rowCount; i++) {
|
||||
QHostAddress ip = QHostAddress(ui->manualIpv6ConfigurationTable->item(i, 0)->text());
|
||||
const int prefix = ui->manualIpv6ConfigurationTable->item(i, 1)->text().toInt();
|
||||
QHostAddress gateway = QHostAddress(ui->manualIpv6ConfigurationTable->item(i, 2)->text());
|
||||
|
||||
if (ip.isNull() || !(prefix >= 1 && prefix <= 128) || (gateway.isNull() && !ui->manualIpv6ConfigurationTable->item(i, 2)->text().isEmpty())) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!ui->dnsServersLineEdit->text().isEmpty() && (ui->methodComboBox->currentIndex() == 0 || ui->methodComboBox->currentIndex() == 1 || ui->methodComboBox->currentIndex() == 4)) { // Automatic, AutomaticIPOnly, or Manual
|
||||
const QStringList tmp = ui->dnsServersLineEdit->text().split(QLatin1Char(','));
|
||||
for (const QString &str : tmp) {
|
||||
QHostAddress addr(str);
|
||||
if (addr.isNull()) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -30,6 +30,9 @@ private slots:
|
||||
|
||||
private:
|
||||
Ui::Ipv6SettingsTab *ui;
|
||||
QVariantMap origSettings;
|
||||
|
||||
bool checkValidity();
|
||||
};
|
||||
|
||||
#endif // IPV6SETTINGSTAB_H
|
||||
|
4
main.cpp
4
main.cpp
@ -4,6 +4,7 @@
|
||||
#include <QLocale>
|
||||
#include <QTranslator>
|
||||
#include <QDebug>
|
||||
#include <QDBusMetaType>
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
@ -18,6 +19,9 @@ int main(int argc, char *argv[])
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
qDBusRegisterMetaType<IpV6DBusAddress>();
|
||||
qDBusRegisterMetaType<IpV6DBusAddressList>();
|
||||
NetworkSelector w;
|
||||
w.show();
|
||||
return a.exec();
|
||||
|
Loading…
x
Reference in New Issue
Block a user