author | mickeyl <mickeyl> | 2005-05-10 10:14:38 (UTC) |
---|---|---|
committer | mickeyl <mickeyl> | 2005-05-10 10:14:38 (UTC) |
commit | ff1d0ce627f64fb757df48d4c4998cb82a024dbc (patch) (side-by-side diff) | |
tree | 332d07f028d216564ee287ddd2b642e0d314234e | |
parent | ce515e60ba66d4b1540879b17b2b31b5fac627d3 (diff) | |
download | opie-ff1d0ce627f64fb757df48d4c4998cb82a024dbc.zip opie-ff1d0ce627f64fb757df48d4c4998cb82a024dbc.tar.gz opie-ff1d0ce627f64fb757df48d4c4998cb82a024dbc.tar.bz2 |
improve WEP key handling and add wlan-ng support. patch courtesy Dirk Opfer, thanks!
4 files changed, 142 insertions, 5 deletions
diff --git a/noncore/settings/networksettings/wlan/wextensions.cpp b/noncore/settings/networksettings/wlan/wextensions.cpp index 8a9db66..64d8752 100644 --- a/noncore/settings/networksettings/wlan/wextensions.cpp +++ b/noncore/settings/networksettings/wlan/wextensions.cpp @@ -71,2 +71,3 @@ QString WExtensions::essid(){ const char* buffer[200]; + memset(buffer,0x00,200); iwr.u.data.pointer = (caddr_t) buffer; @@ -75,2 +76,4 @@ QString WExtensions::essid(){ if ( 0 == ioctl( fd, SIOCGIWESSID, &iwr )){ + if (iwr.u.essid.length > IW_ESSID_MAX_SIZE) + iwr.u.essid.length = IW_ESSID_MAX_SIZE; buffer[(unsigned int) iwr.u.essid.length] = '\0'; diff --git a/noncore/settings/networksettings/wlan/wlan.pro b/noncore/settings/networksettings/wlan/wlan.pro index eb9dd4f..3a064d3 100644 --- a/noncore/settings/networksettings/wlan/wlan.pro +++ b/noncore/settings/networksettings/wlan/wlan.pro @@ -10,3 +10,3 @@ INTERFACES = wlan.ui info.ui TARGET = wlan -VERSION = 1.0.1 +VERSION = 1.0.2 diff --git a/noncore/settings/networksettings/wlan/wlanimp2.cpp b/noncore/settings/networksettings/wlan/wlanimp2.cpp index 11dfe74..2fd97c3 100644 --- a/noncore/settings/networksettings/wlan/wlanimp2.cpp +++ b/noncore/settings/networksettings/wlan/wlanimp2.cpp @@ -81,3 +81,3 @@ void WLANImp::parseOpts() { bool error; - QString opt; + QString opt,key; @@ -86,3 +86,2 @@ void WLANImp::parseOpts() { - opt = interfaces->getInterfaceOption("wireless_essid", error); @@ -111,7 +110,62 @@ void WLANImp::parseOpts() { - opt = interfaces->getInterfaceOption("wireless_key", error).simplifyWhiteSpace(); - if (opt.isNull()) + opt = interfaces->getInterfaceOption("wireless_type", error).simplifyWhiteSpace(); + + if ( opt == "wlan-ng") { + + //FIXME:Handle wlan_ng_priv_genstr + + // get default key_id + opt = interfaces->getInterfaceOption("wlan_ng_default_key_id", error).simplifyWhiteSpace(); + + if (opt == "0") + keyRadio0->setChecked(true); + if (opt == "1") + keyRadio1->setChecked(true); + if (opt == "2") + keyRadio2->setChecked(true); + if (opt == "3") + keyRadio3->setChecked(true); + + // get key0 + key = interfaces->getInterfaceOption("wlan_ng_key0", error).simplifyWhiteSpace(); + key.replace(QString(":"),QString("")); + keyLineEdit0->setText(key); + + // get key1 + key = interfaces->getInterfaceOption("wlan_ng_key1", error).simplifyWhiteSpace(); + key.replace(QString(":"),QString("")); + keyLineEdit1->setText(key); + + // get key2 + key = interfaces->getInterfaceOption("wlan_ng_key2", error).simplifyWhiteSpace(); + key.replace(QString(":"),QString("")); + keyLineEdit2->setText(key); + + // get key3 + key = interfaces->getInterfaceOption("wlan_ng_key3", error).simplifyWhiteSpace(); + key.replace(QString(":"),QString("")); + keyLineEdit3->setText(key); + opt = interfaces->getInterfaceOption("wireless_enc", error).simplifyWhiteSpace(); + + // encryption on? + if(opt == "on"){ + wepEnabled->setChecked(true); + } else { + wepEnabled->setChecked(false); + } + + opt = interfaces->getInterfaceOption("wireless_keymode", error).simplifyWhiteSpace(); + + if(opt == "restricted"){ + // restricted mode, only accept encrypted packets + rejectNonEnc->setChecked(true); + } + } + else { + opt = interfaces->getInterfaceOption("wireless_key", error).simplifyWhiteSpace(); + parseKeyStr(opt); } +} @@ -228,3 +282,23 @@ void WLANImp::accept() { +QString WLANImp::formatKey(QString input) +{ + int len,r=0; + + len = input.length(); + + if (!len) + return input; + + for(int i=1;i<len/2;i++) + { + input.insert(r+i*2,QString(":")); + r++; + } + + return input; +} + void WLANImp::writeOpts() { + QString para, devicetype; + // eh can't really do anything about it other then return. :-D @@ -255,2 +329,60 @@ void WLANImp::writeOpts() { + devicetype = interfaces->getInterfaceOption("wireless_type", error).simplifyWhiteSpace(); + + if ( devicetype == "wlan-ng") { + + // wlan-ng style + interfaces->removeInterfaceOption(QString("wireless_key")); + + if (wepEnabled->isChecked()) { + + interfaces->setInterfaceOption(QString("wireless_enc"),"on"); + + if (! keyLineEdit0->text().isNull()) { + interfaces->setInterfaceOption(QString("wlan_ng_key0"), formatKey(keyLineEdit0->text())); + } else + interfaces->removeInterfaceOption(QString("wlan_ng_key0")); + if (! keyLineEdit1->text().isNull()) { + interfaces->setInterfaceOption(QString("wlan_ng_key1"), formatKey(keyLineEdit1->text())); + } else + interfaces->removeInterfaceOption(QString("wlan_ng_key1")); + if (! keyLineEdit2->text().isNull()) { + interfaces->setInterfaceOption(QString("wlan_ng_key2"), formatKey(keyLineEdit2->text())); + } else + interfaces->removeInterfaceOption(QString("wlan_ng_key2")); + if (! keyLineEdit3->text().isNull()) { + interfaces->setInterfaceOption(QString("wlan_ng_key3"), formatKey(keyLineEdit3->text())); + } else + interfaces->removeInterfaceOption(QString("wlan_ng_key3")); + + if (acceptNonEnc->isChecked()) + interfaces->removeInterfaceOption(QString("wireless_keymode")); + else + interfaces->setInterfaceOption(QString("wireless_keymode"),"restricted"); + + para = ""; + if (keyRadio0->isChecked()) { + para = "0"; + } else if (keyRadio1->isChecked()) { + para = "1"; + } else if (keyRadio2->isChecked()) { + para = "2"; + } else if (keyRadio3->isChecked()) { + para = "3"; + } + + interfaces->setInterfaceOption(QString("wlan_ng_default_key_id"), para); + + } else { + // No wep, remove all previous keys + interfaces->removeInterfaceOption(QString("wireless_enc")); + interfaces->removeInterfaceOption(QString("wlan_ng_default_key_id")); + interfaces->removeInterfaceOption(QString("wlan_ng_key0")); + interfaces->removeInterfaceOption(QString("wlan_ng_key1")); + interfaces->removeInterfaceOption(QString("wlan_ng_key2")); + interfaces->removeInterfaceOption(QString("wlan_ng_key3")); + } + + } else { + // This is the old style if (wepEnabled->isChecked()) { @@ -295,2 +427,3 @@ void WLANImp::writeOpts() { interfaces->removeInterfaceOption(QString("wireless_enc")); + } diff --git a/noncore/settings/networksettings/wlan/wlanimp2.h b/noncore/settings/networksettings/wlan/wlanimp2.h index c3d1eee..0e8d533 100644 --- a/noncore/settings/networksettings/wlan/wlanimp2.h +++ b/noncore/settings/networksettings/wlan/wlanimp2.h @@ -39,2 +39,3 @@ private: void parseKeyStr(QString keystr); + QString formatKey(QString input); |