You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
kvpnc/src/toolsinfodialog.cpp

528 lines
15 KiB

/***************************************************************************
* 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 <tqlistviewitem.h>
#include <tqpixmap.h>
#include <kglobal.h>
#include <tqstring.h>
#include <kiconloader.h>
#include <iostream>
#include <klocale.h>
#include <tqcursor.h>
#include "utils.h"
//END INCLUDES
ToolsInfoDialog::ToolsInfoDialog(KVpncConfig *GlobalConfig, TQWidget *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->tqsizeHint());
TQPixmap ok_icon = KGlobal::iconLoader()->loadIcon( "button_ok", KIcon::NoGroup, 16 );
TQPixmap wrong_icon = KGlobal::iconLoader()->loadIcon( "button_cancel", KIcon::NoGroup, 16 );
ToolInfo *tool=0;
main->InfoListView->setSorting(1);
GlobalConfig->appPointer->setOverrideCursor( TQCursor(TQt::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;
TQString state="";
TQString usability="";
TQString requiredBy="";
TQString comment="";
tool->programsInPath = GlobalConfig->programsInPath;
// tool->collectToolInfo();
if (!tool->PathToExec.isEmpty() && TQFile (tool->PathToExec).exists() && TQFileInfo(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"
TQString 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();
TQString realtype=tool->Version.section(' ',0,0).lower();
if ( tool->Version.contains("Openswan"))
{
comment="Openswan";
comment+=", "+i18n("kernel %1 support").tqarg("2.6");
comment+=", "+i18n("smartcard support");
}
else if ( tool->Version.contains("strongSwan"))
{
comment="strongSwan";
comment+=", "+i18n("no aggressive mode");
comment+=", "+i18n("kernel %1 support").tqarg("2.4");
if (!(majorversion <= 2 && minorversion <= 8 && subminorversion <= 1))
comment+=", "+i18n("kernel %1 support").tqarg("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").tqarg("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: " << TQString().setNum(major).ascii() << " minor: " << TQString().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")
{
TQString realversion=tool->Version.section(' ',1,1).section('/',0,0).right(tool->Version.section(' ',1,1).section('/',0,0).length()-1);
TQString 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
}
TQListViewItem *item = new TQListViewItem(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);
}
TQToolTip::remove( main->InfoListView );
new ListViewToolTip( main->InfoListView );
this->resize(800,600);
main->InfoListView->resize(main->InfoListView->tqsizeHint());
main->resize(main->tqsizeHint());
//this->resize(tqsizeHint());
GlobalConfig->appPointer->restoreOverrideCursor();
}