diff options
author | tpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2011-10-17 17:38:53 +0000 |
---|---|---|
committer | tpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2011-10-17 17:38:53 +0000 |
commit | 1e0dd58661c9097fb41218ee7e3515f2d8ba8dac (patch) | |
tree | a263b4ad0c1f7fba6013f5d9854db4cb4962df82 /knetworkmanager-0.8/vpn-plugins/vpnc/src/knetworkmanager-vpnc.cpp | |
download | knetworkmanager8-1e0dd58661c9097fb41218ee7e3515f2d8ba8dac.tar.gz knetworkmanager8-1e0dd58661c9097fb41218ee7e3515f2d8ba8dac.zip |
Add dead-ended knetworkmanager 0.8 source
Add copy of same for knetworkmanager 0.9 starting point
git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/applications/knetworkmanager8@1259314 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'knetworkmanager-0.8/vpn-plugins/vpnc/src/knetworkmanager-vpnc.cpp')
-rw-r--r-- | knetworkmanager-0.8/vpn-plugins/vpnc/src/knetworkmanager-vpnc.cpp | 402 |
1 files changed, 402 insertions, 0 deletions
diff --git a/knetworkmanager-0.8/vpn-plugins/vpnc/src/knetworkmanager-vpnc.cpp b/knetworkmanager-0.8/vpn-plugins/vpnc/src/knetworkmanager-vpnc.cpp new file mode 100644 index 0000000..526d5d5 --- /dev/null +++ b/knetworkmanager-0.8/vpn-plugins/vpnc/src/knetworkmanager-vpnc.cpp @@ -0,0 +1,402 @@ +/*************************************************************************** + * + * knetworkmanager-vpnc.cpp - A NetworkManager frontend for KDE + * + * Copyright (C) 2006 Novell, Inc. + * + * Author: Helmut Schaa <[email protected]>, <[email protected]> + * Author: Timothy Pearson <[email protected]> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + **************************************************************************/ + +#include <klocale.h> +#include <kmessagebox.h> +#include <tqmessagebox.h> +#include <tqbutton.h> +#include <kcombobox.h> +#include <klineedit.h> +#include <kurlrequester.h> +#include <tqobjectlist.h> +#include <tqobject.h> +#include <tqcheckbox.h> +#include <kpassdlg.h> +#include <kgenericfactory.h> +#include <tqlabel.h> +#include <string> +#include <stdio.h> + +#include "knetworkmanager-vpnc.h" +using namespace std; + +typedef KGenericFactory<VPNCPlugin> VPNCPluginFactory; +K_EXPORT_COMPONENT_FACTORY( knetworkmanager_vpnc, VPNCPluginFactory("knetworkmanager_vpnc")); + +#define NAT_MODE_CISCO 0 +#define NAT_MODE_NATT 1 +#define NAT_MODE_DISABLED 2 + +char linedata [2048]; + +VPNCPlugin::VPNCPlugin(TQObject* parent, const char* name, const TQStringList& args) + : VPNPlugin(parent, name, args) +{ + KLocale* loc = KGlobal::locale(); + loc->insertCatalogue("NetworkManager-vpnc"); +} + +VPNCPlugin::~VPNCPlugin() +{ + +} + +VPNConfigWidget* VPNCPlugin::CreateConfigWidget(TQWidget* parent) +{ + return new VPNCConfig(parent); +} + +VPNAuthenticationWidget* VPNCPlugin::CreateAuthenticationWidget(TQWidget* parent) +{ + return new VPNCAuthentication(parent); +} + + +VPNCConfig::VPNCConfig(TQWidget* parent) + : VPNConfigWidget(parent) +{ + TQVBoxLayout* tqlayout = new TQVBoxLayout(this, 1, 1); + _vpncWidget = new VPNCConfigWidget(this); + tqlayout->addWidget(_vpncWidget); + + connect(_vpncWidget->pcfImport, TQT_SIGNAL(clicked()), this, TQT_SLOT( pcfImport()) ); + + //connect(_vpncWidget->chkOverrideUsername, TQT_SIGNAL(toggled(bool)), _vpncWidget->Xauth_username, TQT_SLOT(setEnabled(bool))); + //connect(_vpncWidget->chkOverrideUsername, TQT_SIGNAL(toggled(bool)), _vpncWidget->lblUsername, TQT_SLOT(setEnabled(bool))); + + connect(_vpncWidget->chkUseDomain, TQT_SIGNAL(toggled(bool)), _vpncWidget->Domain, TQT_SLOT(setEnabled(bool))); + connect(_vpncWidget->chkUseDomain, TQT_SIGNAL(toggled(bool)), _vpncWidget->lblDomain, TQT_SLOT(setEnabled(bool))); + + connect(_vpncWidget->chkIPAdresses, TQT_SIGNAL(toggled(bool)), _vpncWidget->routes, TQT_SLOT(setEnabled(bool))); + + connect(_vpncWidget->chkUseKeepAlive, TQT_SIGNAL(toggled(bool)), _vpncWidget->nat_keep_alive_interval, TQT_SLOT(setEnabled(bool))); + connect(_vpncWidget->chkUseKeepAlive, TQT_SIGNAL(toggled(bool)), _vpncWidget->lblKeepAliveInterval, TQT_SLOT(setEnabled(bool))); + + _vpncWidget->cboNAT->insertItem(i18n("Cisco UDP (default)"), NAT_MODE_CISCO); + _vpncWidget->cboNAT->insertItem(i18n("NAT-T"), NAT_MODE_NATT); + _vpncWidget->cboNAT->insertItem(i18n("Disabled"), NAT_MODE_DISABLED); + + this->languageChange(); +} + +VPNCConfig::~VPNCConfig() +{ + +} + +void VPNCConfig::languageChange() +{ + +} + +int VPNCConfig::getFileConfig(char *parameter, char *line) { + int i; + + if (strstr(line, parameter) != NULL) { + if ((strstr(line, parameter) - line) == 0) { + for (i=0; i<(strlen(line)-strlen(parameter));i++) { + linedata[i] = line[i+strlen(parameter)]; + if ((linedata[i] == 10) || (linedata[i] == 13)) { + linedata[i] = 0; + } + } + linedata[i-1]=0; + + return 0; + } + else { + return 1; + } + } + else { + return 1; + } +} + +void VPNCConfig::pcfImport() +{ + const TQString& pcf_file = TQString(_vpncWidget->editPCF->url()); + printf("Asked for PCF import from file %s\n\r", pcf_file.ascii()); + int i; + + FILE *file = fopen ( pcf_file.ascii(), "r" ); + if ( file != NULL ) { + char line [2048]; // or other suitable maximum line size + // read a line + while ( fgets ( line, sizeof line, file ) != NULL ) { + // Parse the line and update global variables (current line in variable "line") + if (getFileConfig("Host=", line) == 0) { + //strdup(linedata) + printf("Got configuration parameter Host with data %s\n\r", linedata); + _vpncWidget->IPSec_gateway->setText(linedata); + } + if (getFileConfig("GroupName=", line) == 0) { + printf("Got configuration parameter GroupName with data %s\n\r", linedata); + _vpncWidget->IPSec_ID->setText(linedata); + } +// if (getFileConfig("TcpTunnelingPort=", line) == 0) { +// printf("Got configuration parameter TcpTunnelingPort with data %s\n\r", linedata); +// _vpncWidget->IPSec_ID->setText(linedata); +// } + if (getFileConfig("NTDomain=", line) == 0) { + if (strlen(linedata) > 0) { + printf("Got configuration parameter NTDomain with data %s\n\r", linedata); + _vpncWidget->Domain->setText(linedata); + _vpncWidget->chkUseDomain->setChecked(true); + } + } + if (getFileConfig("GroupPwd=", line) == 0) { + if (strlen(linedata) > 0) { + printf("Got configuration parameter GroupPwd with data %s\n\r", linedata); + KMessageBox::information(this, TQString("Your group password is: %1\n\r\n\rYou will need this information when you log on").tqarg(linedata)); + } + } + if (getFileConfig("enc_GroupPwd=", line) == 0) { + if (strlen(linedata) > 0) { + printf("Got configuration parameter enc_GroupPwd with data %s\n\r", linedata); + + // Decrypt the obfusticated password with /usr/lib/vpnc/cisco-decrypt + string decryptcommand="/usr/lib/vpnc/cisco-decrypt "; + FILE *pipe_decrypt; + char decrypted_result[2048]; + int i; + + decryptcommand.append(linedata); + printf("Group password decrypt command: %s\n\r", decryptcommand.c_str()); + if ((pipe_decrypt = popen(decryptcommand.c_str(), "r")) == NULL) + { + printf("Group password decrypt error\n\r"); + } + else { + fgets(decrypted_result, 2048, pipe_decrypt); + pclose(pipe_decrypt); + for (i=0;i<2048;i++) { + if (decrypted_result[i] == 0) { + decrypted_result[i-1]=0; + i=2048; + } + } + printf("Group password decrypt result: '%s'\n\r", decrypted_result); + } + KMessageBox::information(this, TQString("Your group password is: %1\n\r\n\rYou will need this information when you log on").tqarg(decrypted_result)); + } + } + } + fclose ( file ); + } + else + { + //printf("[WARN] Unable to open configuration file %s\n\r", pcf_file.ascii()); + KMessageBox::error(this, i18n("That configuration file does not exist!")); + } +} + +void VPNCConfig::setVPNData(const TQStringList& routes, const TQMap<TQString, TQString>& properties) +{ + // fill up our inputfields (only textfields atm) + for(TQMap<TQString, TQString>::ConstIterator it = properties.begin(); it != properties.end(); ++it) + { + TQString entry = it.key(); + TQString value = it.data(); + + if (entry == "IPSec gateway") + { + _vpncWidget->IPSec_gateway->setText(value); + } + else if (entry == "IPSec ID") + { + _vpncWidget->IPSec_ID->setText(value); + } + else if (entry == "Xauth username") + { + _vpncWidget->Xauth_username->setText(value); + //_vpncWidget->chkOverrideUsername->setChecked(true); + } + else if (entry == "Domain") + { + _vpncWidget->Domain->setText(value); + _vpncWidget->chkUseDomain->setChecked(true); + } + else if (entry == "NAT-Keepalive packet interval") + { + _vpncWidget->nat_keep_alive_interval->setText(value); + _vpncWidget->chkUseKeepAlive->setChecked(true); + } + // backwards compatibility + else if (entry == "Disable NAT Traversal") + { + _vpncWidget->cboNAT->setCurrentItem(NAT_MODE_DISABLED); + } + else if (entry == "NAT Traversal Mode") + { + if (value == "natt") + _vpncWidget->cboNAT->setCurrentItem(NAT_MODE_NATT); + else if (value == "cisco-udp") + _vpncWidget->cboNAT->setCurrentItem(NAT_MODE_CISCO); + else if (value == "none") + _vpncWidget->cboNAT->setCurrentItem(NAT_MODE_DISABLED); + else + { + // FIXME: unknown NAT mode + } + } + else if (entry == "Enable Single DES") + { + _vpncWidget->chkSingleDES->setChecked(value == "yes" || value == "true"); + } + } + + // set routes + if (!routes.empty()) + { + _vpncWidget->chkIPAdresses->setChecked(true); + _vpncWidget->routes->setText(routes.join(" ")); + } +} + +TQMap<TQString, TQString> VPNCConfig::getVPNProperties() +{ + // build a StingList of properties + TQMap<TQString, TQString> strlist; + strlist.insert("IPSec gateway", TQString(_vpncWidget->IPSec_gateway->text())); + strlist.insert("IPSec ID", TQString(_vpncWidget->IPSec_ID->text())); + + //if (_vpncWidget->chkOverrideUsername->isChecked()) + strlist.insert("Xauth username", TQString(_vpncWidget->Xauth_username->text())); + + if (_vpncWidget->chkUseDomain->isChecked()) + strlist.insert("Domain", TQString(_vpncWidget->Domain->text())); + + if (_vpncWidget->chkUseKeepAlive->isChecked()) + strlist.insert("NAT-Keepalive packet interval", TQString(_vpncWidget->nat_keep_alive_interval->text())); + + switch (_vpncWidget->cboNAT->currentItem()) + { + case NAT_MODE_CISCO: + strlist.insert("NAT Traversal Mode", "cisco-udp"); + break; + case NAT_MODE_NATT: + strlist.insert("NAT Traversal Mode", "natt"); + break; + case NAT_MODE_DISABLED: + default: + strlist.insert("NAT Traversal Mode", "none"); + break; + } + + if (_vpncWidget->chkSingleDES->isChecked()) + strlist.insert("Enable Single DES", "yes"); + else + strlist.insert("Enable Single DES", "no"); + + return strlist; +} + +TQStringList VPNCConfig::getVPNRoutes() +{ + TQStringList strlist; + if(_vpncWidget->chkIPAdresses->isChecked()) + { + strlist = TQStringList::split(" ", _vpncWidget->routes->text()); + } + return strlist; + +} + +bool VPNCConfig::hasChanged() +{ + return true; +} + +bool VPNCConfig::isValid(TQStringList& err_msg) +{ + bool retval = true; + if(_vpncWidget->IPSec_gateway->text() == "" || _vpncWidget->IPSec_ID->text() == "") + { + err_msg.append(i18n("At least the gateway and group has to be supplied.")); + retval = false; + } + return retval; +} + +VPNCAuthentication::VPNCAuthentication(TQWidget* parent, char* name) + : VPNAuthenticationWidget(parent, name) +{ + TQVBoxLayout* tqlayout = new TQVBoxLayout(this, 1, 1); + _vpncAuth = new VPNCAuthenticationWidget(this); + tqlayout->addWidget(_vpncAuth); +} + +VPNCAuthentication::~VPNCAuthentication() +{ + +} + +TQMap<TQString, TQString> VPNCAuthentication::getPasswords() +{ + TQMap<TQString, TQString> pwds; + pwds.insert("Xauth password", TQString(_vpncAuth->editUserPassword->password())); + if (_vpncAuth->chkObfusticated->isChecked()) { + // Decrypt the obfusticated password with /usr/lib/vpnc/cisco-decrypt + string decryptcommand="/usr/lib/vpnc/cisco-decrypt "; + FILE *pipe_decrypt; + char decrypted_result[2048]; + int i; + + decryptcommand.append(_vpncAuth->editGroupPassword->password()); + printf("Group password decrypt command: %s\n\r", decryptcommand.c_str()); + if ((pipe_decrypt = popen(decryptcommand.c_str(), "r")) == NULL) + { + printf("Group password decrypt error\n\r"); + } + else { + fgets(decrypted_result, 2048, pipe_decrypt); + pclose(pipe_decrypt); + for (i=0;i<2048;i++) { + if (decrypted_result[i] == 0) { + decrypted_result[i-1]=0; + i=2048; + } + } + printf("Group password decrypt result: '%s'\n\r", decrypted_result); + pwds.insert("IPSec secret", TQString(decrypted_result)); + } + } + else { + pwds.insert("IPSec secret", TQString(_vpncAuth->editGroupPassword->password())); + } + return pwds; +} + +void VPNCAuthentication::setPasswords(TQString name, TQString value) { + if (name == TQString("Xauth password")) { + _vpncAuth->editUserPassword->erase(); + _vpncAuth->editUserPassword->insert(value); + } + else if (name == TQString("IPSec secret")) { + _vpncAuth->editGroupPassword->erase(); + _vpncAuth->editGroupPassword->insert(value); + } +}
\ No newline at end of file |