File indexing completed on 2024-04-21 04:00:08

0001 /*
0002     SPDX-FileCopyrightText: 2012-2013 Jan Grulich <jgrulich@redhat.com>
0003 
0004     SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
0005 */
0006 
0007 #include "wirelesssecuritysetting.h"
0008 #include "wirelesssecuritysetting_p.h"
0009 
0010 #include <QDebug>
0011 
0012 #if !NM_CHECK_VERSION(1, 10, 0)
0013 #define NM_SETTING_WIRELESS_SECURITY_PMF "pmf"
0014 #endif
0015 
0016 NetworkManager::WirelessSecuritySettingPrivate::WirelessSecuritySettingPrivate()
0017     : name(NM_SETTING_WIRELESS_SECURITY_SETTING_NAME)
0018     , keyMgmt(NetworkManager::WirelessSecuritySetting::Unknown)
0019     , wepTxKeyidx(0)
0020     , authAlg(NetworkManager::WirelessSecuritySetting::None)
0021     , wepKeyFlags(NetworkManager::Setting::None)
0022     , wepKeyType(NetworkManager::WirelessSecuritySetting::NotSpecified)
0023     , pskFlags(NetworkManager::Setting::None)
0024     , leapPasswordFlags(NetworkManager::Setting::None)
0025     , pmf(NetworkManager::WirelessSecuritySetting::DefaultPmf)
0026 {
0027 }
0028 
0029 NetworkManager::WirelessSecuritySetting::WirelessSecuritySetting()
0030     : Setting(Setting::WirelessSecurity)
0031     , d_ptr(new WirelessSecuritySettingPrivate())
0032 {
0033 }
0034 
0035 NetworkManager::WirelessSecuritySetting::WirelessSecuritySetting(const Ptr &other)
0036     : Setting(other)
0037     , d_ptr(new WirelessSecuritySettingPrivate())
0038 {
0039     setKeyMgmt(other->keyMgmt());
0040     setWepTxKeyindex(other->wepTxKeyindex());
0041     setAuthAlg(other->authAlg());
0042     setProto(other->proto());
0043     setPairwise(other->pairwise());
0044     setGroup(other->group());
0045     setWepKey0(other->wepKey0());
0046     setWepKey1(other->wepKey1());
0047     setWepKey2(other->wepKey2());
0048     setWepKey3(other->wepKey3());
0049     setWepKeyFlags(other->wepKeyFlags());
0050     setWepKeyType(other->wepKeyType());
0051     setPsk(other->psk());
0052     setPskFlags(other->pskFlags());
0053     setLeapPassword(other->leapPassword());
0054     setLeapPasswordFlags(other->leapPasswordFlags());
0055     setPmf(other->pmf());
0056 }
0057 
0058 NetworkManager::WirelessSecuritySetting::~WirelessSecuritySetting()
0059 {
0060     delete d_ptr;
0061 }
0062 
0063 QString NetworkManager::WirelessSecuritySetting::name() const
0064 {
0065     Q_D(const WirelessSecuritySetting);
0066 
0067     return d->name;
0068 }
0069 
0070 void NetworkManager::WirelessSecuritySetting::setKeyMgmt(NetworkManager::WirelessSecuritySetting::KeyMgmt mgmt)
0071 {
0072     Q_D(WirelessSecuritySetting);
0073 
0074     d->keyMgmt = mgmt;
0075 }
0076 
0077 NetworkManager::WirelessSecuritySetting::KeyMgmt NetworkManager::WirelessSecuritySetting::keyMgmt() const
0078 {
0079     Q_D(const WirelessSecuritySetting);
0080 
0081     return d->keyMgmt;
0082 }
0083 
0084 void NetworkManager::WirelessSecuritySetting::setWepTxKeyindex(quint32 index)
0085 {
0086     Q_D(WirelessSecuritySetting);
0087 
0088     d->wepTxKeyidx = index;
0089 }
0090 
0091 quint32 NetworkManager::WirelessSecuritySetting::wepTxKeyindex() const
0092 {
0093     Q_D(const WirelessSecuritySetting);
0094 
0095     return d->wepTxKeyidx;
0096 }
0097 
0098 void NetworkManager::WirelessSecuritySetting::setAuthAlg(NetworkManager::WirelessSecuritySetting::AuthAlg alg)
0099 {
0100     Q_D(WirelessSecuritySetting);
0101 
0102     d->authAlg = alg;
0103 }
0104 
0105 NetworkManager::WirelessSecuritySetting::AuthAlg NetworkManager::WirelessSecuritySetting::authAlg() const
0106 {
0107     Q_D(const WirelessSecuritySetting);
0108 
0109     return d->authAlg;
0110 }
0111 
0112 void NetworkManager::WirelessSecuritySetting::setProto(const QList<NetworkManager::WirelessSecuritySetting::WpaProtocolVersion> &list)
0113 {
0114     Q_D(WirelessSecuritySetting);
0115 
0116     d->proto = list;
0117 }
0118 
0119 QList<NetworkManager::WirelessSecuritySetting::WpaProtocolVersion> NetworkManager::WirelessSecuritySetting::proto() const
0120 {
0121     Q_D(const WirelessSecuritySetting);
0122 
0123     return d->proto;
0124 }
0125 
0126 void NetworkManager::WirelessSecuritySetting::setPairwise(const QList<NetworkManager::WirelessSecuritySetting::WpaEncryptionCapabilities> &list)
0127 {
0128     Q_D(WirelessSecuritySetting);
0129 
0130     d->pairwise = list;
0131 }
0132 
0133 QList<NetworkManager::WirelessSecuritySetting::WpaEncryptionCapabilities> NetworkManager::WirelessSecuritySetting::pairwise() const
0134 {
0135     Q_D(const WirelessSecuritySetting);
0136 
0137     return d->pairwise;
0138 }
0139 
0140 void NetworkManager::WirelessSecuritySetting::setGroup(const QList<NetworkManager::WirelessSecuritySetting::WpaEncryptionCapabilities> &list)
0141 {
0142     Q_D(WirelessSecuritySetting);
0143 
0144     d->group = list;
0145 }
0146 
0147 QList<NetworkManager::WirelessSecuritySetting::WpaEncryptionCapabilities> NetworkManager::WirelessSecuritySetting::group() const
0148 {
0149     Q_D(const WirelessSecuritySetting);
0150 
0151     return d->group;
0152 }
0153 
0154 void NetworkManager::WirelessSecuritySetting::setLeapUsername(const QString &username)
0155 {
0156     Q_D(WirelessSecuritySetting);
0157 
0158     d->leapUsername = username;
0159 }
0160 
0161 QString NetworkManager::WirelessSecuritySetting::leapUsername() const
0162 {
0163     Q_D(const WirelessSecuritySetting);
0164 
0165     return d->leapUsername;
0166 }
0167 
0168 void NetworkManager::WirelessSecuritySetting::setWepKey0(const QString key)
0169 {
0170     Q_D(WirelessSecuritySetting);
0171 
0172     d->wepKey0 = key;
0173 }
0174 
0175 QString NetworkManager::WirelessSecuritySetting::wepKey0() const
0176 {
0177     Q_D(const WirelessSecuritySetting);
0178 
0179     return d->wepKey0;
0180 }
0181 
0182 void NetworkManager::WirelessSecuritySetting::setWepKey1(const QString key)
0183 {
0184     Q_D(WirelessSecuritySetting);
0185 
0186     d->wepKey1 = key;
0187 }
0188 
0189 QString NetworkManager::WirelessSecuritySetting::wepKey1() const
0190 {
0191     Q_D(const WirelessSecuritySetting);
0192 
0193     return d->wepKey1;
0194 }
0195 
0196 void NetworkManager::WirelessSecuritySetting::setWepKey2(const QString key)
0197 {
0198     Q_D(WirelessSecuritySetting);
0199 
0200     d->wepKey2 = key;
0201 }
0202 
0203 QString NetworkManager::WirelessSecuritySetting::wepKey2() const
0204 {
0205     Q_D(const WirelessSecuritySetting);
0206 
0207     return d->wepKey2;
0208 }
0209 
0210 void NetworkManager::WirelessSecuritySetting::setWepKey3(const QString key)
0211 {
0212     Q_D(WirelessSecuritySetting);
0213 
0214     d->wepKey3 = key;
0215 }
0216 
0217 QString NetworkManager::WirelessSecuritySetting::wepKey3() const
0218 {
0219     Q_D(const WirelessSecuritySetting);
0220 
0221     return d->wepKey3;
0222 }
0223 
0224 void NetworkManager::WirelessSecuritySetting::setWepKeyFlags(NetworkManager::Setting::SecretFlags type)
0225 {
0226     Q_D(WirelessSecuritySetting);
0227 
0228     d->wepKeyFlags = type;
0229 }
0230 
0231 NetworkManager::Setting::SecretFlags NetworkManager::WirelessSecuritySetting::wepKeyFlags() const
0232 {
0233     Q_D(const WirelessSecuritySetting);
0234 
0235     return d->wepKeyFlags;
0236 }
0237 
0238 void NetworkManager::WirelessSecuritySetting::setWepKeyType(NetworkManager::WirelessSecuritySetting::WepKeyType type)
0239 {
0240     Q_D(WirelessSecuritySetting);
0241 
0242     d->wepKeyType = type;
0243 }
0244 
0245 NetworkManager::WirelessSecuritySetting::WepKeyType NetworkManager::WirelessSecuritySetting::wepKeyType() const
0246 {
0247     Q_D(const WirelessSecuritySetting);
0248 
0249     return d->wepKeyType;
0250 }
0251 
0252 void NetworkManager::WirelessSecuritySetting::setPsk(const QString &key)
0253 {
0254     Q_D(WirelessSecuritySetting);
0255 
0256     d->psk = key;
0257 }
0258 
0259 QString NetworkManager::WirelessSecuritySetting::psk() const
0260 {
0261     Q_D(const WirelessSecuritySetting);
0262 
0263     return d->psk;
0264 }
0265 
0266 void NetworkManager::WirelessSecuritySetting::setPskFlags(NetworkManager::Setting::SecretFlags type)
0267 {
0268     Q_D(WirelessSecuritySetting);
0269 
0270     d->pskFlags = type;
0271 }
0272 
0273 NetworkManager::Setting::SecretFlags NetworkManager::WirelessSecuritySetting::pskFlags() const
0274 {
0275     Q_D(const WirelessSecuritySetting);
0276 
0277     return d->pskFlags;
0278 }
0279 
0280 void NetworkManager::WirelessSecuritySetting::setLeapPassword(const QString &password)
0281 {
0282     Q_D(WirelessSecuritySetting);
0283 
0284     d->leapPassword = password;
0285 }
0286 
0287 QString NetworkManager::WirelessSecuritySetting::leapPassword() const
0288 {
0289     Q_D(const WirelessSecuritySetting);
0290 
0291     return d->leapPassword;
0292 }
0293 
0294 void NetworkManager::WirelessSecuritySetting::setLeapPasswordFlags(NetworkManager::Setting::SecretFlags type)
0295 {
0296     Q_D(WirelessSecuritySetting);
0297 
0298     d->leapPasswordFlags = type;
0299 }
0300 
0301 NetworkManager::Setting::SecretFlags NetworkManager::WirelessSecuritySetting::leapPasswordFlags() const
0302 {
0303     Q_D(const WirelessSecuritySetting);
0304 
0305     return d->leapPasswordFlags;
0306 }
0307 
0308 void NetworkManager::WirelessSecuritySetting::setPmf(NetworkManager::WirelessSecuritySetting::Pmf pmf)
0309 {
0310     Q_D(WirelessSecuritySetting);
0311 
0312     d->pmf = pmf;
0313 }
0314 
0315 NetworkManager::WirelessSecuritySetting::Pmf NetworkManager::WirelessSecuritySetting::pmf() const
0316 {
0317     Q_D(const WirelessSecuritySetting);
0318 
0319     return d->pmf;
0320 }
0321 
0322 void NetworkManager::WirelessSecuritySetting::secretsFromMap(const QVariantMap &secrets)
0323 {
0324     if (secrets.contains(QLatin1String(NM_SETTING_WIRELESS_SECURITY_WEP_KEY0))) {
0325         setWepKey0(secrets.value(QLatin1String(NM_SETTING_WIRELESS_SECURITY_WEP_KEY0)).toString());
0326     }
0327 
0328     if (secrets.contains(QLatin1String(NM_SETTING_WIRELESS_SECURITY_WEP_KEY1))) {
0329         setWepKey1(secrets.value(QLatin1String(NM_SETTING_WIRELESS_SECURITY_WEP_KEY1)).toString());
0330     }
0331 
0332     if (secrets.contains(QLatin1String(NM_SETTING_WIRELESS_SECURITY_WEP_KEY2))) {
0333         setWepKey2(secrets.value(QLatin1String(NM_SETTING_WIRELESS_SECURITY_WEP_KEY2)).toString());
0334     }
0335 
0336     if (secrets.contains(QLatin1String(NM_SETTING_WIRELESS_SECURITY_WEP_KEY3))) {
0337         setWepKey3(secrets.value(QLatin1String(NM_SETTING_WIRELESS_SECURITY_WEP_KEY3)).toString());
0338     }
0339 
0340     if (secrets.contains(QLatin1String(NM_SETTING_WIRELESS_SECURITY_PSK))) {
0341         setPsk(secrets.value(QLatin1String(NM_SETTING_WIRELESS_SECURITY_PSK)).toString());
0342     }
0343 
0344     if (secrets.contains(QLatin1String(NM_SETTING_WIRELESS_SECURITY_LEAP_PASSWORD))) {
0345         setLeapPassword(secrets.value(QLatin1String(NM_SETTING_WIRELESS_SECURITY_LEAP_PASSWORD)).toString());
0346     }
0347 }
0348 
0349 QVariantMap NetworkManager::WirelessSecuritySetting::secretsToMap() const
0350 {
0351     QVariantMap secrets;
0352 
0353     if (!wepKey0().isEmpty()) {
0354         secrets.insert(QLatin1String(NM_SETTING_WIRELESS_SECURITY_WEP_KEY0), wepKey0());
0355     }
0356 
0357     if (!wepKey1().isEmpty()) {
0358         secrets.insert(QLatin1String(NM_SETTING_WIRELESS_SECURITY_WEP_KEY1), wepKey1());
0359     }
0360 
0361     if (!wepKey2().isEmpty()) {
0362         secrets.insert(QLatin1String(NM_SETTING_WIRELESS_SECURITY_WEP_KEY2), wepKey2());
0363     }
0364 
0365     if (!wepKey3().isEmpty()) {
0366         secrets.insert(QLatin1String(NM_SETTING_WIRELESS_SECURITY_WEP_KEY3), wepKey3());
0367     }
0368 
0369     if (!psk().isEmpty()) {
0370         secrets.insert(QLatin1String(NM_SETTING_WIRELESS_SECURITY_PSK), psk());
0371     }
0372 
0373     if (!leapPassword().isEmpty()) {
0374         secrets.insert(QLatin1String(NM_SETTING_WIRELESS_SECURITY_LEAP_PASSWORD), leapPassword());
0375     }
0376 
0377     return secrets;
0378 }
0379 
0380 QStringList NetworkManager::WirelessSecuritySetting::needSecrets(bool requestNew) const
0381 {
0382     QStringList secrets;
0383 
0384     if (keyMgmt() == Wep) {
0385         if (!wepKeyFlags().testFlag(Setting::NotRequired)) {
0386             switch (wepTxKeyindex()) {
0387             case 0:
0388                 if (wepKey0().isEmpty() || requestNew) {
0389                     secrets << QLatin1String(NM_SETTING_WIRELESS_SECURITY_WEP_KEY0);
0390                     return secrets;
0391                 }
0392                 break;
0393             case 1:
0394                 if (wepKey1().isEmpty() || requestNew) {
0395                     secrets << QLatin1String(NM_SETTING_WIRELESS_SECURITY_WEP_KEY1);
0396                     return secrets;
0397                 }
0398                 break;
0399             case 2:
0400                 if (wepKey2().isEmpty() || requestNew) {
0401                     secrets << QLatin1String(NM_SETTING_WIRELESS_SECURITY_WEP_KEY2);
0402                     return secrets;
0403                 }
0404                 break;
0405             case 3:
0406                 if (wepKey3().isEmpty() || requestNew) {
0407                     secrets << QLatin1String(NM_SETTING_WIRELESS_SECURITY_WEP_KEY3);
0408                     return secrets;
0409                 }
0410                 break;
0411             }
0412         }
0413     }
0414 
0415     if (keyMgmt() == WpaNone || keyMgmt() == WpaPsk || keyMgmt() == SAE) {
0416         if (!pskFlags().testFlag(Setting::NotRequired)) {
0417             if (psk().isEmpty() || requestNew) {
0418                 secrets << QLatin1String(NM_SETTING_WIRELESS_SECURITY_PSK);
0419                 return secrets;
0420             }
0421         }
0422     }
0423 
0424     if (authAlg() == Leap && keyMgmt() == Ieee8021x) {
0425         if (!leapPasswordFlags().testFlag(Setting::NotRequired)) {
0426             if (leapPassword().isEmpty() || requestNew) {
0427                 secrets << QLatin1String(NM_SETTING_WIRELESS_SECURITY_LEAP_PASSWORD);
0428                 return secrets;
0429             }
0430         }
0431     }
0432 
0433     return secrets;
0434 }
0435 
0436 void NetworkManager::WirelessSecuritySetting::fromMap(const QVariantMap &map)
0437 {
0438     if (map.contains(QLatin1String(NM_SETTING_WIRELESS_SECURITY_KEY_MGMT))) {
0439         const QString key = map.value(QLatin1String(NM_SETTING_WIRELESS_SECURITY_KEY_MGMT)).toString();
0440         if (key == "none") {
0441             setKeyMgmt(Wep);
0442         } else if (key == "ieee8021x") {
0443             setKeyMgmt(Ieee8021x);
0444         } else if (key == "wpa-none") {
0445             setKeyMgmt(WpaNone);
0446         } else if (key == "wpa-psk") {
0447             setKeyMgmt(WpaPsk);
0448         } else if (key == "wpa-eap") {
0449             setKeyMgmt(WpaEap);
0450         } else if (key == "sae") {
0451             setKeyMgmt(SAE);
0452         } else if (key == "wpa-eap-suite-b-192") {
0453             setKeyMgmt(WpaEapSuiteB192);
0454         }
0455     }
0456 
0457     if (map.contains(QLatin1String(NM_SETTING_WIRELESS_SECURITY_WEP_TX_KEYIDX))) {
0458         setWepTxKeyindex(map.value(QLatin1String(NM_SETTING_WIRELESS_SECURITY_WEP_TX_KEYIDX)).toUInt());
0459     }
0460 
0461     if (map.contains(QLatin1String(NM_SETTING_WIRELESS_SECURITY_AUTH_ALG))) {
0462         const QString alg = map.value(QLatin1String(NM_SETTING_WIRELESS_SECURITY_AUTH_ALG)).toString();
0463         if (alg == "open") {
0464             setAuthAlg(Open);
0465         } else if (alg == "shared") {
0466             setAuthAlg(Shared);
0467         } else if (alg == "leap") {
0468             setAuthAlg(Leap);
0469         }
0470     }
0471 
0472     if (map.contains(QLatin1String(NM_SETTING_WIRELESS_SECURITY_PROTO))) {
0473         const QStringList strList = map.value(QLatin1String(NM_SETTING_WIRELESS_SECURITY_PROTO)).toStringList();
0474         QList<WpaProtocolVersion> list;
0475         for (const QString &str : strList) {
0476             if (str == "wpa") {
0477                 list.push_back(Wpa);
0478             } else if (str == "rsn") {
0479                 list.push_back(Rsn);
0480             }
0481         }
0482         setProto(list);
0483     }
0484 
0485     if (map.contains(QLatin1String(NM_SETTING_WIRELESS_SECURITY_PAIRWISE))) {
0486         const QStringList strList = map.value(QLatin1String(NM_SETTING_WIRELESS_SECURITY_PAIRWISE)).toStringList();
0487         QList<WpaEncryptionCapabilities> list;
0488         for (const QString &str : strList) {
0489             if (str == "wep40") {
0490                 list.push_back(Wep40);
0491             } else if (str == "wep104") {
0492                 list.push_back(Wep104);
0493             } else if (str == "tkip") {
0494                 list.push_back(Tkip);
0495             } else if (str == "ccmp") {
0496                 list.push_back(Ccmp);
0497             }
0498         }
0499         setPairwise(list);
0500     }
0501 
0502     if (map.contains(QLatin1String(NM_SETTING_WIRELESS_SECURITY_GROUP))) {
0503         const QStringList strList = map.value(QLatin1String(NM_SETTING_WIRELESS_SECURITY_GROUP)).toStringList();
0504         QList<WpaEncryptionCapabilities> list;
0505         for (const QString &str : strList) {
0506             if (str == "wep40") {
0507                 list.push_back(Wep40);
0508             } else if (str == "wep104") {
0509                 list.push_back(Wep104);
0510             } else if (str == "tkip") {
0511                 list.push_back(Tkip);
0512             } else if (str == "ccmp") {
0513                 list.push_back(Ccmp);
0514             }
0515         }
0516         setGroup(list);
0517     }
0518 
0519     if (map.contains(QLatin1String(NM_SETTING_WIRELESS_SECURITY_LEAP_USERNAME))) {
0520         setLeapUsername(map.value(QLatin1String(NM_SETTING_WIRELESS_SECURITY_LEAP_USERNAME)).toString());
0521     }
0522 
0523     // Secrets
0524     if (map.contains(QLatin1String(NM_SETTING_WIRELESS_SECURITY_WEP_KEY0))) {
0525         setWepKey0(map.value(QLatin1String(NM_SETTING_WIRELESS_SECURITY_WEP_KEY0)).toString());
0526     }
0527 
0528     // Secrets
0529     if (map.contains(QLatin1String(NM_SETTING_WIRELESS_SECURITY_WEP_KEY1))) {
0530         setWepKey1(map.value(QLatin1String(NM_SETTING_WIRELESS_SECURITY_WEP_KEY1)).toString());
0531     }
0532 
0533     // Secrets
0534     if (map.contains(QLatin1String(NM_SETTING_WIRELESS_SECURITY_WEP_KEY2))) {
0535         setWepKey2(map.value(QLatin1String(NM_SETTING_WIRELESS_SECURITY_WEP_KEY2)).toString());
0536     }
0537 
0538     // Secrets
0539     if (map.contains(QLatin1String(NM_SETTING_WIRELESS_SECURITY_WEP_KEY3))) {
0540         setWepKey3(map.value(QLatin1String(NM_SETTING_WIRELESS_SECURITY_WEP_KEY3)).toString());
0541     }
0542 
0543     if (map.contains(QLatin1String(NM_SETTING_WIRELESS_SECURITY_WEP_KEY_FLAGS))) {
0544         setWepKeyFlags((SecretFlags)map.value(QLatin1String(NM_SETTING_WIRELESS_SECURITY_WEP_KEY_FLAGS)).toInt());
0545     }
0546 
0547     if (map.contains(QLatin1String(NM_SETTING_WIRELESS_SECURITY_WEP_KEY_TYPE))) {
0548         setWepKeyType((WepKeyType)map.value(QLatin1String(NM_SETTING_WIRELESS_SECURITY_WEP_KEY_TYPE)).toUInt());
0549     }
0550 
0551     // Secrets
0552     if (map.contains(QLatin1String(NM_SETTING_WIRELESS_SECURITY_PSK))) {
0553         setPsk(map.value(QLatin1String(NM_SETTING_WIRELESS_SECURITY_PSK)).toString());
0554     }
0555 
0556     if (map.contains(QLatin1String(NM_SETTING_WIRELESS_SECURITY_PSK_FLAGS))) {
0557         setPskFlags((SecretFlags)map.value(QLatin1String(NM_SETTING_WIRELESS_SECURITY_PSK_FLAGS)).toInt());
0558     }
0559 
0560     // Secrets
0561     if (map.contains(QLatin1String(NM_SETTING_WIRELESS_SECURITY_LEAP_PASSWORD))) {
0562         setLeapPassword(map.value(QLatin1String(NM_SETTING_WIRELESS_SECURITY_LEAP_PASSWORD)).toString());
0563     }
0564 
0565     if (map.contains(QLatin1String(NM_SETTING_WIRELESS_SECURITY_LEAP_PASSWORD_FLAGS))) {
0566         setLeapPasswordFlags((SecretFlags)map.value(QLatin1String(NM_SETTING_WIRELESS_SECURITY_LEAP_PASSWORD_FLAGS)).toInt());
0567     }
0568 
0569     if (map.contains(QLatin1String(NM_SETTING_WIRELESS_SECURITY_PMF))) {
0570         setPmf((Pmf)map.value(QLatin1String(NM_SETTING_WIRELESS_SECURITY_PMF)).toInt());
0571     }
0572 }
0573 
0574 QVariantMap NetworkManager::WirelessSecuritySetting::toMap() const
0575 {
0576     QVariantMap setting;
0577 
0578     if (keyMgmt() == Wep) {
0579         setting.insert(QLatin1String(NM_SETTING_WIRELESS_SECURITY_KEY_MGMT), "none");
0580     } else if (keyMgmt() == Ieee8021x) {
0581         setting.insert(QLatin1String(NM_SETTING_WIRELESS_SECURITY_KEY_MGMT), "ieee8021x");
0582     } else if (keyMgmt() == WpaNone) {
0583         setting.insert(QLatin1String(NM_SETTING_WIRELESS_SECURITY_KEY_MGMT), "wpa-none");
0584     } else if (keyMgmt() == WpaPsk) {
0585         setting.insert(QLatin1String(NM_SETTING_WIRELESS_SECURITY_KEY_MGMT), "wpa-psk");
0586     } else if (keyMgmt() == WpaEap) {
0587         setting.insert(QLatin1String(NM_SETTING_WIRELESS_SECURITY_KEY_MGMT), "wpa-eap");
0588     } else if (keyMgmt() == SAE) {
0589         setting.insert(QLatin1String(NM_SETTING_WIRELESS_SECURITY_KEY_MGMT), "sae");
0590     } else if (keyMgmt() == WpaEapSuiteB192) {
0591         setting.insert(QLatin1String(NM_SETTING_WIRELESS_SECURITY_KEY_MGMT), "wpa-eap-suite-b-192");
0592     }
0593 
0594     if (wepTxKeyindex()) {
0595         setting.insert(QLatin1String(NM_SETTING_WIRELESS_SECURITY_WEP_TX_KEYIDX), wepTxKeyindex());
0596     }
0597 
0598     if (authAlg() != None) {
0599         if (authAlg() == Open) {
0600             setting.insert(QLatin1String(NM_SETTING_WIRELESS_SECURITY_AUTH_ALG), "open");
0601         } else if (authAlg() == Shared) {
0602             setting.insert(QLatin1String(NM_SETTING_WIRELESS_SECURITY_AUTH_ALG), "shared");
0603         } else if (authAlg() == Leap) {
0604             setting.insert(QLatin1String(NM_SETTING_WIRELESS_SECURITY_AUTH_ALG), "leap");
0605         }
0606     }
0607 
0608     if (!proto().isEmpty()) {
0609         QStringList strList;
0610         const auto protoList = proto();
0611         for (const WpaProtocolVersion &version : protoList) {
0612             if (version == Wpa) {
0613                 strList << "wpa";
0614             } else if (version == Rsn) {
0615                 strList << "rsn";
0616             }
0617         }
0618         setting.insert(QLatin1String(NM_SETTING_WIRELESS_SECURITY_PROTO), strList);
0619     }
0620 
0621     if (!pairwise().isEmpty()) {
0622         QStringList strList;
0623         const auto encryptions = pairwise();
0624         for (const WpaEncryptionCapabilities &capability : encryptions) {
0625             if (capability == Wep40) {
0626                 strList << "wep40";
0627             } else if (capability == Wep104) {
0628                 strList << "wep104";
0629             } else if (capability == Tkip) {
0630                 strList << "tkip";
0631             } else if (capability == Ccmp) {
0632                 strList << "ccmp";
0633             }
0634         }
0635         setting.insert(QLatin1String(NM_SETTING_WIRELESS_SECURITY_PAIRWISE), strList);
0636     }
0637 
0638     if (!group().isEmpty()) {
0639         QStringList strList;
0640         const auto encryptions = group();
0641         for (const WpaEncryptionCapabilities &capability : encryptions) {
0642             if (capability == Wep40) {
0643                 strList << "wep40";
0644             } else if (capability == Wep104) {
0645                 strList << "wep104";
0646             } else if (capability == Tkip) {
0647                 strList << "tkip";
0648             } else if (capability == Ccmp) {
0649                 strList << "ccmp";
0650             }
0651         }
0652         setting.insert(QLatin1String(NM_SETTING_WIRELESS_SECURITY_GROUP), strList);
0653     }
0654 
0655     if (!leapUsername().isEmpty()) {
0656         setting.insert(QLatin1String(NM_SETTING_WIRELESS_SECURITY_LEAP_USERNAME), leapUsername());
0657     }
0658 
0659     // Secrets
0660     if (!wepKey0().isEmpty()) {
0661         setting.insert(QLatin1String(NM_SETTING_WIRELESS_SECURITY_WEP_KEY0), wepKey0());
0662     }
0663 
0664     // Secrets
0665     if (!wepKey1().isEmpty()) {
0666         setting.insert(QLatin1String(NM_SETTING_WIRELESS_SECURITY_WEP_KEY1), wepKey1());
0667     }
0668 
0669     // Secrets
0670     if (!wepKey2().isEmpty()) {
0671         setting.insert(QLatin1String(NM_SETTING_WIRELESS_SECURITY_WEP_KEY2), wepKey2());
0672     }
0673 
0674     // Secrets
0675     if (!wepKey3().isEmpty()) {
0676         setting.insert(QLatin1String(NM_SETTING_WIRELESS_SECURITY_WEP_KEY3), wepKey3());
0677     }
0678 
0679     if (wepKeyFlags()) {
0680         setting.insert(QLatin1String(NM_SETTING_WIRELESS_SECURITY_WEP_KEY_FLAGS), (int)wepKeyFlags());
0681     }
0682 
0683     if (wepKeyType()) {
0684         setting.insert(QLatin1String(NM_SETTING_WIRELESS_SECURITY_WEP_KEY_TYPE), wepKeyType());
0685     }
0686 
0687     // Secrets
0688     if (!psk().isEmpty()) {
0689         setting.insert(QLatin1String(NM_SETTING_WIRELESS_SECURITY_PSK), psk());
0690     }
0691 
0692     if (pskFlags()) {
0693         setting.insert(QLatin1String(NM_SETTING_WIRELESS_SECURITY_PSK_FLAGS), (int)pskFlags());
0694     }
0695 
0696     // Secrets
0697     if (!leapPassword().isEmpty()) {
0698         setting.insert(QLatin1String(NM_SETTING_WIRELESS_SECURITY_LEAP_PASSWORD), leapPassword());
0699     }
0700 
0701     if (leapPasswordFlags()) {
0702         setting.insert(QLatin1String(NM_SETTING_WIRELESS_SECURITY_LEAP_PASSWORD_FLAGS), (int)leapPasswordFlags());
0703     }
0704 
0705     if (pmf()) {
0706         setting.insert(QLatin1String(NM_SETTING_WIRELESS_SECURITY_PMF), (int)pmf());
0707     }
0708 
0709     return setting;
0710 }
0711 
0712 QDebug NetworkManager::operator<<(QDebug dbg, const NetworkManager::WirelessSecuritySetting &setting)
0713 {
0714     dbg.nospace() << "type: " << setting.typeAsString(setting.type()) << '\n';
0715     dbg.nospace() << "initialized: " << !setting.isNull() << '\n';
0716 
0717     dbg.nospace() << NM_SETTING_WIRELESS_SECURITY_KEY_MGMT << ": " << setting.keyMgmt() << '\n';
0718     dbg.nospace() << NM_SETTING_WIRELESS_SECURITY_WEP_TX_KEYIDX << ": " << setting.wepTxKeyindex() << '\n';
0719     dbg.nospace() << NM_SETTING_WIRELESS_SECURITY_AUTH_ALG << ": " << setting.authAlg() << '\n';
0720     dbg.nospace() << NM_SETTING_WIRELESS_SECURITY_PROTO << ": " << setting.proto() << '\n';
0721     dbg.nospace() << NM_SETTING_WIRELESS_SECURITY_PAIRWISE << ": " << setting.pairwise() << '\n';
0722     dbg.nospace() << NM_SETTING_WIRELESS_SECURITY_GROUP << ": " << setting.group() << '\n';
0723     dbg.nospace() << NM_SETTING_WIRELESS_SECURITY_LEAP_USERNAME << ": " << setting.leapUsername() << '\n';
0724     dbg.nospace() << NM_SETTING_WIRELESS_SECURITY_WEP_KEY0 << ": " << setting.wepKey0() << '\n';
0725     dbg.nospace() << NM_SETTING_WIRELESS_SECURITY_WEP_KEY1 << ": " << setting.wepKey1() << '\n';
0726     dbg.nospace() << NM_SETTING_WIRELESS_SECURITY_WEP_KEY2 << ": " << setting.wepKey2() << '\n';
0727     dbg.nospace() << NM_SETTING_WIRELESS_SECURITY_WEP_KEY3 << ": " << setting.wepKey3() << '\n';
0728     dbg.nospace() << NM_SETTING_WIRELESS_SECURITY_WEP_KEY_FLAGS << ": " << setting.wepKeyFlags() << '\n';
0729     dbg.nospace() << NM_SETTING_WIRELESS_SECURITY_WEP_KEY_TYPE << ": " << setting.wepKeyType() << '\n';
0730     dbg.nospace() << NM_SETTING_WIRELESS_SECURITY_PSK << ": " << setting.psk() << '\n';
0731     dbg.nospace() << NM_SETTING_WIRELESS_SECURITY_PSK_FLAGS << ": " << setting.pskFlags() << '\n';
0732     dbg.nospace() << NM_SETTING_WIRELESS_SECURITY_LEAP_PASSWORD << ": " << setting.leapPassword() << '\n';
0733     dbg.nospace() << NM_SETTING_WIRELESS_SECURITY_LEAP_PASSWORD_FLAGS << ": " << setting.leapPasswordFlags() << '\n';
0734     dbg.nospace() << NM_SETTING_WIRELESS_SECURITY_PMF << ": " << setting.pmf() << '\n';
0735 
0736     return dbg.maybeSpace();
0737 }