File indexing completed on 2024-05-05 17:42:50
0001 /* 0002 SPDX-FileCopyrightText: 2013 Jan Grulich <jgrulich@redhat.com> 0003 SPDX-FileCopyrightText: 2020 Douglas Kosovic <doug@uq.edu.au> 0004 0005 SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL 0006 */ 0007 0008 #include "l2tppppwidget.h" 0009 #include "nm-l2tp-service.h" 0010 #include "ui_l2tpppp.h" 0011 0012 #include <KAcceleratorManager> 0013 #include <KLocalizedString> 0014 0015 L2tpPPPWidget::L2tpPPPWidget(const NetworkManager::VpnSetting::Ptr &setting, QWidget *parent, bool need_peer_eap) 0016 : QDialog(parent) 0017 , m_ui(new Ui::L2tpPppWidget) 0018 , m_need_peer_eap(need_peer_eap) 0019 { 0020 m_ui->setupUi(this); 0021 0022 setWindowTitle(i18n("L2TP PPP Options")); 0023 0024 KAcceleratorManager::manage(this); 0025 0026 loadConfig(setting); 0027 } 0028 0029 L2tpPPPWidget::~L2tpPPPWidget() 0030 { 0031 delete m_ui; 0032 } 0033 0034 void L2tpPPPWidget::loadConfig(const NetworkManager::VpnSetting::Ptr &setting) 0035 { 0036 const QString yesString = QLatin1String("yes"); 0037 0038 // General settings 0039 const NMStringMap dataMap = setting->data(); 0040 0041 if (m_need_peer_eap) { 0042 m_ui->grp_authenfication->setVisible(false); 0043 resize(width(), sizeHint().height()); 0044 } else { 0045 // Authentication options 0046 const bool refuse_pap = (dataMap[NM_L2TP_KEY_REFUSE_PAP] == yesString); 0047 const bool refuse_chap = (dataMap[NM_L2TP_KEY_REFUSE_CHAP] == yesString); 0048 const bool refuse_mschap = (dataMap[NM_L2TP_KEY_REFUSE_MSCHAP] == yesString); 0049 const bool refuse_mschapv2 = (dataMap[NM_L2TP_KEY_REFUSE_MSCHAPV2] == yesString); 0050 const bool refuse_eap = (dataMap[NM_L2TP_KEY_REFUSE_EAP] == yesString); 0051 0052 QListWidgetItem *item = nullptr; 0053 item = m_ui->listWidget->item(0); // PAP 0054 item->setCheckState(refuse_pap ? Qt::Unchecked : Qt::Checked); 0055 item = m_ui->listWidget->item(1); // CHAP 0056 item->setCheckState(refuse_chap ? Qt::Unchecked : Qt::Checked); 0057 item = m_ui->listWidget->item(2); // MSCHAP 0058 item->setCheckState(refuse_mschap ? Qt::Unchecked : Qt::Checked); 0059 item = m_ui->listWidget->item(3); // MSCHAPv2 0060 item->setCheckState(refuse_mschapv2 ? Qt::Unchecked : Qt::Checked); 0061 item = m_ui->listWidget->item(4); // EAP 0062 item->setCheckState(refuse_eap ? Qt::Unchecked : Qt::Checked); 0063 } 0064 0065 // Cryptography and compression 0066 const bool mppe = (dataMap[NM_L2TP_KEY_REQUIRE_MPPE] == yesString); 0067 const bool mppe40 = (dataMap[NM_L2TP_KEY_REQUIRE_MPPE_40] == yesString); 0068 const bool mppe128 = (dataMap[NM_L2TP_KEY_REQUIRE_MPPE_128] == yesString); 0069 const bool mppe_stateful = (dataMap[NM_L2TP_KEY_MPPE_STATEFUL] == yesString); 0070 0071 if (mppe || mppe40 || mppe128) { // If MPPE is use 0072 m_ui->gbMPPE->setChecked(mppe || mppe40 || mppe128); 0073 if (mppe128) { 0074 m_ui->cbMPPECrypto->setCurrentIndex(1); // 128 bit 0075 } else if (mppe40) { 0076 m_ui->cbMPPECrypto->setCurrentIndex(2); // 40 bit 0077 } else { 0078 m_ui->cbMPPECrypto->setCurrentIndex(0); // Any 0079 } 0080 m_ui->cbstatefulEncryption->setChecked(mppe_stateful); 0081 } 0082 0083 const bool nobsd = (dataMap[NM_L2TP_KEY_NOBSDCOMP] == yesString); 0084 m_ui->cbBSD->setChecked(!nobsd); 0085 0086 const bool nodeflate = (dataMap[NM_L2TP_KEY_NODEFLATE] == yesString); 0087 m_ui->cbdeflate->setChecked(!nodeflate); 0088 0089 const bool novjcomp = (dataMap[NM_L2TP_KEY_NO_VJ_COMP] == yesString); 0090 m_ui->cbTCPheaders->setChecked(!novjcomp); 0091 0092 const bool nopcomp = (dataMap[NM_L2TP_KEY_NO_PCOMP] == yesString); 0093 m_ui->cbCompressionNegotiation->setChecked(!nopcomp); 0094 0095 const bool noaccomp = (dataMap[NM_L2TP_KEY_NO_ACCOMP] == yesString); 0096 m_ui->cbAddressControlCompression->setChecked(!noaccomp); 0097 0098 // Echo 0099 const int lcp_echo_interval = QString(dataMap[NM_L2TP_KEY_LCP_ECHO_INTERVAL]).toInt(); 0100 m_ui->cbsendEcho->setChecked(lcp_echo_interval > 0); 0101 0102 if (dataMap.contains(QLatin1String(NM_L2TP_KEY_MTU))) { 0103 m_ui->sbMTU->setValue(QString(dataMap[NM_L2TP_KEY_MTU]).toInt()); 0104 } 0105 0106 if (dataMap.contains(QLatin1String(NM_L2TP_KEY_MTU))) { 0107 m_ui->sbMRU->setValue(QString(dataMap[NM_L2TP_KEY_MRU]).toInt()); 0108 } 0109 } 0110 0111 NMStringMap L2tpPPPWidget::setting() const 0112 { 0113 NMStringMap result; 0114 const QString yesString = QLatin1String("yes"); 0115 0116 if (!m_need_peer_eap) { 0117 QListWidgetItem *item = nullptr; 0118 item = m_ui->listWidget->item(0); // PAP 0119 if (item->checkState() == Qt::Unchecked) { 0120 result.insert(NM_L2TP_KEY_REFUSE_PAP, yesString); 0121 } 0122 item = m_ui->listWidget->item(1); // CHAP 0123 if (item->checkState() == Qt::Unchecked) { 0124 result.insert(NM_L2TP_KEY_REFUSE_CHAP, yesString); 0125 } 0126 item = m_ui->listWidget->item(2); // MSCHAP 0127 if (item->checkState() == Qt::Unchecked) { 0128 result.insert(NM_L2TP_KEY_REFUSE_MSCHAP, yesString); 0129 } 0130 item = m_ui->listWidget->item(3); // MSCHAPv2 0131 if (item->checkState() == Qt::Unchecked) { 0132 result.insert(NM_L2TP_KEY_REFUSE_MSCHAPV2, yesString); 0133 } 0134 item = m_ui->listWidget->item(4); // EAP 0135 if (item->checkState() == Qt::Unchecked) { 0136 result.insert(NM_L2TP_KEY_REFUSE_EAP, yesString); 0137 } 0138 } 0139 0140 // Cryptography and compression 0141 if (m_ui->gbMPPE->isChecked()) { 0142 int index = m_ui->cbMPPECrypto->currentIndex(); 0143 0144 switch (index) { 0145 case 0: // "Any" 0146 result.insert(NM_L2TP_KEY_REQUIRE_MPPE, yesString); 0147 break; 0148 case 1: // "128 bit" 0149 result.insert(NM_L2TP_KEY_REQUIRE_MPPE_128, yesString); 0150 break; 0151 case 2: // "40 bit" 0152 result.insert(NM_L2TP_KEY_REQUIRE_MPPE_40, yesString); 0153 break; 0154 } 0155 0156 if (m_ui->cbstatefulEncryption->isChecked()) { 0157 result.insert(NM_L2TP_KEY_MPPE_STATEFUL, yesString); 0158 } 0159 } 0160 0161 if (!m_ui->cbBSD->isChecked()) { 0162 result.insert(NM_L2TP_KEY_NOBSDCOMP, yesString); 0163 } 0164 if (!m_ui->cbdeflate->isChecked()) { 0165 result.insert(NM_L2TP_KEY_NODEFLATE, yesString); 0166 } 0167 0168 if (!m_ui->cbTCPheaders->isChecked()) { 0169 result.insert(NM_L2TP_KEY_NO_VJ_COMP, yesString); 0170 } 0171 0172 if (!m_ui->cbCompressionNegotiation->isChecked()) { 0173 result.insert(NM_L2TP_KEY_NO_PCOMP, yesString); 0174 } 0175 0176 if (!m_ui->cbAddressControlCompression->isChecked()) { 0177 result.insert(NM_L2TP_KEY_NO_ACCOMP, yesString); 0178 } 0179 0180 // Echo 0181 if (m_ui->cbsendEcho->isChecked()) { 0182 result.insert(NM_L2TP_KEY_LCP_ECHO_FAILURE, "5"); 0183 result.insert(NM_L2TP_KEY_LCP_ECHO_INTERVAL, "30"); 0184 } 0185 0186 if (m_ui->sbMTU->value() != 0) { 0187 result.insert(NM_L2TP_KEY_MTU, QString::number(m_ui->sbMTU->value())); 0188 } 0189 0190 if (m_ui->sbMRU->value() != 0) { 0191 result.insert(NM_L2TP_KEY_MRU, QString::number(m_ui->sbMRU->value())); 0192 } 0193 0194 return result; 0195 }