author | benmeyer <benmeyer> | 2002-11-22 16:22:08 (UTC) |
---|---|---|
committer | benmeyer <benmeyer> | 2002-11-22 16:22:08 (UTC) |
commit | 85af9693eaa9d7ed1651883ba078d1622bd88639 (patch) (side-by-side diff) | |
tree | 8e3ba452d927883995f137d4e6ea6f8eda6d69fc | |
parent | 3b5b10771415ef0a4cf7e4e02805e64238171f52 (diff) | |
download | opie-85af9693eaa9d7ed1651883ba078d1622bd88639.zip opie-85af9693eaa9d7ed1651883ba078d1622bd88639.tar.gz opie-85af9693eaa9d7ed1651883ba078d1622bd88639.tar.bz2 |
Fixed WEP bugs
-rw-r--r-- | noncore/net/networksetup/wlan/wlan.pro | 2 | ||||
-rw-r--r-- | noncore/net/networksetup/wlan/wlanimp.cpp | 82 | ||||
-rw-r--r-- | noncore/settings/networksettings/wlan/wlan.pro | 2 | ||||
-rw-r--r-- | noncore/settings/networksettings/wlan/wlanimp.cpp | 82 |
4 files changed, 76 insertions, 92 deletions
diff --git a/noncore/net/networksetup/wlan/wlan.pro b/noncore/net/networksetup/wlan/wlan.pro index 23fc39a..396dd4a 100644 --- a/noncore/net/networksetup/wlan/wlan.pro +++ b/noncore/net/networksetup/wlan/wlan.pro @@ -1,12 +1,12 @@ TEMPLATE = lib CONFIG += qt warn_on release #CONFIG += qt warn_on debug -DESTDIR = $(OPIEDIR)/plugins/networksetup +#DESTDIR = $(OPIEDIR)/plugins/networksetup HEADERS = wlanimp.h infoimp.h wlanmodule.h wextensions.h SOURCES = wlanimp.cpp infoimp.cpp wlanmodule.cpp wextensions.cpp INCLUDEPATH += $(OPIEDIR)/include ../ ../interfaces/ DEPENDPATH += $(OPIEDIR)/include LIBS += -lqpe -L../interfaces/ -linterfaces INTERFACES = wlan.ui info.ui TARGET = wlanplugin VERSION = 1.0.0 diff --git a/noncore/net/networksetup/wlan/wlanimp.cpp b/noncore/net/networksetup/wlan/wlanimp.cpp index 87a9716..488911b 100644 --- a/noncore/net/networksetup/wlan/wlanimp.cpp +++ b/noncore/net/networksetup/wlan/wlanimp.cpp @@ -1,234 +1,226 @@ #include "wlanimp.h" #include "interfacesetupimp.h" #include <qfile.h> #include <qdir.h> #include <qtextstream.h> #include <qmessagebox.h> #include <qlineedit.h> #include <qspinbox.h> #include <qradiobutton.h> #include <qcheckbox.h> #include <qtabwidget.h> /* system() */ #include <stdlib.h> #define WIRELESS_OPTS "/etc/pcmcia/wireless.opts" /** * Constructor, read in the wireless.opts file for parsing later. */ WLANImp::WLANImp( QWidget* parent, const char* name, Interface *i, bool modal, WFlags fl):WLAN(parent, name, modal, fl), currentProfile("*") { interfaceSetup = new InterfaceSetupImp(tabWidget, "InterfaceSetupImp", i); tabWidget->insertTab(interfaceSetup, "TCP/IP"); // Read in the config file. QString wlanFile = WIRELESS_OPTS; QFile file(wlanFile); if (file.open(IO_ReadOnly)){ QTextStream stream( &file ); QString line = ""; while ( !stream.eof() ) { line += stream.readLine(); line += "\n"; } file.close(); settingsFileText = QStringList::split("\n", line, true); parseSettingFile(); } else qDebug(QString("WLANImp: Can't open file: %1 for reading.").arg(wlanFile).latin1()); } /** * Change the profile for both wireless settings and network settings. */ void WLANImp::setProfile(const QString &profile){ interfaceSetup->setProfile(profile); parseSettingFile(); } /** * Parses the settings file that was read in and gets any setting from it. */ void WLANImp::parseSettingFile(){ bool foundCase = false; bool found = false; for ( QStringList::Iterator it = settingsFileText.begin(); it != settingsFileText.end(); ++it ) { QString line = (*it).simplifyWhiteSpace(); if(line.contains("case")) foundCase = true; // See if we found our scheme to write or the sceme couldn't be found if((foundCase && line.contains("esac")) || (foundCase && line.left(currentProfile.length()+7) == currentProfile + ",*,*,*)" && line.at(0) != '#')) found = true; if(line.contains(";;")) found = false; if(found){ // write out scheme if(line.contains("ESSID=")){ QString id = line.mid(line.find("ESSID=")+6, line.length()); if(id == "any"){ essNon->setChecked(true); essSpecific->setChecked(false); }else{ essSpecific->setChecked(true); essSpecificLineEdit->setText(id); essNon->setChecked(false); } } if(line.contains("MODE=")){ QString mode = line.mid(line.find("MODE=")+5, line.length()); if(mode == "Managed"){ network802->setChecked( false ); networkInfrastructure->setChecked( true ); } else{ network802->setChecked( true ); networkInfrastructure->setChecked( false ); } } + if(line.contains("KEY0=")) + keyLineEdit0->setText(line.mid(5, line.length())); + if(line.contains("KEY1=")) + keyLineEdit1->setText(line.mid(5, line.length())); + if(line.contains("KEY2=")) + keyLineEdit2->setText(line.mid(5, line.length())); + if(line.contains("KEY3=")) + keyLineEdit3->setText(line.mid(5, line.length())); + if(line.contains("KEY=")){ - line.at(0) != '#' ? wepEnabled->setChecked(true) : wepEnabled->setChecked(false); - int s = line.find("KEY="); - line = line.mid(s+4, line.length()); - // Find first Key - s = line.find("[1]"); - if(s != -1){ - keyLineEdit0->setText(line.mid(0, s)); - line = line.mid(s+3, line.length()); - } - s = line.find("[2]"); - if(s != -1){ - keyLineEdit1->setText(line.mid(0, s)); - line = line.mid(s+3, line.length()); - } - s = line.find("[3]"); - if(s != -1){ - keyLineEdit2->setText(line.mid(0, s)); - line = line.mid(s+3, line.length()); - } - s = line.find("[4]"); - if(s != -1){ - keyLineEdit3->setText(line.mid(0, s)); - line = line.mid(s+3, line.length()); - } - if(line.contains("key [1]")) keyRadio0->setChecked(true); - if(line.contains("key [2]")) keyRadio1->setChecked(true); - if(line.contains("key [3]")) keyRadio2->setChecked(true); - if(line.contains("key [4]")) keyRadio3->setChecked(true); - if(line.contains("open")){ + wepEnabled->setChecked(true); + QString key; + if(line.right(5) == (" open")){ + key = line.mid(4, line.length()-5); authOpen->setChecked(true); authShared->setChecked(false); } else{ authOpen->setChecked(false); authShared->setChecked(true); + key = line.mid(4, line.length()); } + if(key == keyLineEdit0->text()) keyRadio0->setChecked(true); + if(key == keyLineEdit1->text()) keyRadio1->setChecked(true); + if(key == keyLineEdit2->text()) keyRadio2->setChecked(true); + if(key == keyLineEdit3->text()) keyRadio3->setChecked(true); } if(line.contains("CHANNEL=")){ networkChannel->setValue(line.mid(line.find("CHANNEL=")+8, line.length()).toInt()); } } } } /** * Saves settings to the wireless.opts file using the current profile */ void WLANImp::changeAndSaveSettingFile(){ QString wlanFile = WIRELESS_OPTS; QFile::remove(wlanFile); QFile file(wlanFile); if (!file.open(IO_ReadWrite)){ qDebug(QString("WLANImp::changeAndSaveSettingFile(): Can't open file: %1 for writing.").arg(wlanFile).latin1()); return; } QTextStream stream( &file ); bool foundCase = false; bool found = false; bool output = true; for ( QStringList::Iterator it = settingsFileText.begin(); it != settingsFileText.end(); ++it ) { QString line = (*it).simplifyWhiteSpace(); if(line.contains("case")) foundCase = true; // See if we found our scheme to write or the sceme couldn't be found if((foundCase && line.contains("esac") && !found) || (foundCase && line.left(currentProfile.length()+7) == currentProfile + ",*,*,*)" && line.at(0) != '#')){ // write out scheme found = true; output = false; if(!line.contains("esac")) stream << line << "\n"; stream << "\tESSID=" << (essNon->isChecked() == true ? QString("any") : essSpecificLineEdit->text()) << '\n'; - stream << "\tMODE=" << (networkInfrastructure->isChecked() == true ? "Managed" : "AdHoc") << '\n'; - if(!wepEnabled->isChecked()) - stream << "#"; - stream << "\tKEY="; - stream << keyLineEdit0->text() << " [1]"; - stream << keyLineEdit1->text() << " [2]"; - stream << keyLineEdit2->text() << " [3]"; - stream << keyLineEdit3->text() << " [4]"; - stream << " key ["; - if(keyRadio0->isChecked()) stream << "1]"; - if(keyRadio1->isChecked()) stream << "2]"; - if(keyRadio2->isChecked()) stream << "3]"; - if(keyRadio3->isChecked()) stream << "4]"; - if(authOpen->isChecked()) stream << " open"; - stream << "\n"; + stream << "\tMODE=" << (networkInfrastructure->isChecked() == true ? "Managed" : "ad-hoc") << '\n'; + + stream << "\tKEY0=" << keyLineEdit0->text() << "\n"; + stream << "\tKEY1=" << keyLineEdit1->text() << "\n"; + stream << "\tKEY2=" << keyLineEdit2->text() << "\n"; + stream << "\tKEY3=" << keyLineEdit3->text() << "\n"; + + if(wepEnabled->isChecked()){ + stream << "\tKEY="; + if(keyRadio0->isChecked()) stream << keyLineEdit0->text(); + if(keyRadio1->isChecked()) stream << keyLineEdit1->text(); + if(keyRadio2->isChecked()) stream << keyLineEdit2->text(); + if(keyRadio3->isChecked()) stream << keyLineEdit3->text(); + if(authOpen->isChecked()) stream << " open"; + stream << "\n"; + } stream << "\tCHANNEL=" << networkChannel->value() << "\n"; stream << "\tRATE=auto\n"; if(line.contains("esac")) stream << line << "\n"; } if(line.contains(";;")) output = true; if(output) stream << (*it) << '\n'; } file.close(); } /** * Check to see if the current config is valid * Save wireless.opts, save interfaces */ void WLANImp::accept(){ if(wepEnabled->isChecked()){ if(keyLineEdit0->text().isEmpty() && keyLineEdit1->text().isEmpty() && keyLineEdit2->text().isEmpty() && keyLineEdit3->text().isEmpty() ) { QMessageBox::information(this, "", "Please enter a key for WEP.", QMessageBox::Ok); return; } } // Ok settings are good here, save changeAndSaveSettingFile(); // Try to save the interfaces settings. if(!interfaceSetup->saveChanges()) return; - + + QDialog::accept(); + return; // Restart the device now that the settings have changed QString initpath; if( QDir("/etc/rc.d/init.d").exists() ) initpath = "/etc/rc.d/init.d"; else if( QDir("/etc/init.d").exists() ) initpath = "/etc/init.d"; if( initpath ) system(QString("%1/pcmcia stop").arg(initpath)); if( initpath ) system(QString("%1/pcmcia start").arg(initpath)); // Close out the dialog QDialog::accept(); } // wlanimp.cpp diff --git a/noncore/settings/networksettings/wlan/wlan.pro b/noncore/settings/networksettings/wlan/wlan.pro index 23fc39a..396dd4a 100644 --- a/noncore/settings/networksettings/wlan/wlan.pro +++ b/noncore/settings/networksettings/wlan/wlan.pro @@ -1,12 +1,12 @@ TEMPLATE = lib CONFIG += qt warn_on release #CONFIG += qt warn_on debug -DESTDIR = $(OPIEDIR)/plugins/networksetup +#DESTDIR = $(OPIEDIR)/plugins/networksetup HEADERS = wlanimp.h infoimp.h wlanmodule.h wextensions.h SOURCES = wlanimp.cpp infoimp.cpp wlanmodule.cpp wextensions.cpp INCLUDEPATH += $(OPIEDIR)/include ../ ../interfaces/ DEPENDPATH += $(OPIEDIR)/include LIBS += -lqpe -L../interfaces/ -linterfaces INTERFACES = wlan.ui info.ui TARGET = wlanplugin VERSION = 1.0.0 diff --git a/noncore/settings/networksettings/wlan/wlanimp.cpp b/noncore/settings/networksettings/wlan/wlanimp.cpp index 87a9716..488911b 100644 --- a/noncore/settings/networksettings/wlan/wlanimp.cpp +++ b/noncore/settings/networksettings/wlan/wlanimp.cpp @@ -1,234 +1,226 @@ #include "wlanimp.h" #include "interfacesetupimp.h" #include <qfile.h> #include <qdir.h> #include <qtextstream.h> #include <qmessagebox.h> #include <qlineedit.h> #include <qspinbox.h> #include <qradiobutton.h> #include <qcheckbox.h> #include <qtabwidget.h> /* system() */ #include <stdlib.h> #define WIRELESS_OPTS "/etc/pcmcia/wireless.opts" /** * Constructor, read in the wireless.opts file for parsing later. */ WLANImp::WLANImp( QWidget* parent, const char* name, Interface *i, bool modal, WFlags fl):WLAN(parent, name, modal, fl), currentProfile("*") { interfaceSetup = new InterfaceSetupImp(tabWidget, "InterfaceSetupImp", i); tabWidget->insertTab(interfaceSetup, "TCP/IP"); // Read in the config file. QString wlanFile = WIRELESS_OPTS; QFile file(wlanFile); if (file.open(IO_ReadOnly)){ QTextStream stream( &file ); QString line = ""; while ( !stream.eof() ) { line += stream.readLine(); line += "\n"; } file.close(); settingsFileText = QStringList::split("\n", line, true); parseSettingFile(); } else qDebug(QString("WLANImp: Can't open file: %1 for reading.").arg(wlanFile).latin1()); } /** * Change the profile for both wireless settings and network settings. */ void WLANImp::setProfile(const QString &profile){ interfaceSetup->setProfile(profile); parseSettingFile(); } /** * Parses the settings file that was read in and gets any setting from it. */ void WLANImp::parseSettingFile(){ bool foundCase = false; bool found = false; for ( QStringList::Iterator it = settingsFileText.begin(); it != settingsFileText.end(); ++it ) { QString line = (*it).simplifyWhiteSpace(); if(line.contains("case")) foundCase = true; // See if we found our scheme to write or the sceme couldn't be found if((foundCase && line.contains("esac")) || (foundCase && line.left(currentProfile.length()+7) == currentProfile + ",*,*,*)" && line.at(0) != '#')) found = true; if(line.contains(";;")) found = false; if(found){ // write out scheme if(line.contains("ESSID=")){ QString id = line.mid(line.find("ESSID=")+6, line.length()); if(id == "any"){ essNon->setChecked(true); essSpecific->setChecked(false); }else{ essSpecific->setChecked(true); essSpecificLineEdit->setText(id); essNon->setChecked(false); } } if(line.contains("MODE=")){ QString mode = line.mid(line.find("MODE=")+5, line.length()); if(mode == "Managed"){ network802->setChecked( false ); networkInfrastructure->setChecked( true ); } else{ network802->setChecked( true ); networkInfrastructure->setChecked( false ); } } + if(line.contains("KEY0=")) + keyLineEdit0->setText(line.mid(5, line.length())); + if(line.contains("KEY1=")) + keyLineEdit1->setText(line.mid(5, line.length())); + if(line.contains("KEY2=")) + keyLineEdit2->setText(line.mid(5, line.length())); + if(line.contains("KEY3=")) + keyLineEdit3->setText(line.mid(5, line.length())); + if(line.contains("KEY=")){ - line.at(0) != '#' ? wepEnabled->setChecked(true) : wepEnabled->setChecked(false); - int s = line.find("KEY="); - line = line.mid(s+4, line.length()); - // Find first Key - s = line.find("[1]"); - if(s != -1){ - keyLineEdit0->setText(line.mid(0, s)); - line = line.mid(s+3, line.length()); - } - s = line.find("[2]"); - if(s != -1){ - keyLineEdit1->setText(line.mid(0, s)); - line = line.mid(s+3, line.length()); - } - s = line.find("[3]"); - if(s != -1){ - keyLineEdit2->setText(line.mid(0, s)); - line = line.mid(s+3, line.length()); - } - s = line.find("[4]"); - if(s != -1){ - keyLineEdit3->setText(line.mid(0, s)); - line = line.mid(s+3, line.length()); - } - if(line.contains("key [1]")) keyRadio0->setChecked(true); - if(line.contains("key [2]")) keyRadio1->setChecked(true); - if(line.contains("key [3]")) keyRadio2->setChecked(true); - if(line.contains("key [4]")) keyRadio3->setChecked(true); - if(line.contains("open")){ + wepEnabled->setChecked(true); + QString key; + if(line.right(5) == (" open")){ + key = line.mid(4, line.length()-5); authOpen->setChecked(true); authShared->setChecked(false); } else{ authOpen->setChecked(false); authShared->setChecked(true); + key = line.mid(4, line.length()); } + if(key == keyLineEdit0->text()) keyRadio0->setChecked(true); + if(key == keyLineEdit1->text()) keyRadio1->setChecked(true); + if(key == keyLineEdit2->text()) keyRadio2->setChecked(true); + if(key == keyLineEdit3->text()) keyRadio3->setChecked(true); } if(line.contains("CHANNEL=")){ networkChannel->setValue(line.mid(line.find("CHANNEL=")+8, line.length()).toInt()); } } } } /** * Saves settings to the wireless.opts file using the current profile */ void WLANImp::changeAndSaveSettingFile(){ QString wlanFile = WIRELESS_OPTS; QFile::remove(wlanFile); QFile file(wlanFile); if (!file.open(IO_ReadWrite)){ qDebug(QString("WLANImp::changeAndSaveSettingFile(): Can't open file: %1 for writing.").arg(wlanFile).latin1()); return; } QTextStream stream( &file ); bool foundCase = false; bool found = false; bool output = true; for ( QStringList::Iterator it = settingsFileText.begin(); it != settingsFileText.end(); ++it ) { QString line = (*it).simplifyWhiteSpace(); if(line.contains("case")) foundCase = true; // See if we found our scheme to write or the sceme couldn't be found if((foundCase && line.contains("esac") && !found) || (foundCase && line.left(currentProfile.length()+7) == currentProfile + ",*,*,*)" && line.at(0) != '#')){ // write out scheme found = true; output = false; if(!line.contains("esac")) stream << line << "\n"; stream << "\tESSID=" << (essNon->isChecked() == true ? QString("any") : essSpecificLineEdit->text()) << '\n'; - stream << "\tMODE=" << (networkInfrastructure->isChecked() == true ? "Managed" : "AdHoc") << '\n'; - if(!wepEnabled->isChecked()) - stream << "#"; - stream << "\tKEY="; - stream << keyLineEdit0->text() << " [1]"; - stream << keyLineEdit1->text() << " [2]"; - stream << keyLineEdit2->text() << " [3]"; - stream << keyLineEdit3->text() << " [4]"; - stream << " key ["; - if(keyRadio0->isChecked()) stream << "1]"; - if(keyRadio1->isChecked()) stream << "2]"; - if(keyRadio2->isChecked()) stream << "3]"; - if(keyRadio3->isChecked()) stream << "4]"; - if(authOpen->isChecked()) stream << " open"; - stream << "\n"; + stream << "\tMODE=" << (networkInfrastructure->isChecked() == true ? "Managed" : "ad-hoc") << '\n'; + + stream << "\tKEY0=" << keyLineEdit0->text() << "\n"; + stream << "\tKEY1=" << keyLineEdit1->text() << "\n"; + stream << "\tKEY2=" << keyLineEdit2->text() << "\n"; + stream << "\tKEY3=" << keyLineEdit3->text() << "\n"; + + if(wepEnabled->isChecked()){ + stream << "\tKEY="; + if(keyRadio0->isChecked()) stream << keyLineEdit0->text(); + if(keyRadio1->isChecked()) stream << keyLineEdit1->text(); + if(keyRadio2->isChecked()) stream << keyLineEdit2->text(); + if(keyRadio3->isChecked()) stream << keyLineEdit3->text(); + if(authOpen->isChecked()) stream << " open"; + stream << "\n"; + } stream << "\tCHANNEL=" << networkChannel->value() << "\n"; stream << "\tRATE=auto\n"; if(line.contains("esac")) stream << line << "\n"; } if(line.contains(";;")) output = true; if(output) stream << (*it) << '\n'; } file.close(); } /** * Check to see if the current config is valid * Save wireless.opts, save interfaces */ void WLANImp::accept(){ if(wepEnabled->isChecked()){ if(keyLineEdit0->text().isEmpty() && keyLineEdit1->text().isEmpty() && keyLineEdit2->text().isEmpty() && keyLineEdit3->text().isEmpty() ) { QMessageBox::information(this, "", "Please enter a key for WEP.", QMessageBox::Ok); return; } } // Ok settings are good here, save changeAndSaveSettingFile(); // Try to save the interfaces settings. if(!interfaceSetup->saveChanges()) return; - + + QDialog::accept(); + return; // Restart the device now that the settings have changed QString initpath; if( QDir("/etc/rc.d/init.d").exists() ) initpath = "/etc/rc.d/init.d"; else if( QDir("/etc/init.d").exists() ) initpath = "/etc/init.d"; if( initpath ) system(QString("%1/pcmcia stop").arg(initpath)); if( initpath ) system(QString("%1/pcmcia start").arg(initpath)); // Close out the dialog QDialog::accept(); } // wlanimp.cpp |