--- knetworkmanager/src/knetworkmanager-dialogfab.cpp +++ knetworkmanager/src/knetworkmanager-dialogfab.cpp @@ -234,6 +234,23 @@ NewWirelessNetworkDialog::slotOk() { updateModel(); + /* + if the network with the entered essid is already in our list + we use the one in our list instead of the newly created one. + But we have to transfer the encryption object. + */ + NetworkList nets = _dev->getNetworkList(); + for (NetworkList::Iterator it = nets.begin(); it != nets.end(); ++it) { + if ((*it)->getEssid() == _net->getEssid()) { + // move encryption object to the network in the list + (*it)->setEncryption(_net->getEncryption()); + _net->setEncryption(NULL); + // next steps should take our list network + delete _net; + _net = (*it); + break; + } + } _dev->setPendingNetwork (_net); @@ -505,6 +522,7 @@ SecretMap map = enc->getSecrets(); map.insert( EncryptionWPAEnterprise::IdPasswordKey, identityPassword ); enc->setSecrets (map); + updateModel(); } void @@ -543,6 +561,7 @@ SecretMap map = enc->getSecrets(); map.insert( EncryptionWPAEnterprise::CertPrivatePasswordKey, certPrivatePassword ); enc->setSecrets (map); + updateModel(); } void --- knetworkmanager/src/knetworkmanager-encryption.cpp +++ knetworkmanager/src/knetworkmanager-encryption.cpp @@ -109,7 +109,7 @@ bool Encryption::persistKey (void) const { - if ( !_secret["password"].isEmpty() && _network ) + if ( !_secret.isEmpty() && _network ) _keyStored = KNetworkManagerStorage::getInstance( )->storeCredentials( _network->getEssid( ), _secret); return _keyStored; @@ -593,9 +593,14 @@ int keyType = NM_AUTH_TYPE_WPA_PSK_AUTO; - if (!msg || !essid || !isValid( essid ) ) + if (!msg || !essid ) return false; + if (! (_keyStored && _secret[IdPasswordKey].length() == 0 && _secret[CertPrivatePasswordKey].length() == 0)) { + if (!isValid( essid )) + return false; + } + /* FIXME: If the user denies access to kwallet we'd send NULL over the bus. Avoid that. */ if (!_secret[IdPasswordKey]) _secret[IdPasswordKey] = ""; @@ -665,7 +670,8 @@ bool EncryptionWPAEnterprise::isValid (const QString & essid) { - if (essid.length ()) + bool hasSecret = (_secret[IdPasswordKey].length() > 0) || (_secret[CertPrivatePasswordKey].length() > 0); + if (essid.length () && hasSecret) return true; else return false; @@ -849,6 +855,10 @@ else cfg->writeEntry( "WPAVersion", "WPA2" ); + if ( withKey ) + this->persistKey( ); + + cfg->writeEntry ( "KeyStored", _keyStored ); cfg->writeEntry ( "Cipher", _we_cipher ); _dirty = false; } @@ -888,6 +898,10 @@ _certCA = cfg->readEntry( "CertCA" ); // _we_cipher is not used in WPAEnterprise, so no verison check required _we_cipher = cfg->readNumEntry( "Cipher", -1 ); + _keyStored = cfg->readBoolEntry ( "KeyStored", false ); + if ( withKey && _keyStored ) + this->restoreKey( ); + _dirty = false; }