summaryrefslogtreecommitdiffstats
path: root/src/toolsinfodialog.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/toolsinfodialog.cpp')
-rw-r--r--src/toolsinfodialog.cpp527
1 files changed, 527 insertions, 0 deletions
diff --git a/src/toolsinfodialog.cpp b/src/toolsinfodialog.cpp
new file mode 100644
index 0000000..26e8041
--- /dev/null
+++ b/src/toolsinfodialog.cpp
@@ -0,0 +1,527 @@
+/***************************************************************************
+ * Copyright (C) 2004 by Christoph Thielecke *
+ * crissi99@gmx.de *
+ * *
+ * 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. *
+ ***************************************************************************/
+//BEGIN INCLUDES
+#include "toolsinfodialog.h"
+#include "listviewtooltip.h"
+#include <klistview.h>
+//#include <qlistviewitem.h>
+#include <qpixmap.h>
+#include <kglobal.h>
+#include <qstring.h>
+#include <kiconloader.h>
+#include <iostream>
+#include <klocale.h>
+#include <qcursor.h>
+
+#include "utils.h"
+//END INCLUDES
+
+ToolsInfoDialog::ToolsInfoDialog(KVpncConfig *GlobalConfig, QWidget *parent, const char *)
+ :KDialogBase( parent, "Tool_information", true, "",
+ KDialogBase::Ok|KDialogBase::Cancel, KDialogBase::Ok, true )
+{
+ main = new ToolsInfoWidgetBase(this);
+ setMainWidget(main);
+ main->InfoListView->setMinimumSize(main->InfoListView->sizeHint());
+
+ QPixmap ok_icon = KGlobal::iconLoader()->loadIcon( "button_ok", KIcon::NoGroup, 16 );
+ QPixmap wrong_icon = KGlobal::iconLoader()->loadIcon( "button_cancel", KIcon::NoGroup, 16 );
+ ToolInfo *tool=0;
+ main->InfoListView->setSorting(1);
+
+ GlobalConfig->appPointer->setOverrideCursor( QCursor(Qt::WaitCursor) );
+
+ for ( tool = GlobalConfig->ToolList->first(); tool; tool = GlobalConfig->ToolList->next() )
+ {
+// std::cout << "tool: " << tool->Name.ascii() << std::endl;
+ // std::cout << "Version: " << tool->Version << std::endl;
+ // std::cout << "Path: " << tool->PathToExec << std::endl << std::endl;
+ QString state="";
+ QString usability="";
+ QString requiredBy="";
+ QString comment="";
+
+ tool->programsInPath = GlobalConfig->programsInPath;
+
+// tool->collectToolInfo();
+
+ if (!tool->PathToExec.isEmpty() && QFile (tool->PathToExec).exists() && QFileInfo(tool->PathToExec).isFile() )
+ {
+// state=i18n("Found");
+ if (tool->Name == "vpnc")
+ {
+ // FIXME use major/minor/subminor version
+ if ( tool->Version.find("0.3.",0,-1) > -1 || tool->Version.find("0.4.",0,-1) > -1)
+ {
+ usability=i18n("good");
+ comment=i18n("no certificate support");
+ }
+ if ( tool->Version.find("0.5.",0,-1) > -1 )
+ {
+ usability=i18n("good");
+ if( tool->Capabilities.find(i18n("openssl (certificate) support"),0,-1) > -1)
+ comment=i18n("hybrid support");
+ else
+ comment=i18n("no certificate support");
+ }
+ else if ( tool->Version.find("0.3.2",0,-1) > -1)
+ {
+ usability=i18n("limited");
+ comment=i18n("no split DNS support");
+ }
+ else if ( tool->Version.find("0.2.",0,-1) > -1)
+ {
+ usability=i18n("basic");
+ comment=i18n("no NAT-T, IPSec over IP, no split DNS support");
+ }
+
+ }
+ else if (tool->Name == "ciscovpnc")
+ {
+ usability=i18n("full");
+ }
+ else if (tool->Name == "ipsec")
+ {
+ // version is like this: "Openswan U2.4.4/K2.6.15" or "strongSwan U2.4.4/K2.6.15"
+ QString realversion=tool->Version.section(' ',1,1).section('/',0,0).right(tool->Version.section(' ',1,1).section('/',0,0).length()-1);
+ int majorversion = realversion.section('.',0,0).toInt();
+ int minorversion = realversion.section('.',1,1).toInt();
+ int subminorversion = realversion.section('.',2,2).toInt();
+ QString realtype=tool->Version.section(' ',0,0).lower();
+
+ if ( tool->Version.contains("Openswan"))
+ {
+ comment="Openswan";
+ comment+=", "+i18n("kernel %1 support").arg("2.6");
+ comment+=", "+i18n("smartcard support");
+ }
+ else if ( tool->Version.contains("strongSwan"))
+ {
+ comment="strongSwan";
+ comment+=", "+i18n("no aggressive mode");
+ comment+=", "+i18n("kernel %1 support").arg("2.4");
+ if (!(majorversion <= 2 && minorversion <= 8 && subminorversion <= 1))
+ comment+=", "+i18n("kernel %1 support").arg("2.6");
+ comment+=", "+i18n("smartcard support");
+ }
+ else
+ {
+ comment+="FreeS/WAN";
+ }
+
+ if ( realversion.find("2.",0,-1) > -1)
+ usability=i18n("full");
+ else if ( realversion.find("1.",0,-1) > -1)
+ {
+ usability=i18n("limited");
+ comment=+", "+i18n("no aggressive mode");
+ }
+ else
+ usability=i18n("unknown");
+
+ }
+ else if (tool->Name == "racoon")
+ {
+ //if ( tool->Version.find("2.",0,-1) > -1)
+ usability=i18n("full");
+ //else if ( tool->Version.find("2.",0,-1) > -1)
+ // usability=i18n("limited");
+ }
+ else if (tool->Name == "openvpn")
+ {
+ if ( tool->Version.find("2.",0,-1) > -1)
+ {
+ usability=i18n("full");
+// int major=tool->Version.section('.',0,0).toInt();
+// int minor=tool->Version.section('.',1,1).toInt();
+// int subminor=tool->Version.section('.',2,2).toInt();
+
+// if ( major >= 2 && minor >= 1)
+ if (tool->Capabilities.find( i18n("pkcs11 support"), 0, FALSE ) > -1 )
+ {
+ if (!comment.isEmpty())
+ comment+=", ";
+ comment+=i18n("smartcard support");
+ }
+ }
+ else if ( tool->Version.find("1.",0,-1) > -1)
+ //else
+ usability=i18n("limited");
+ }
+ else if (tool->Name == "pppd")
+ {
+ //if ( tool->Version.find("2.",0,-1) > -1)
+ usability=i18n("full");
+ //else if ( tool->Version.find("2.",0,-1) > -1)
+ // usability=i18n("limited");
+
+ Utils::PppdCapabilities pppdcap = Utils ( GlobalConfig ).checkPppdCapabilities();
+ comment="";
+ if (pppdcap.pppdHasMppeRequiredSupport==true)
+ {
+ if (!comment.isEmpty())
+ comment+=",";
+ comment+= "mppe required";
+ }
+ if (pppdcap.pppdHasRequireMppeSupport==true)
+ {
+ if (!comment.isEmpty())
+ comment+=",";
+ comment+= "require-mppe";
+ }
+ if (pppdcap.pppdHasReplacedefaultrouteSupport==true)
+ {
+ if (!comment.isEmpty())
+ comment+=",";
+ comment+="replacedefaultroute";
+ }
+ if (pppdcap.pppdHasMppeSupport==true)
+ {
+ if (!comment.isEmpty())
+ comment+=",";
+ comment+= "mppe support";
+ }
+ }
+ else if (tool->Name == "pptp")
+ {
+ //if ( tool->Version.find("2.",0,-1) > -1)
+ usability=i18n("full");
+ //else if ( tool->Version.find("2.",0,-1) > -1)
+ // usability=i18n("limited");
+ }
+ else if (tool->Name == "vtund")
+ {
+ //if ( tool->Version.find("2.",0,-1) > -1)
+ usability=i18n("full");
+ //else if ( tool->Version.find("2.",0,-1) > -1)
+ // usability=i18n("limited");
+ }
+ else if (tool->Name == "ping")
+ {
+ //if ( tool->Version.find("2.",0,-1) > -1)
+ usability=i18n("full");
+ //else if ( tool->Version.find("2.",0,-1) > -1)
+ // usability=i18n("limited");
+ }
+ else if (tool->Name == "pkcs11-tool")
+ {
+ //if ( tool->Version.find("2.",0,-1) > -1)
+ usability=i18n("full");
+ //else if ( tool->Version.find("2.",0,-1) > -1)
+ // usability=i18n("limited");
+ }
+ else if (tool->Name == "cisco_cert_mgr")
+ {
+ //if ( tool->Version.find("2.",0,-1) > -1)
+ usability=i18n("full");
+ //else if ( tool->Version.find("2.",0,-1) > -1)
+ // usability=i18n("limited");
+ requiredBy=i18n("Cisco (propritary)");
+ }
+ else if (tool->Name == "kill")
+ {
+ //if ( tool->Version.find("2.",0,-1) > -1)
+ usability=i18n("full");
+ //else if ( tool->Version.find("2.",0,-1) > -1)
+ // usability=i18n("limited");
+ }
+ else if (tool->Name == "ip")
+ {
+ //if ( tool->Version.find("2.",0,-1) > -1)
+ usability=i18n("full");
+ //else if ( tool->Version.find("2.",0,-1) > -1)
+ // usability=i18n("limited");
+ }
+ else if (tool->Name == "ifconfig")
+ {
+ //if ( tool->Version.find("2.",0,-1) > -1)
+ usability=i18n("full");
+ //else if ( tool->Version.find("2.",0,-1) > -1)
+ // usability=i18n("limited");
+ }
+ else if (tool->Name == "route")
+ {
+ //if ( tool->Version.find("2.",0,-1) > -1)
+ usability=i18n("full");
+ //else if ( tool->Version.find("2.",0,-1) > -1)
+ // usability=i18n("limited");
+ }
+ else if (tool->Name == "bash")
+ {
+ //if ( tool->Version.find("2.",0,-1) > -1)
+ usability=i18n("full");
+ //else if ( tool->Version.find("2.",0,-1) > -1)
+ // usability=i18n("limited");
+ }
+ else if (tool->Name == "iptables")
+ {
+ //if ( tool->Version.find("2.",0,-1) > -1)
+ usability=i18n("full");
+ //else if ( tool->Version.find("2.",0,-1) > -1)
+ // usability=i18n("limited");
+ }
+ else if (tool->Name == "killall")
+ {
+ //if ( tool->Version.find("2.",0,-1) > -1)
+ usability=i18n("full");
+ //else if ( tool->Version.find("2.",0,-1) > -1)
+ // usability=i18n("limited");
+ }
+ else if (tool->Name == "openssl")
+ {
+ //if ( tool->Version.find("2.",0,-1) > -1)
+ usability=i18n("full");
+ //else if ( tool->Version.find("2.",0,-1) > -1)
+ // usability=i18n("limited");
+ }
+ else if (tool->Name == "setkey")
+ {
+ //if ( tool->Version.find("2.",0,-1) > -1)
+ usability=i18n("full");
+ //else if ( tool->Version.find("2.",0,-1) > -1)
+ // usability=i18n("limited");
+ }
+ else if (tool->Name == "vpnclient")
+ {
+ //if ( tool->Version.find("2.",0,-1) > -1)
+ usability=i18n("full");
+ //else if ( tool->Version.find("2.",0,-1) > -1)
+ // usability=i18n("limited");
+ }
+ else if (tool->Name == "l2tpd")
+ {
+ //if ( tool->Version.find("2.",0,-1) > -1)
+// usability=i18n("full");
+ //else if ( tool->Version.find("2.",0,-1) > -1)
+ // usability=i18n("limited");
+ }
+ else if (tool->Name == "xl2tpd")
+ {
+ //if ( tool->Version.find("2.",0,-1) > -1)
+// usability=i18n("full");
+ //else if ( tool->Version.find("2.",0,-1) > -1)
+ // usability=i18n("limited");
+ }
+ else if (tool->Name == "openl2tp")
+ {
+ //if ( tool->Version.find("2.",0,-1) > -1)
+// usability=i18n("full");
+ //else if ( tool->Version.find("2.",0,-1) > -1)
+ // usability=i18n("limited");
+ }
+ else if (tool->Name == "tail")
+ {
+// comment+=", "+i18n("kernel %1 support").arg("2.6");
+ }
+ else if (tool->Name == "ssh")
+ {
+ int major=tool->Version.section('.',0,0).toInt();
+ int minor=tool->Version.section('.',1,1).section('p',0,0).toInt();
+// std::cout << "ssh version: major: " << QString().setNum(major).ascii() << " minor: " << QString().setNum(minor).ascii() << std::endl;
+ if ( major > 4 || ( major == 4 && minor >= 3) )
+ {
+ usability=i18n("full");
+ }
+ else
+ {
+ if ( major < 4 )
+ //else
+ usability=i18n("unuseable");
+ comment=+i18n("no vpn support");
+ }
+ }
+
+ else
+ {
+ // other tools
+ usability=i18n("full");
+ }
+
+ }
+ else
+ {
+// state=i18n("Not found");
+ usability=i18n("none");
+ }
+
+// state=i18n("Found");
+ if (tool->Name == "vpnc")
+ {
+ requiredBy=i18n("Cisco (free)");
+ }
+ else if (tool->Name == "ciscovpnc")
+ {
+ requiredBy=i18n("Cisco (propritary)");
+ }
+ else if (tool->Name == "ipsec")
+ {
+ QString realversion=tool->Version.section(' ',1,1).section('/',0,0).right(tool->Version.section(' ',1,1).section('/',0,0).length()-1);
+ QString realtype=tool->Version.section(' ',0,0).lower();
+
+ if ( tool->Version.contains("Openswan"))
+ {
+ requiredBy=i18n("Openswan");
+ }
+ else if ( tool->Version.contains("strongSwan"))
+ {
+ requiredBy=i18n("strongSwan");
+ }
+ else
+ {
+ requiredBy=i18n("FreeS/WAN");
+ }
+
+ }
+
+// std::cout << "Tool: " << tool->Name.ascii() << " Path: "<< tool->PathToExec.ascii() << " Version: " << tool->Version.ascii() << " Found: " << state.ascii() << std::endl;
+
+ else if (tool->Name == "racoon")
+ {
+ requiredBy=i18n("ipsec-tools (racoon)");
+ }
+ else if (tool->Name == "openvpn")
+ {
+ requiredBy=i18n("OpenVPN");
+ }
+ else if (tool->Name == "pppd")
+ {
+ requiredBy=i18n("PPTP");
+ }
+ else if (tool->Name == "pptp")
+ {
+ requiredBy=i18n("PPTP");
+ }
+ else if (tool->Name == "vtund")
+ {
+ requiredBy=i18n("VTun");
+ }
+ else if (tool->Name == "ping")
+ {
+ requiredBy=i18n("KVpnc");
+ }
+ else if (tool->Name == "pkcs11-tool")
+ {
+ requiredBy=i18n("Smartcard support");
+ }
+
+ else if (tool->Name == "cisco_cert_mgr")
+ {
+ requiredBy=i18n("Cisco (propritary)");
+ }
+
+ else if (tool->Name == "kill")
+ {
+ requiredBy=i18n("KVpnc");
+ }
+ else if (tool->Name == "ip")
+ {
+ requiredBy=i18n("KVpnc");
+ }
+ else if (tool->Name == "ifconfig")
+ {
+ requiredBy=i18n("KVpnc");
+ }
+ else if (tool->Name == "route")
+ {
+ requiredBy=i18n("KVpnc");
+ }
+ else if (tool->Name == "bash")
+ {
+ requiredBy=i18n("KVpnc");
+ }
+ else if (tool->Name == "iptables")
+ {
+ requiredBy=i18n("KVpnc");
+ }
+ else if (tool->Name == "killall")
+ {
+ requiredBy=i18n("KVpnc");
+ }
+ else if (tool->Name == "openssl")
+ {
+ requiredBy=i18n("Certificate support");
+ }
+ else if (tool->Name == "setkey")
+ {
+ requiredBy=i18n("ipsec-tools (racoon)");
+ }
+ else if (tool->Name == "vpnclient")
+ {
+ requiredBy=i18n("Cisco (propritary)");
+ }
+ else if (tool->Name == "l2tpd")
+ {
+ requiredBy=i18n("L2TP");
+ }
+ else if (tool->Name == "xl2tpd")
+ {
+ requiredBy=i18n("L2TP");
+ }
+ else if (tool->Name == "openl2tpd")
+ {
+ requiredBy=i18n("L2TP");
+ }
+ else if (tool->Name == "tail")
+ {
+ requiredBy=i18n("ipsec (Openswan, strongSwan, racoon)");
+ }
+ else if (tool->Name == "ssh")
+ {
+ requiredBy=i18n("SSH VPN");
+ }
+ else if (tool->Name == "ksshaskpass")
+ {
+ requiredBy=i18n("SSH VPN");
+ }
+ else if (tool->Name == "gnome-ssh-askpass")
+ {
+ requiredBy=i18n("SSH VPN");
+ }
+ else if (tool->Name == "netstat")
+ {
+ requiredBy = i18n("ipsec (Openswan, strongSwan, racoon)");
+ }
+ else
+ {
+ // other tools
+ }
+
+
+
+ QListViewItem *item = new QListViewItem(main->InfoListView, tool->Name,state, tool->Version, usability,requiredBy , tool->PathToExec, comment);
+ if (tool->found)
+ item->setPixmap(1,ok_icon);
+ else
+ item->setPixmap(1,wrong_icon);
+ main->InfoListView->insertItem(item);
+
+ }
+
+ QToolTip::remove( main->InfoListView );
+ new ListViewToolTip( main->InfoListView );
+
+ this->resize(800,600);
+ main->InfoListView->resize(main->InfoListView->sizeHint());
+ main->resize(main->sizeHint());
+ //this->resize(sizeHint());
+
+ GlobalConfig->appPointer->restoreOverrideCursor();
+}
+