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.
1365 lines
50 KiB
1365 lines
50 KiB
/***************************************************************************
|
|
* Copyright (C) 2004 by Christoph Thielecke *
|
|
* crissi99@gmx.de *
|
|
* *
|
|
* @description This class imports a certificate *
|
|
* *
|
|
* @author 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 "importcertificatedialog.h"
|
|
#include <tdemessagebox.h>
|
|
#include <tdelocale.h>
|
|
#include <kurlrequester.h>
|
|
#include <kpassdlg.h>
|
|
#include <kcombobox.h>
|
|
#include <kdebug.h>
|
|
#include <klineedit.h>
|
|
#include <iostream>
|
|
#include <tqfile.h>
|
|
#include <tqdir.h>
|
|
#include <tqtextstream.h>
|
|
#include <tqcursor.h>
|
|
#include <tqcheckbox.h>
|
|
#include <tqurl.h>
|
|
#include <iostream>
|
|
#include "kvpncconfig.h"
|
|
#include "utils.h"
|
|
//END includes
|
|
|
|
ImportCertificateDialog::ImportCertificateDialog ( TQWidget *parent, const char* caption, KVpncConfig *GlobalConfig )
|
|
: KDialogBase ( parent, i18n ( "Import Certificate" ).ascii(), true, caption,
|
|
KDialogBase::Ok|KDialogBase::Cancel, KDialogBase::Ok, true )
|
|
{
|
|
main = new ImportCertificateDialogBase ( this );
|
|
setMainWidget ( main );
|
|
main->setMinimumSize ( main->sizeHint() );
|
|
|
|
this->GlobalConfig = GlobalConfig;
|
|
filename = "";
|
|
certHash = "";
|
|
CertFullPath="";
|
|
CaCertFullPath="";
|
|
importOk = false;
|
|
importSuccess = true;
|
|
doHash = false;
|
|
doExit=true;
|
|
error_found=false;
|
|
certName = "";
|
|
certpath = "/etc/racoon/certs/";
|
|
pathToOpenSSL = GlobalConfig->pathToOpenssl;
|
|
main->RacoonCertificatePathUrlrequester->setMode ( 2 ); // directory
|
|
main->FilenameUrlrequester->setFilter ( "*" );
|
|
askpasscount=0;
|
|
|
|
env = new TQStringList();
|
|
*env << "LC_ALL=C" << "LANG=C" << "PATH=/bin:/usr/bin:/usr/sbin:/sbin";
|
|
|
|
connect ( main->ImporttypeComboBox, TQ_SIGNAL ( activated ( int ) ), this, TQ_SLOT ( typeToggeled ( int ) ) );
|
|
typeToggeled ( main->ImporttypeComboBox->currentItem() );
|
|
|
|
connect (main->UsePrivateKeyPasswordCheckBox, TQ_SIGNAL( toggled(bool)), this, TQ_SLOT(usePrivateKeyPassToggled(bool)));
|
|
usePrivateKeyPassToggled(main->UsePrivateKeyPasswordCheckBox->isChecked());
|
|
|
|
// TMP
|
|
/*
|
|
main->FilenameUrlrequester->setURL( "/home/crissi/thielecke.p12" );
|
|
//main->RacoonCertificatePathUrlrequester->setURL( "/etc/racoon/certs/" );
|
|
main->ImporttypeComboBox->setCurrentItem( 1 );
|
|
main->PrivateKeyPasswordEdit->setText( "12345678" );
|
|
main->PrivateKeyAgainPasswordEdit->setText( "12345678" );
|
|
*/
|
|
//main->ImportPasswordEdit->setText( "blah99" );
|
|
|
|
|
|
}
|
|
|
|
ImportCertificateDialog::~ImportCertificateDialog()
|
|
{
|
|
delete main;
|
|
}
|
|
|
|
void ImportCertificateDialog::accept()
|
|
{
|
|
|
|
importOk = true;
|
|
done=false;
|
|
error_found=false;
|
|
|
|
filename = main->FilenameUrlrequester->url();
|
|
importpassword = main->ImportPasswordEdit->text();
|
|
certpath = main->RacoonCertificatePathUrlrequester->url();
|
|
|
|
if ( filename.isEmpty() )
|
|
{
|
|
KMessageBox::sorry ( 0, i18n ( "File name cannot be empty!" ), i18n ( "Empty File Name" ) );
|
|
importOk = false;
|
|
importSuccess=false;
|
|
GlobalConfig->appPointer->restoreOverrideCursor();
|
|
return;
|
|
}
|
|
|
|
// if ( filename.right( 3 ) != "p12" || filename.right (3) != "der" || filename.right (3) != "crt" ) {
|
|
// KMessageBox::sorry( 0, i18n( "File name isnt ended by \'p12\', 'der' or \'crt\'!" ), i18n( "Wrong File Name" ) );
|
|
// importOk = false;
|
|
// return;
|
|
// }
|
|
|
|
GlobalConfig->appPointer->setOverrideCursor ( TQCursor ( TQt::WaitCursor ) );
|
|
|
|
TQFile f ( filename );
|
|
if ( f.exists() )
|
|
{
|
|
if ( f.open ( IO_ReadOnly ) )
|
|
{
|
|
f.close();
|
|
}
|
|
else
|
|
{
|
|
KMessageBox::sorry ( 0, i18n ( "File does not exist!" ), i18n ( "No File" ) );
|
|
GlobalConfig->appendLogEntry ( i18n ( "Certificate import: file \"%1\" does not exist." ).arg ( filename ),GlobalConfig->error );
|
|
|
|
importOk = false;
|
|
GlobalConfig->appPointer->restoreOverrideCursor();
|
|
return;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
KMessageBox::sorry ( 0, i18n ( "File not readable!" ), i18n ( "Insufficient Rights" ) );
|
|
|
|
GlobalConfig->appendLogEntry ( i18n ( "Certificate import: file \"%1\" is not readable." ).arg ( filename ),GlobalConfig->error );
|
|
importOk = false;
|
|
GlobalConfig->appPointer->restoreOverrideCursor();
|
|
return;
|
|
}
|
|
|
|
if ( main->ImporttypeComboBox->currentItem() == pkcs12_freeswan )
|
|
{
|
|
certpath="/etc/ipsec.d";
|
|
if ( !TQDir ( certpath ).exists() )
|
|
{
|
|
if ( !TQDir().mkdir ( certpath ) )
|
|
{
|
|
KMessageBox::error ( this, i18n ( "\"%1\" could not be created!" ).arg ( "/etc/ipsec.d" ) );
|
|
GlobalConfig->appendLogEntry ( i18n ( "Certificate import: directory \"%1\" does not exist and could not be created." ).arg ( "/etc/ipsec.d" ),GlobalConfig->error );
|
|
}
|
|
else
|
|
{
|
|
if ( GlobalConfig->KvpncDebugLevel > 0 )
|
|
GlobalConfig->appendLogEntry ( i18n ( "Certificate import: directory \"%1\" does not exist but was successful created." ).arg ( "/etc/ipsec.d" ),GlobalConfig->debug );
|
|
if ( !TQDir ( "/etc/ipsec.d/certs" ).exists() )
|
|
{
|
|
if ( !TQDir().mkdir ( "/etc/ipsec.d/certs" ) )
|
|
{
|
|
KMessageBox::error ( this, i18n ( "\"%1\" could not be created!" ).arg ( "/etc/ipsec.d/certs" ) );
|
|
GlobalConfig->appendLogEntry ( i18n ( "Certificate import: directory \"%1\" does not exist and could not be created." ).arg ( "/etc/ipsec.d/certs" ),GlobalConfig->error );
|
|
GlobalConfig->appPointer->restoreOverrideCursor();
|
|
return;
|
|
}
|
|
else
|
|
{
|
|
GlobalConfig->appendLogEntry ( i18n ( "Certificate import: directory \"%1\" does not exist but was successful created." ).arg ( "/etc/ipsec.d/certs" ),GlobalConfig->debug );
|
|
if ( !TQDir ( "/etc/ipsec.d/cacerts" ).exists() )
|
|
if ( !TQDir().mkdir ( "/etc/ipsec.d/cacerts" ) )
|
|
{
|
|
KMessageBox::error ( this, i18n ( "\"%1\" could not be created!" ).arg ( "/etc/ipsec.d/cacerts" ) );
|
|
GlobalConfig->appendLogEntry ( i18n ( "Certificate import: directory \"%1\" does not exist and could not be created." ).arg ( "/etc/ipsec.d/cacerts" ),GlobalConfig->error );
|
|
GlobalConfig->appPointer->restoreOverrideCursor();
|
|
return;
|
|
}
|
|
else
|
|
{
|
|
if ( GlobalConfig->KvpncDebugLevel > 0 )
|
|
GlobalConfig->appendLogEntry ( i18n ( "Certificate import: directory \"%1\" does not exist but was successful created." ).arg ( "/etc/ipsec.d/cacerts" ),GlobalConfig->debug );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else if ( main->ImporttypeComboBox->currentItem() == pkcs12_racoon || main->ImporttypeComboBox->currentItem() == ca_der )
|
|
{
|
|
certpath="/etc/racoon/certs";
|
|
if ( !TQDir ( certpath ).exists() )
|
|
if ( !TQDir().mkdir ( certpath ) )
|
|
{
|
|
KMessageBox::error ( this, i18n ( "\"%1\" could not be created!" ).arg ( certpath ) );
|
|
GlobalConfig->appendLogEntry ( i18n ( "Certificate import: directory \"%1\" does not exist." ).arg ( certpath ),GlobalConfig->error );
|
|
GlobalConfig->appPointer->restoreOverrideCursor();
|
|
return;
|
|
}
|
|
else
|
|
{
|
|
if ( GlobalConfig->KvpncDebugLevel > 3 )
|
|
GlobalConfig->appendLogEntry ( i18n ( "Certificate import: directory \"%1\" does not exist but was successful created." ).arg ( certpath ),GlobalConfig->debug );
|
|
}
|
|
}
|
|
else if ( main->ImporttypeComboBox->currentItem() == pkcs12_openvpn )
|
|
{
|
|
certpath = main->RacoonCertificatePathUrlrequester->url();
|
|
if ( !TQDir ( certpath ).exists() )
|
|
if ( !TQDir().mkdir ( certpath ) )
|
|
{
|
|
KMessageBox::error ( this, i18n ( "\"%1\" could not be created!" ).arg ( certpath ) );
|
|
GlobalConfig->appendLogEntry ( i18n ( "Certificate import: directory \"%1\" does not exist." ).arg ( certpath ),GlobalConfig->error );
|
|
GlobalConfig->appPointer->restoreOverrideCursor();
|
|
return;
|
|
}
|
|
else
|
|
{
|
|
if ( GlobalConfig->KvpncDebugLevel > 3 )
|
|
GlobalConfig->appendLogEntry ( i18n ( "Certificate import: directory \"%1\" does not exist but was successful created." ).arg ( certpath ),GlobalConfig->debug );
|
|
}
|
|
}
|
|
|
|
// if ( (main->ImporttypeComboBox->currentItem() == pkcs12_freeswan ||
|
|
// main->ImporttypeComboBox->currentItem() == pkcs12_racoon ||
|
|
// main->ImporttypeComboBox->currentItem() == pkcs12_racoon
|
|
// ) &&
|
|
// importpassword.isEmpty() )
|
|
// {
|
|
// importOk = false;
|
|
// KMessageBox::sorry( 0, i18n( "Password can't be empty!" ), i18n( "Empty Password" ) );
|
|
// return;
|
|
// }
|
|
|
|
if ( main->ImporttypeComboBox->currentItem() == pkcs12_freeswan || main->ImporttypeComboBox->currentItem() == pkcs12_openvpn )
|
|
{
|
|
|
|
if ( main->UsePrivateKeyPasswordCheckBox->isChecked() && (main->PrivateKeyPasswordEdit->text().isEmpty() || main->PrivateKeyPasswordEdit->text().length() < 4) )
|
|
{
|
|
importOk = false;
|
|
KMessageBox::sorry ( 0, i18n ( "Private key password field can not be empty or less than 4 characters!" ), i18n ( "Password Empty or Too Short" ) );
|
|
GlobalConfig->appPointer->restoreOverrideCursor();
|
|
return;
|
|
}
|
|
|
|
if ( main->UsePrivateKeyPasswordCheckBox->isChecked() && (main->PrivateKeyAgainPasswordEdit->text().isEmpty() || main->PrivateKeyAgainPasswordEdit->text().length() < 4 ))
|
|
{
|
|
importOk = false;
|
|
KMessageBox::sorry ( 0, i18n ( "Private key password (again) field can not be empty!" ), i18n ( "Password Empty or Too Short" ) );
|
|
GlobalConfig->appPointer->restoreOverrideCursor();
|
|
return;
|
|
}
|
|
if ( importOk )
|
|
{
|
|
if ( main->PrivateKeyPasswordEdit->password() != main->PrivateKeyAgainPasswordEdit->password() )
|
|
{
|
|
importOk = false;
|
|
KMessageBox::sorry ( 0, i18n ( "Private key passwords does not match!" ), i18n ( "Passwords Do Not Match" ) );
|
|
GlobalConfig->appPointer->restoreOverrideCursor();
|
|
return;
|
|
}
|
|
else
|
|
{
|
|
privatekeypassword = main->PrivateKeyAgainPasswordEdit->password();
|
|
}
|
|
}
|
|
}
|
|
if ( main->ImporttypeComboBox->currentItem() == cisco || main->ImporttypeComboBox->currentItem() == ciscoca || main->ImporttypeComboBox->currentItem() == ciscouserca )
|
|
{
|
|
if (main->UsePrivateKeyPasswordCheckBox->isChecked() && ( main->PrivateKeyPasswordEdit->text().isEmpty() || main->PrivateKeyPasswordEdit->text().length() < 4 ))
|
|
{
|
|
importOk = false;
|
|
KMessageBox::sorry ( 0, i18n ( "Certificate password field can not be empty or less than 4 characters!" ), i18n ( "Password Empty or Too Short" ) );
|
|
GlobalConfig->appPointer->restoreOverrideCursor();
|
|
return;
|
|
}
|
|
|
|
if (main->UsePrivateKeyPasswordCheckBox->isChecked() && ( main->PrivateKeyAgainPasswordEdit->text().isEmpty() || main->PrivateKeyAgainPasswordEdit->text().length() < 4 ))
|
|
{
|
|
importOk = false;
|
|
KMessageBox::sorry ( 0, i18n ( "Certificate password (again) field can not be empty!" ), i18n ( "Password Empty or Too Short" ) );
|
|
GlobalConfig->appPointer->restoreOverrideCursor();
|
|
return;
|
|
}
|
|
if ( importOk )
|
|
{
|
|
if ( main->UsePrivateKeyPasswordCheckBox->isChecked() && (main->PrivateKeyPasswordEdit->password() != main->PrivateKeyAgainPasswordEdit->password() ))
|
|
{
|
|
importOk = false;
|
|
KMessageBox::sorry ( 0, i18n ( "Certificate passwords does not match!" ), i18n ( "Passwords Do Not Match" ) );
|
|
GlobalConfig->appPointer->restoreOverrideCursor();
|
|
return;
|
|
}
|
|
else
|
|
{
|
|
if (main->UsePrivateKeyPasswordCheckBox->isChecked() )
|
|
privatekeypassword = main->PrivateKeyAgainPasswordEdit->password();
|
|
}
|
|
}
|
|
}
|
|
if ( GlobalConfig->KvpncDebugLevel > 3 )
|
|
kdDebug() << "file: " << filename << ", type: " << main->ImporttypeComboBox->currentItem() << endl;
|
|
|
|
bool found=true;
|
|
if ( main->ImporttypeComboBox->currentItem() == pkcs12_freeswan || main->ImporttypeComboBox->currentItem() == pkcs12_openvpn || main->ImporttypeComboBox->currentItem() == pkcs12_racoon || main->ImporttypeComboBox->currentItem() == ca_der )
|
|
{
|
|
// looking for openssl
|
|
|
|
TQString bin="openssl";
|
|
ToolInfo *tool = Utils ( GlobalConfig ).getToolInfo ( "openssl" );
|
|
//std::cout << "Tool (bin): " << bin << std::endl;
|
|
|
|
if ( tool->PathToExec.section ( '/',-1 ) != bin )
|
|
{
|
|
// program is NOT installed
|
|
KMessageBox::error ( this, i18n ( "The required tool (%1) is not installed, please install it first and restart kvpnc." ).arg ( bin ), i18n ( "Tool missing" ) );
|
|
found=false;
|
|
GlobalConfig->appPointer->restoreOverrideCursor();
|
|
return;
|
|
}
|
|
|
|
if ( !found )
|
|
{
|
|
KMessageBox::error ( this, i18n ( "Unable to find \"%1\"!" ).arg ( "openssl" ) );
|
|
GlobalConfig->appendLogEntry ( i18n ( "Unable to find \"%1\"!" ).arg ( "openssl" ) ,GlobalConfig->error );
|
|
importOk = false;
|
|
GlobalConfig->appPointer->restoreOverrideCursor();
|
|
return;
|
|
}
|
|
|
|
|
|
TQString file = Utils ( this->GlobalConfig ).removeSpecialCharsForFilename ( TQUrl ( filename ).fileName() );
|
|
certName = file.left ( file.length() - 4 ); // peter_pan.p12 -> peter_pan
|
|
|
|
if ( main->ImporttypeComboBox->currentItem() == pkcs12_racoon || main->ImporttypeComboBox->currentItem() == pkcs12_openvpn )
|
|
{
|
|
TQString type="";
|
|
if ( main->ImporttypeComboBox->currentItem() == pkcs12_racoon )
|
|
type="racoon";
|
|
else
|
|
type="OpenVPN";
|
|
TQFile certpathtest ( certpath + "/." );
|
|
|
|
if ( !certpathtest.exists() )
|
|
{
|
|
KMessageBox::error ( this, i18n ( "%1 certificate path (%2) does not exist!" ).arg ( type ).arg ( certpath ) );
|
|
GlobalConfig->appendLogEntry ( i18n ( "%1 certificate path (%2) does not exist!" ).arg ( type ).arg ( certpath ) ,GlobalConfig->error );
|
|
importOk=false;
|
|
GlobalConfig->appPointer->restoreOverrideCursor();
|
|
return;
|
|
}
|
|
else
|
|
{
|
|
TQFile testfile ( TQString ( certpath + "/test" ) );
|
|
if ( !testfile.open ( IO_WriteOnly ) )
|
|
{
|
|
KMessageBox::error ( this, i18n ( "%1 certificate path (%2) is not writeable!" ).arg ( type ).arg ( certpath ) );
|
|
GlobalConfig->appendLogEntry ( i18n ( "%1 certificate path (%2) is not writeable!" ).arg ( type ).arg ( certpath ) ,GlobalConfig->error );
|
|
importOk = false;
|
|
GlobalConfig->appPointer->restoreOverrideCursor();
|
|
return;
|
|
}
|
|
else
|
|
{
|
|
testfile.remove();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// here we go
|
|
if ( importOk )
|
|
{
|
|
|
|
/*
|
|
FreeSWAN/Racoon:
|
|
openssl pkcs12 -in cert.p12 -clcerts -out /etc/racoon/certs/mykeys_company.pem -nodes
|
|
|
|
DER:
|
|
openssl x509 -in cert.crt -out ca_company.pem -inform DER
|
|
|
|
*/
|
|
// std::cout << "[std]:" << "settings ok." << std::endl;
|
|
|
|
ImportProcess = new TQProcess ( this );
|
|
|
|
|
|
if ( main->ImporttypeComboBox->currentItem() == pkcs12_freeswan || main->ImporttypeComboBox->currentItem() == pkcs12_openvpn || main->ImporttypeComboBox->currentItem() == pkcs12_racoon || main->ImporttypeComboBox->currentItem() == ca_der )
|
|
{
|
|
ImportProcess->addArgument ( pathToOpenSSL );
|
|
}
|
|
if ( main->ImporttypeComboBox->currentItem() == cisco || main->ImporttypeComboBox->currentItem() == ciscoca || main->ImporttypeComboBox->currentItem() == ciscouserca )
|
|
{
|
|
ImportProcess->addArgument ( GlobalConfig->pathToCiscoCertMgr );
|
|
}
|
|
|
|
if ( main->ImporttypeComboBox->currentItem() == pkcs12_freeswan ||
|
|
main->ImporttypeComboBox->currentItem() == pkcs12_racoon ||
|
|
main->ImporttypeComboBox->currentItem() == pkcs12_openvpn
|
|
)
|
|
{
|
|
ImportProcess->addArgument ( "pkcs12" );
|
|
ImportProcess->addArgument ( "-in" );
|
|
ImportProcess->addArgument ( filename );
|
|
ImportProcess->addArgument ( "-nodes" );
|
|
ImportProcess->addArgument ( "-clcerts" );
|
|
ImportProcess->addArgument ( "-out" );
|
|
}
|
|
else if ( main->ImporttypeComboBox->currentItem() == ca_der )
|
|
{
|
|
|
|
ImportProcess->addArgument ( "x509" );
|
|
ImportProcess->addArgument ( "-in" );
|
|
ImportProcess->addArgument ( filename );
|
|
ImportProcess->addArgument ( "-out" );
|
|
ImportProcess->addArgument ( certpath + "/ca_" + certName + ".pem" );
|
|
ImportProcess->addArgument ( "-inform" );
|
|
ImportProcess->addArgument ( "DER" );
|
|
}
|
|
if ( main->ImporttypeComboBox->currentItem() == pkcs12_freeswan )
|
|
{
|
|
ImportProcess->addArgument ( "/etc/ipsec.d/certs/mykeys_" + certName + ".pem" ); // warning: static
|
|
}
|
|
else if ( main->ImporttypeComboBox->currentItem() == pkcs12_racoon || main->ImporttypeComboBox->currentItem() == pkcs12_openvpn )
|
|
{
|
|
ImportProcess->addArgument ( certpath + "/mykeys_" + certName + ".pem" );
|
|
}
|
|
else if ( main->ImporttypeComboBox->currentItem() == cisco || main->ImporttypeComboBox->currentItem() == ciscoca || main->ImporttypeComboBox->currentItem() == ciscouserca )
|
|
{
|
|
if (main->ImporttypeComboBox->currentItem() == cisco)
|
|
ImportProcess->addArgument ( "-U" );
|
|
if (main->ImporttypeComboBox->currentItem() == ciscoca)
|
|
ImportProcess->addArgument ( "-R" );
|
|
if (main->ImporttypeComboBox->currentItem() == ciscouserca)
|
|
{
|
|
ImportProcess->addArgument ( "-U" );
|
|
ImportProcess->addArgument ( "-R" );
|
|
}
|
|
ImportProcess->addArgument ( "-op" );
|
|
ImportProcess->addArgument ( "import" );
|
|
ImportProcess->addArgument ( "-f" );
|
|
ImportProcess->addArgument ( filename );
|
|
|
|
}
|
|
|
|
|
|
connect ( ImportProcess, TQ_SIGNAL ( readyReadStdout() ), this, TQ_SLOT ( readFromStdout_import() ) );
|
|
connect ( ImportProcess, TQ_SIGNAL ( readyReadStderr() ), this, TQ_SLOT ( readFromStderr_import() ) );
|
|
if ( main->ImporttypeComboBox->currentItem() == pkcs12_freeswan ||
|
|
main->ImporttypeComboBox->currentItem() == pkcs12_racoon ||
|
|
main->ImporttypeComboBox->currentItem() == pkcs12_openvpn
|
|
)
|
|
{
|
|
connect ( ImportProcess, TQ_SIGNAL ( processExited () ), this, TQ_SLOT ( doCacert() ) );
|
|
}
|
|
if ( main->ImporttypeComboBox->currentItem() == ca_der )
|
|
{
|
|
connect ( ImportProcess, TQ_SIGNAL ( processExited () ), this, TQ_SLOT ( doCreateHash() ) );
|
|
}
|
|
|
|
if ( main->ImporttypeComboBox->currentItem() == cisco || main->ImporttypeComboBox->currentItem() == ciscoca)
|
|
{
|
|
connect ( ImportProcess, TQ_SIGNAL ( processExited () ), this, TQ_SLOT ( ciscoCertMgrExited() ) );
|
|
}
|
|
|
|
if ( !ImportProcess->start ( env ) )
|
|
{
|
|
if ( main->ImporttypeComboBox->currentItem() == pkcs12_freeswan || main->ImporttypeComboBox->currentItem() == pkcs12_openvpn || main->ImporttypeComboBox->currentItem() == pkcs12_racoon || main->ImporttypeComboBox->currentItem() == ca_der )
|
|
KMessageBox::sorry ( this, i18n ( "Unable to start process (%1)!" ).arg ( "openssl" ) );
|
|
if ( main->ImporttypeComboBox->currentItem() == cisco )
|
|
KMessageBox::sorry ( this, i18n ( "Unable to start process (%1)!" ).arg ( "cisco_cert_mgr" ) );
|
|
GlobalConfig->appPointer->restoreOverrideCursor();
|
|
return;
|
|
}
|
|
else
|
|
{
|
|
doExit=true;
|
|
|
|
TQString processname = "";
|
|
|
|
if ( main->ImporttypeComboBox->currentItem() == pkcs12_freeswan || main->ImporttypeComboBox->currentItem() == pkcs12_openvpn || main->ImporttypeComboBox->currentItem() == pkcs12_racoon || main->ImporttypeComboBox->currentItem() == ca_der )
|
|
{
|
|
processname="openssl";
|
|
|
|
if ( GlobalConfig->KvpncDebugLevel >3 )
|
|
GlobalConfig->appendLogEntry ( i18n ( "Certificate import: %1: send %2" ).arg("accept()").arg ( i18n ( " import password" ) ),GlobalConfig->debug );
|
|
|
|
if ( main->ImportPasswordEdit->text().isEmpty() )
|
|
ImportProcess->writeToStdin ( "\n" );
|
|
else
|
|
ImportProcess->writeToStdin ( main->ImportPasswordEdit->text() + "\n" );
|
|
|
|
}
|
|
if ( main->ImporttypeComboBox->currentItem() == cisco )
|
|
processname="cisco_cert_mgr";
|
|
|
|
if ( GlobalConfig->KvpncDebugLevel > 3 )
|
|
GlobalConfig->appendLogEntry ( i18n ( "Process (%1) started." ).arg (processname ),GlobalConfig->debug );
|
|
|
|
if ( main->ImporttypeComboBox->currentItem() == cisco /*|| main->ImporttypeComboBox->currentItem() == ciscoca*/ )
|
|
{
|
|
ImportProcess->writeToStdin ( main->ImportPasswordEdit->text() +"\n");
|
|
if (main->UsePrivateKeyPasswordCheckBox->isChecked() )
|
|
{
|
|
ImportProcess->writeToStdin ( main->PrivateKeyPasswordEdit->password() + "\n" );
|
|
ImportProcess->writeToStdin ( main->PrivateKeyPasswordEdit->password() + "\n" );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
void ImportCertificateDialog::canAccept()
|
|
{
|
|
if ( importSuccess )
|
|
{
|
|
KMessageBox::information ( 0, i18n ( "Certificate was sucessfully imported." ), i18n ( "Import Successful" ) );
|
|
if ( GlobalConfig->KvpncDebugLevel > 0 )
|
|
GlobalConfig->appendLogEntry ( i18n ( "Certificate import: certificate was successfully imported." ),GlobalConfig->debug );
|
|
}
|
|
else
|
|
{
|
|
KMessageBox::sorry ( 0, i18n ( "Certificate import failed." ), i18n ( "Import Failed" ) );
|
|
GlobalConfig->appendLogEntry ( i18n ( "Certificate import: certificate could not be imported." ),GlobalConfig->error );
|
|
GlobalConfig->appPointer->restoreOverrideCursor();
|
|
return;
|
|
}
|
|
|
|
if ( main->ImporttypeComboBox->currentItem() == pkcs12_freeswan )
|
|
{
|
|
TQString bin="ipsec";
|
|
ToolInfo *tool;
|
|
//std::cout << "Tool (bin): " << bin << std::endl;
|
|
if ( !GlobalConfig->ToolList->isEmpty() )
|
|
{
|
|
for ( tool = GlobalConfig->ToolList->first(); tool; tool = GlobalConfig->ToolList->next() )
|
|
{
|
|
if ( bin == tool->Name )
|
|
{
|
|
if ( tool->PathToExec.section ( '/',-1 ) != bin )
|
|
{
|
|
// program is NOT installed
|
|
KMessageBox::information ( this, i18n ( "The required tool (%1) is not installed, please install it before you are connecting and restart kvpnc." ).arg ( bin ), i18n ( "Tool Missing" ) );
|
|
GlobalConfig->appPointer->restoreOverrideCursor();
|
|
return;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else if ( main->ImporttypeComboBox->currentItem() == pkcs12_racoon )
|
|
{
|
|
TQString bin="racoon";
|
|
ToolInfo *tool;
|
|
//std::cout << "Tool (bin): " << bin << std::endl;
|
|
if ( !GlobalConfig->ToolList->isEmpty() )
|
|
{
|
|
for ( tool = GlobalConfig->ToolList->first(); tool; tool = GlobalConfig->ToolList->next() )
|
|
{
|
|
if ( bin == tool->Name )
|
|
{
|
|
if ( tool->PathToExec.section ( '/',-1 ) != bin )
|
|
{
|
|
// program is NOT installed
|
|
KMessageBox::information ( this, i18n ( "The required tool (%1) is not installed, please install it before you are connecting and restart kvpnc." ).arg ( bin ), i18n ( "Tool Missing" ) );
|
|
GlobalConfig->appPointer->restoreOverrideCursor();
|
|
return;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else if ( main->ImporttypeComboBox->currentItem() == pkcs12_openvpn )
|
|
{
|
|
TQString bin="openvpn";
|
|
ToolInfo *tool;
|
|
//std::cout << "Tool (bin): " << bin << std::endl;
|
|
if ( !GlobalConfig->ToolList->isEmpty() )
|
|
{
|
|
for ( tool = GlobalConfig->ToolList->first(); tool; tool = GlobalConfig->ToolList->next() )
|
|
{
|
|
if ( bin == tool->Name )
|
|
{
|
|
if ( tool->PathToExec.section ( '/',-1 ) != bin )
|
|
{
|
|
// program is NOT installed
|
|
KMessageBox::information ( this, i18n ( "The required tool (%1) is not installed, please install it before you are connecting and restart kvpnc." ).arg ( bin ), i18n ( "Tool Missing" ) );
|
|
GlobalConfig->appPointer->restoreOverrideCursor();
|
|
return;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else if ( main->ImporttypeComboBox->currentItem() == cisco || main->ImporttypeComboBox->currentItem() == ciscoca || main->ImporttypeComboBox->currentItem() == ciscouserca )
|
|
{
|
|
TQString bin="cisco_cert_mgr";
|
|
ToolInfo *tool;
|
|
//std::cout << "Tool (bin): " << bin << std::endl;
|
|
if ( !GlobalConfig->ToolList->isEmpty() )
|
|
{
|
|
for ( tool = GlobalConfig->ToolList->first(); tool; tool = GlobalConfig->ToolList->next() )
|
|
{
|
|
if ( bin == tool->Name )
|
|
{
|
|
if ( tool->PathToExec.section ( '/',-1 ) != bin )
|
|
{
|
|
// program is NOT installed
|
|
KMessageBox::information ( this, i18n ( "The required tool (%1) is not installed, please install it before you are connecting and restart kvpnc." ).arg ( bin ), i18n ( "Tool Missing" ) );
|
|
GlobalConfig->appPointer->restoreOverrideCursor();
|
|
return;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
GlobalConfig->appPointer->restoreOverrideCursor();
|
|
|
|
if ( doExit )
|
|
TQDialog::accept();
|
|
}
|
|
|
|
void ImportCertificateDialog::reject()
|
|
{
|
|
importOk=false;
|
|
importSuccess=false;
|
|
TQDialog::reject();
|
|
}
|
|
|
|
void ImportCertificateDialog::doCacert()
|
|
{
|
|
disconnect ( ImportProcess, TQ_SIGNAL ( processExited () ), this, TQ_SLOT ( doCacert() ) );
|
|
if ( GlobalConfig->KvpncDebugLevel > 3 )
|
|
GlobalConfig->appendLogEntry ( i18n ( "Certificate import: %1" ).arg("doCacert()"),GlobalConfig->debug );
|
|
|
|
if ( ImportProcess->normalExit () )
|
|
{
|
|
|
|
if ( main->ImporttypeComboBox->currentItem() == pkcs12_freeswan )
|
|
{
|
|
Utils ( GlobalConfig,this ).doChmod ( "/etc/ipsec.d/certs/mykeys_" + certName + ".pem","go-rwx" );
|
|
}
|
|
else if ( main->ImporttypeComboBox->currentItem() == pkcs12_racoon || main->ImporttypeComboBox->currentItem() == pkcs12_openvpn )
|
|
{
|
|
Utils ( GlobalConfig,this ).doChmod ( certpath + "/mykeys_" + certName + ".pem","go-rwx" );
|
|
}
|
|
|
|
/*
|
|
openssl pkcs12 -in cert.p12 -nokeys -cacerts -out /etc/racoon/certs/ca_company.pem -nodes
|
|
*/
|
|
ImportProcess->clearArguments();
|
|
ImportProcess->addArgument ( pathToOpenSSL );
|
|
ImportProcess->addArgument ( "pkcs12" );
|
|
ImportProcess->addArgument ( "-in" );
|
|
ImportProcess->addArgument ( filename );
|
|
ImportProcess->addArgument ( "-nokeys" );
|
|
ImportProcess->addArgument ( "-cacerts" );
|
|
ImportProcess->addArgument ( "-out" );
|
|
|
|
if ( main->ImporttypeComboBox->currentItem() == pkcs12_freeswan )
|
|
{
|
|
ImportProcess->addArgument ( "/etc/ipsec.d/cacerts/ca_" + certName + ".pem" ); // warning: static
|
|
CaCertFullPath="/etc/ipsec.d/cacerts/ca_" + certName + ".pem";
|
|
}
|
|
else
|
|
{
|
|
ImportProcess->addArgument ( certpath + "/ca_" + certName + ".pem" );
|
|
CaCertFullPath=certpath + "/ca_" + certName + ".pem";
|
|
}
|
|
|
|
ImportProcess->addArgument ( "-nodes" );
|
|
|
|
connect ( ImportProcess, TQ_SIGNAL ( processExited () ), this, TQ_SLOT ( doCreateHash() ) );
|
|
|
|
if ( ! ImportProcess->start ( env ) )
|
|
{
|
|
KMessageBox::error ( this, i18n ( "Unable to extract CA certificate!" ), i18n ( "Extract Failed" ) );
|
|
GlobalConfig->appendLogEntry ( i18n ( "Certificate import: CA certificate could not be extracted." ),GlobalConfig->error );
|
|
importSuccess=false;
|
|
GlobalConfig->appPointer->restoreOverrideCursor();
|
|
return;
|
|
}
|
|
else
|
|
{
|
|
|
|
if ( GlobalConfig->KvpncDebugLevel > 3 )
|
|
GlobalConfig->appendLogEntry ( i18n ( "Certificate import: %1: send %2" ).arg("doCacert()").arg ( i18n ( " import password" ) ),GlobalConfig->debug );
|
|
|
|
if ( main->ImportPasswordEdit->text().isEmpty() )
|
|
ImportProcess->writeToStdin ( "\n" );
|
|
else
|
|
ImportProcess->writeToStdin ( main->ImportPasswordEdit->text() + "\n" );
|
|
|
|
doExit=true;
|
|
if ( GlobalConfig->KvpncDebugLevel > 0 )
|
|
GlobalConfig->appendLogEntry ( i18n ( "Certificate import: CA certificate successful extracted." ),GlobalConfig->debug );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
importSuccess=false;
|
|
GlobalConfig->appendLogEntry ( i18n ( "Certificate import: import process from accept() failed." ),GlobalConfig->error );
|
|
}
|
|
}
|
|
|
|
void ImportCertificateDialog::doPrivateKey()
|
|
{
|
|
|
|
if ( GlobalConfig->KvpncDebugLevel > 3 )
|
|
GlobalConfig->appendLogEntry ( "[dbg]: doPrivateKey()",GlobalConfig->debug );
|
|
disconnect ( ImportProcess, TQ_SIGNAL ( processExited () ), this, TQ_SLOT ( doPrivateKey() ) );
|
|
|
|
if ( ImportProcess->normalExit () )
|
|
{
|
|
|
|
/*
|
|
openssl pkcs12 -in cert.p12 -nocerts -out /etc/racoon/certs/ca_company.pem
|
|
*/
|
|
ImportProcess->clearArguments();
|
|
ImportProcess->addArgument ( pathToOpenSSL );
|
|
ImportProcess->addArgument ( "pkcs12" );
|
|
ImportProcess->addArgument ( "-nocerts" );
|
|
ImportProcess->addArgument ( "-in" );
|
|
ImportProcess->addArgument ( filename );
|
|
ImportProcess->addArgument ( "-out" );
|
|
|
|
|
|
if ( main->ImporttypeComboBox->currentItem() == pkcs12_freeswan )
|
|
ImportProcess->addArgument ( certpath+"/private/" + certName + ".pem" ); // warning: static
|
|
else if ( main->ImporttypeComboBox->currentItem() == pkcs12_openvpn )
|
|
ImportProcess->addArgument ( certpath+"/" + certName + ".pem" ); // warning: static
|
|
|
|
if ( !certpath.isEmpty() )
|
|
if ( main->ImporttypeComboBox->currentItem() == pkcs12_freeswan )
|
|
CertFullPath=certpath+"/private/" + certName + ".pem";
|
|
if ( main->ImporttypeComboBox->currentItem() == pkcs12_openvpn )
|
|
CertFullPath=certpath+"/" + certName + ".pem";
|
|
|
|
if ( main->UsePrivateKeyPasswordCheckBox->isChecked() )
|
|
connect ( ImportProcess, TQ_SIGNAL ( processExited () ), this, TQ_SLOT ( exit() ) );
|
|
else
|
|
connect ( ImportProcess, TQ_SIGNAL ( processExited () ), this, TQ_SLOT ( removePrivateKey() ) );
|
|
|
|
//LogOutput->append( "priv key: we starting..." );
|
|
if ( !ImportProcess->start( ) )
|
|
{
|
|
KMessageBox::sorry ( this, i18n ( "Unable to start process (private key)!" ) );
|
|
|
|
GlobalConfig->appendLogEntry ( i18n ( "Certificate import: private key could not extracted." ),GlobalConfig->error );
|
|
importSuccess=false;
|
|
GlobalConfig->appPointer->restoreOverrideCursor();
|
|
return;
|
|
}
|
|
else
|
|
{
|
|
|
|
if ( GlobalConfig->KvpncDebugLevel > 3 )
|
|
GlobalConfig->appendLogEntry ( i18n ( "Certificate import: %1: send %2" ).arg("doPrivateKey()").arg ( i18n ( " import password" ) ),GlobalConfig->debug );
|
|
|
|
// if ( main->ImportPasswordEdit->text().isEmpty() )
|
|
// ImportProcess->writeToStdin ( "\n" );
|
|
// else
|
|
ImportProcess->writeToStdin ( main->ImportPasswordEdit->text() + "\n" );
|
|
|
|
|
|
if ( main->UsePrivateKeyPasswordCheckBox->isChecked() )
|
|
{
|
|
if ( GlobalConfig->KvpncDebugLevel > 3 )
|
|
GlobalConfig->appendLogEntry ( i18n ( "Certificate import: %1: send %2..." ).arg("doPrivateKey").arg ( i18n ( " private key password" ) ),GlobalConfig->debug );
|
|
|
|
ImportProcess->writeToStdin ( main->PrivateKeyPasswordEdit->text() + "\n" );
|
|
}
|
|
else
|
|
{
|
|
if ( GlobalConfig->KvpncDebugLevel > 3 )
|
|
GlobalConfig->appendLogEntry ( i18n ( "Certificate import: %1: send %2..." ).arg("doPrivateKey").arg ( i18n ( " private key password dummy" ) ),GlobalConfig->debug );
|
|
|
|
// we need 4 chars here
|
|
ImportProcess->writeToStdin ( "abcd\n" );
|
|
|
|
}
|
|
|
|
if ( main->UsePrivateKeyPasswordCheckBox->isChecked() )
|
|
{
|
|
if ( GlobalConfig->KvpncDebugLevel > 3 )
|
|
GlobalConfig->appendLogEntry ( i18n ( "Certificate import: %1: send %2..." ).arg("doPrivateKey").arg ( i18n ( " private key password" ) ),GlobalConfig->debug );
|
|
|
|
ImportProcess->writeToStdin ( main->PrivateKeyPasswordEdit->text() + "\n" );
|
|
}
|
|
else
|
|
{
|
|
if ( GlobalConfig->KvpncDebugLevel > 3 )
|
|
GlobalConfig->appendLogEntry ( i18n ( "Certificate import: %1: send %2..." ).arg("doPrivateKey").arg ( i18n ( " private key password dummy" ) ),GlobalConfig->debug );
|
|
|
|
// we need 4 chars here
|
|
ImportProcess->writeToStdin ( "abcd\n" );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
else
|
|
{
|
|
importSuccess=false;
|
|
GlobalConfig->appendLogEntry ( i18n ( "Certificate import: import process from doLink() failed." ),GlobalConfig->error );
|
|
GlobalConfig->appPointer->restoreOverrideCursor();
|
|
return;
|
|
}
|
|
}
|
|
|
|
void ImportCertificateDialog::doCreateHash()
|
|
{
|
|
|
|
disconnect ( ImportProcess, TQ_SIGNAL ( processExited () ), this, TQ_SLOT ( doCreateHash() ) );
|
|
|
|
if ( GlobalConfig->KvpncDebugLevel > 3 )
|
|
GlobalConfig->appendLogEntry ( i18n ( "Certificate import: %1" ).arg("doCreateHash()"),GlobalConfig->debug );
|
|
|
|
if ( ImportProcess->normalExit () )
|
|
{
|
|
|
|
if ( main->ImporttypeComboBox->currentItem() == pkcs12_freeswan )
|
|
Utils ( GlobalConfig,this ).doChmod ( certpath+"/cacerts/ca_" + certName + ".pem","go-rwx" );
|
|
else
|
|
Utils ( GlobalConfig,this ).doChmod ( certpath + "/ca_" + certName + ".pem","go-rwx" );
|
|
|
|
/*
|
|
openssl x509 -noout -hash < /etc/racoon/certs/ca_company.pem
|
|
*/
|
|
ImportProcess->clearArguments();
|
|
ImportProcess->addArgument ( pathToOpenSSL );
|
|
ImportProcess->addArgument ( "x509" );
|
|
ImportProcess->addArgument ( "-noout" );
|
|
ImportProcess->addArgument ( "-hash" );
|
|
ImportProcess->addArgument ( "-in" );
|
|
if ( main->ImporttypeComboBox->currentItem() == pkcs12_freeswan )
|
|
ImportProcess->addArgument ( certpath+"/cacerts/ca_" + certName + ".pem" ); // warning: static
|
|
else
|
|
ImportProcess->addArgument ( certpath + "/ca_" + certName + ".pem" );
|
|
|
|
connect ( ImportProcess, TQ_SIGNAL ( processExited () ), this, TQ_SLOT ( doLink() ) );
|
|
|
|
|
|
// LogOutput->append( "hash: we starting..." );
|
|
if ( !ImportProcess->start( ) )
|
|
{
|
|
KMessageBox::sorry ( this, i18n ( "Unable to start process (%1)!" ).arg ( "hash" ) );
|
|
GlobalConfig->appendLogEntry ( i18n ( "Certificate import: hash could not created." ),GlobalConfig->error );
|
|
importSuccess=false;
|
|
GlobalConfig->appPointer->restoreOverrideCursor();
|
|
return;
|
|
}
|
|
else
|
|
{
|
|
|
|
if ( GlobalConfig->KvpncDebugLevel > 3 )
|
|
GlobalConfig->appendLogEntry ( i18n ( "Certificate import: %1: send %2" ).arg("doCreateHash()").arg ( i18n ( " import password" ) ),GlobalConfig->debug );
|
|
|
|
if ( main->ImportPasswordEdit->text().isEmpty() )
|
|
ImportProcess->writeToStdin ( "\n" );
|
|
else
|
|
ImportProcess->writeToStdin ( main->ImportPasswordEdit->text() + "\n" );
|
|
while (ImportProcess->isRunning())
|
|
{
|
|
sleep (1);
|
|
}
|
|
|
|
doExit=true;
|
|
doHash = true;
|
|
if ( GlobalConfig->KvpncDebugLevel > 0 )
|
|
GlobalConfig->appendLogEntry ( i18n ( "Certificate import: hash successful created." ),GlobalConfig->debug );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
importSuccess=false;
|
|
GlobalConfig->appendLogEntry ( i18n ( "Certificate import: import process from doCert() failed." ),GlobalConfig->error );
|
|
}
|
|
}
|
|
|
|
void ImportCertificateDialog::doLink()
|
|
{
|
|
disconnect ( ImportProcess, TQ_SIGNAL ( processExited () ), this, TQ_SLOT ( doLink() ) );
|
|
if ( GlobalConfig->KvpncDebugLevel > 3 )
|
|
GlobalConfig->appendLogEntry ( i18n ( "Certificate import: %1" ).arg("doLink()"),GlobalConfig->debug );
|
|
|
|
if ( ImportProcess->normalExit () )
|
|
{
|
|
|
|
doHash = false;
|
|
ImportProcess->clearArguments();
|
|
/*
|
|
ln -s /etc/racoon/certs/ca_company.pem /etc/racoon/certs/<hash>.0
|
|
*/
|
|
ImportProcess->addArgument ( "ln" );
|
|
ImportProcess->addArgument ( "-sf" );
|
|
if ( main->ImporttypeComboBox->currentItem() == pkcs12_freeswan )
|
|
{
|
|
ImportProcess->addArgument ( certpath+"/cacerts/ca_" + certName + ".pem" );
|
|
ImportProcess->addArgument ( certpath+"/cacerts/" + certHash + ".0" );
|
|
}
|
|
else
|
|
{
|
|
ImportProcess->addArgument ( certpath + "/ca_" + certName + ".pem" );
|
|
ImportProcess->addArgument ( certpath +"/"+ certHash + ".0" );
|
|
}
|
|
|
|
if ( main->ImporttypeComboBox->currentItem() == pkcs12_freeswan ||
|
|
main->ImporttypeComboBox->currentItem() == pkcs12_openvpn )
|
|
connect ( ImportProcess, TQ_SIGNAL ( processExited () ), this, TQ_SLOT ( doPrivateKey() ) );
|
|
else
|
|
connect ( ImportProcess, TQ_SIGNAL ( processExited () ), this, TQ_SLOT ( exit() ) );
|
|
|
|
|
|
if ( !ImportProcess->start( ) )
|
|
{
|
|
KMessageBox::sorry ( this, i18n ( "Unable to start process (%1)!" ).arg ( "ln -s" ) );
|
|
GlobalConfig->appendLogEntry ( i18n ( "Certificate import: Link could not created." ),GlobalConfig->error );
|
|
importSuccess=false;
|
|
GlobalConfig->appPointer->restoreOverrideCursor();
|
|
return;
|
|
}
|
|
else
|
|
{
|
|
while (ImportProcess->isRunning())
|
|
{
|
|
usleep (500);
|
|
}
|
|
|
|
delete ImportProcess;
|
|
GlobalConfig->appPointer->restoreOverrideCursor();
|
|
if ( GlobalConfig->KvpncDebugLevel > 3 )
|
|
GlobalConfig->appendLogEntry ( i18n ( "Certificate import: Link creation sucessful." ),GlobalConfig->error );
|
|
ImportProcess =0L;
|
|
exit();
|
|
}
|
|
}
|
|
else
|
|
{
|
|
importSuccess=false;
|
|
GlobalConfig->appendLogEntry ( i18n ( "Certificate import: Skipping link creation." ),GlobalConfig->error );
|
|
}
|
|
}
|
|
|
|
void ImportCertificateDialog::exit()
|
|
{
|
|
if ( GlobalConfig->KvpncDebugLevel > 0 )
|
|
GlobalConfig->appendLogEntry ( i18n ( "Certificate import: %1" ).arg("exit()"),GlobalConfig->debug );
|
|
|
|
|
|
if ( (ImportProcess != 0L && ImportProcess->normalExit() ) || ImportProcess == 0L )
|
|
{
|
|
doExit=true;
|
|
if ( GlobalConfig->KvpncDebugLevel > 0 )
|
|
GlobalConfig->appendLogEntry ( i18n ( "Certificate import: Link successful created." ),GlobalConfig->debug );
|
|
|
|
// if ( ImportProcess->normalExit() )
|
|
// importOk=true;
|
|
if ( main->ImporttypeComboBox->currentItem() == pkcs12_freeswan )
|
|
Utils ( GlobalConfig,this ).doChmod ( certpath+"/private/" + certName + ".pem","go-rwx" );
|
|
|
|
if ( main->ImporttypeComboBox->currentItem() == pkcs12_openvpn )
|
|
Utils ( GlobalConfig,this ).doChmod ( certpath+"/" + certName + ".pem","go-rwx" );
|
|
done=true;
|
|
canAccept();
|
|
}
|
|
else
|
|
{
|
|
GlobalConfig->appPointer->restoreOverrideCursor();
|
|
importSuccess=false;
|
|
GlobalConfig->appendLogEntry ( i18n ( "Certificate import: import process from doPrivateKey() failed." ),GlobalConfig->error );
|
|
}
|
|
}
|
|
|
|
void ImportCertificateDialog::readFromStdout_import()
|
|
{
|
|
|
|
// TQString line = TQString( ImportProcess->readStdout() );
|
|
while ( ImportProcess->canReadLineStdout() )
|
|
{
|
|
TQString line = TQString ( ImportProcess->readLineStdout() );
|
|
|
|
if ( GlobalConfig->KvpncDebugLevel > 0 )
|
|
GlobalConfig->appendLogEntry ( i18n ( "Certificate import stdout: %1" ).arg ( line ),GlobalConfig->debug );
|
|
if ( doHash )
|
|
{
|
|
certHash = line.left ( line.length() - 1 );
|
|
doHash = false;
|
|
// LogOutput->append( "<font color=\"red\">[std]: hash" + line + "</font>" );
|
|
}
|
|
|
|
if ( line.find ( "Enter Import Password" , 0, FALSE ) > -1 )
|
|
{
|
|
if ( GlobalConfig->KvpncDebugLevel > 0 )
|
|
GlobalConfig->appendLogEntry ( i18n ( "Certificate import: %1 was requested, send it..." ).arg ( i18n ( " import password" ) ),GlobalConfig->debug );
|
|
|
|
if ( main->ImportPasswordEdit->text().isEmpty() )
|
|
ImportProcess->writeToStdin ( "\n" );
|
|
else
|
|
ImportProcess->writeToStdin ( main->ImportPasswordEdit->text() + "\n" );
|
|
}
|
|
|
|
else if ( line.find ( "Enter PEM pass phrase" , 0, FALSE ) > -1 )
|
|
{
|
|
|
|
if ( askpasscount < 10 )
|
|
{
|
|
|
|
if ( main->UsePrivateKeyPasswordCheckBox->isChecked() )
|
|
{
|
|
if ( GlobalConfig->KvpncDebugLevel > 3 )
|
|
GlobalConfig->appendLogEntry ( i18n ( "Certificate import: %1: send %2..." ).arg("doPrivateKey").arg ( i18n ( " private key password" ) ),GlobalConfig->debug );
|
|
|
|
ImportProcess->writeToStdin ( main->PrivateKeyPasswordEdit->text() + "\n" );
|
|
}
|
|
else
|
|
{
|
|
if ( GlobalConfig->KvpncDebugLevel > 3 )
|
|
GlobalConfig->appendLogEntry ( i18n ( "Certificate import: %1: send %2..." ).arg("doPrivateKey").arg ( i18n ( " private key password dummy" ) ),GlobalConfig->debug );
|
|
|
|
// we need 4 chars here
|
|
ImportProcess->writeToStdin ( "abcd\n" );
|
|
|
|
}
|
|
askpasscount+=1;
|
|
}
|
|
else
|
|
{
|
|
// whats happen???
|
|
// doExit=true;
|
|
}
|
|
}
|
|
|
|
|
|
if ( main->ImporttypeComboBox->currentItem() == cisco )
|
|
{
|
|
|
|
if ( GlobalConfig->KvpncDebugLevel > 2 )
|
|
GlobalConfig->appendLogEntry ("[cisco_cert_mgr raw] "+line,GlobalConfig->debug);
|
|
|
|
if ( line.find ( "Password:" , 0, FALSE ) > -1 || line.find ( "Confirm Password:" , 0, FALSE ) > -1 )
|
|
{
|
|
if ( GlobalConfig->KvpncDebugLevel > 0 )
|
|
GlobalConfig->appendLogEntry ( i18n ( "Certificate import: %1 was requested, send it..." ).arg ( i18n ( "certificate password" ) ),GlobalConfig->debug );
|
|
ImportProcess->writeToStdin ( main->PrivateKeyPasswordEdit->password() + "\n" );
|
|
|
|
}
|
|
if ( line.find ( "Success: certificate imported from path:", 0, FALSE ) > -1 )
|
|
{
|
|
|
|
GlobalConfig->appendLogEntry ( i18n ( "Certificate import was successful." ) ,GlobalConfig->info );
|
|
importOk=true;
|
|
importSuccess=true;
|
|
doExit=true;
|
|
done=true;
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|
|
|
|
void ImportCertificateDialog::readFromStderr_import()
|
|
{
|
|
// TQString line = TQString ( ImportProcess->readStderr() );
|
|
while ( ImportProcess->canReadLineStderr() )
|
|
{
|
|
TQString line = TQString ( ImportProcess->readLineStderr() );
|
|
if ( GlobalConfig->KvpncDebugLevel > 3 )
|
|
{
|
|
if ( line.find ( "Enter Import Pass", 0, FALSE ) > -1 || line.find ( "Enter PEM pass phrase", 0, FALSE ) > -1 || line.find ( "MAC verified OK", 0, FALSE ) > -1 || line.find ( "Enter pass phrase for", 0, FALSE ) > -1 || line.find ( "writing RSA key", 0, FALSE ) > -1 )
|
|
{
|
|
GlobalConfig->appendLogEntry ( i18n ( "Certificate import: %1" ).arg ( line ),GlobalConfig->info );
|
|
}
|
|
else
|
|
{
|
|
GlobalConfig->appendLogEntry ( i18n ( "Certificate import stderr: %1" ).arg ( line ),GlobalConfig->error );
|
|
}
|
|
}
|
|
if ( line.find ( "Error",9, FALSE ) > -1 )
|
|
{
|
|
GlobalConfig->appendLogEntry ( i18n ( "Certificate import: %1" ).arg ( line ),GlobalConfig->error );
|
|
importSuccess=false;
|
|
importOk = false;
|
|
doExit=false;
|
|
// error_found=true;
|
|
}
|
|
|
|
else if ( line.find ( "invalid password" , 0, FALSE ) > -1 || line.find ( "Mac verify error: invalid password?", 0, FALSE ) > -1 )
|
|
{
|
|
if (error_found==false)
|
|
KMessageBox::sorry ( this , i18n ( "Wrong password." ), i18n ( "Password Failed" ) );
|
|
GlobalConfig->appendLogEntry ( i18n ( "Certificate import: password was invalid" ),GlobalConfig->error );
|
|
importSuccess=false;
|
|
importOk = false;
|
|
doExit=false;
|
|
error_found=true;
|
|
GlobalConfig->appPointer->restoreOverrideCursor();
|
|
}
|
|
|
|
else if ( line.find ( "unable to load certificate", 0, FALSE ) > -1 )
|
|
{
|
|
if (error_found==false)
|
|
KMessageBox::error ( this, i18n ( "Unable to load certificate!" ), i18n ( "Load Failed" ) );
|
|
GlobalConfig->appendLogEntry ( i18n ( "Unable to load certificate!" ) ,GlobalConfig->error );
|
|
importOk=false;
|
|
importSuccess=false;
|
|
doExit=false;
|
|
error_found=true;
|
|
// if ( ImportProcess != 0L && ImportProcess->isRunning() )
|
|
// {
|
|
// disconnect ( ImportProcess, TQ_SIGNAL ( readyReadStdout() ), this, TQ_SLOT ( readFromStdout_import() ) );
|
|
// disconnect ( ImportProcess, TQ_SIGNAL ( readyReadStderr() ), this, TQ_SLOT ( readFromStderr_import() ) );
|
|
// ImportProcess->kill();
|
|
// ImportProcess = 0L;
|
|
// }
|
|
GlobalConfig->appPointer->restoreOverrideCursor();
|
|
done=true;
|
|
return;
|
|
}
|
|
else if ( line.find ( "unable to load Private Key", 0, FALSE ) > -1 )
|
|
{
|
|
if (error_found==false)
|
|
KMessageBox::error ( this, i18n ( "unable to load Private Key!" ), i18n ( "Load Failed" ) );
|
|
GlobalConfig->appendLogEntry ( i18n ( "unable to load Private Key!" ) ,GlobalConfig->error );
|
|
importOk=false;
|
|
importSuccess=false;
|
|
doExit=false;
|
|
error_found=true;
|
|
GlobalConfig->appPointer->restoreOverrideCursor();
|
|
if ( ImportProcess->isRunning() )
|
|
{
|
|
ImportProcess->kill();
|
|
}
|
|
done=true;
|
|
}
|
|
|
|
else if ( line.find ( "Error opening output file", 0, FALSE ) > -1 )
|
|
{
|
|
if (error_found==false)
|
|
KMessageBox::error ( this, i18n ( "Error opening output file." ), i18n ( "File open failed" ) );
|
|
GlobalConfig->appendLogEntry ( i18n ( "Error opening output file!" ) ,GlobalConfig->error );
|
|
importOk=false;
|
|
importSuccess=false;
|
|
doExit=true;
|
|
error_found=true;
|
|
GlobalConfig->appPointer->restoreOverrideCursor();
|
|
done=true;
|
|
}
|
|
else if ( line.find ( "Verify failure", 0, FALSE ) > -1 )
|
|
{
|
|
if (error_found==false)
|
|
KMessageBox::error ( this, i18n ( "Verify failure at private key password." ), i18n ( "Verify failure" ) );
|
|
GlobalConfig->appendLogEntry ( i18n ( "Verify failure at private key password." ) ,GlobalConfig->error );
|
|
importOk=false;
|
|
importSuccess=false;
|
|
doExit=true;
|
|
error_found=true;
|
|
GlobalConfig->appPointer->restoreOverrideCursor();
|
|
done=true;
|
|
}
|
|
|
|
else if ( line.find ( "MAC verified OK", 0, FALSE ) > -1 )
|
|
{
|
|
GlobalConfig->appendLogEntry ( i18n ( "Import password was ok." ) ,GlobalConfig->debug );
|
|
importSuccess=true;
|
|
}
|
|
|
|
else if ( main->ImporttypeComboBox->currentItem() == cisco )
|
|
{
|
|
|
|
if ( GlobalConfig->KvpncDebugLevel > 2 )
|
|
GlobalConfig->appendLogEntry ("[cisco_cert_mgr raw err] "+line,GlobalConfig->debug);
|
|
|
|
if ( line.find ( "error: unable to import certificate from path:", 0, FALSE ) > -1 )
|
|
{
|
|
if (error_found==false)
|
|
KMessageBox::error ( this, i18n ( "Unable to load certificate!" ), i18n ( "Load Failed" ) );
|
|
GlobalConfig->appendLogEntry ( i18n ( "Unable to load certificate!" ) ,GlobalConfig->error );
|
|
importOk=false;
|
|
importSuccess=false;
|
|
doExit=false;
|
|
error_found=true;
|
|
GlobalConfig->appPointer->restoreOverrideCursor();
|
|
if ( ImportProcess->isRunning() )
|
|
{
|
|
ImportProcess->kill();
|
|
}
|
|
done=true;
|
|
}
|
|
|
|
else if ( line.find ( "Success: certificate imported from path:", 0, FALSE ) > -1 )
|
|
{
|
|
GlobalConfig->appendLogEntry ( i18n ( "Certificate imported from path." ) ,GlobalConfig->error );
|
|
importOk=true;
|
|
importSuccess=true;
|
|
doExit=false;
|
|
done=true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
void ImportCertificateDialog::typeToggeled ( int type )
|
|
{
|
|
if ( GlobalConfig->KvpncDebugLevel > 0 )
|
|
GlobalConfig->appendLogEntry ( TQString ( "type: "+TQString().setNum ( type ) ),GlobalConfig->debug );
|
|
if ( type == pkcs12_freeswan )
|
|
{
|
|
certpath = "/etc/ipsec.d/certs";
|
|
// main->PrivateKeyPasswordEdit->setEnabled ( true );
|
|
// main->PrivateKeyAgainPasswordEdit->setEnabled ( true );
|
|
main->RacoonCertificatePathUrlrequester->setEnabled ( false );
|
|
main->ImportPasswordEdit->setEnabled ( true );
|
|
main->P12GroupBox->setEnabled ( true );
|
|
// main->PrivateKeyPassGroupBox->setEnabled ( true );
|
|
main->FilenameUrlrequester->setFilter ( "*.p12" );
|
|
}
|
|
else if ( type == pkcs12_racoon )
|
|
{
|
|
certpath = "/etc/racoon/certs/";
|
|
// main->PrivateKeyPasswordEdit->setEnabled ( false );
|
|
// main->PrivateKeyAgainPasswordEdit->setEnabled ( false );
|
|
main->RacoonCertificatePathUrlrequester->setEnabled ( true );
|
|
main->ImportPasswordEdit->setEnabled ( true );
|
|
main->P12GroupBox->setEnabled ( true );
|
|
// main->PrivateKeyPassGroupBox->setEnabled ( false );
|
|
main->FilenameUrlrequester->setFilter ( "*.p12" );
|
|
}
|
|
else if ( type == ca_der )
|
|
{
|
|
certpath = "/etc/certs/";
|
|
// main->PrivateKeyPasswordEdit->setEnabled ( false );
|
|
// main->PrivateKeyAgainPasswordEdit->setEnabled ( false );
|
|
main->RacoonCertificatePathUrlrequester->setEnabled ( true );
|
|
main->ImportPasswordEdit->setEnabled ( false );
|
|
main->P12GroupBox->setEnabled ( false );
|
|
// main->PrivateKeyPassGroupBox->setEnabled ( false );
|
|
main->FilenameUrlrequester->setFilter ( "*.der *.crt" );
|
|
}
|
|
else if ( type == pkcs12_openvpn )
|
|
{
|
|
certpath = "/etc/openvpn";
|
|
main->PrivateKeyPasswordEdit->setEnabled ( true );
|
|
main->PrivateKeyAgainPasswordEdit->setEnabled ( true );
|
|
main->RacoonCertificatePathUrlrequester->setEnabled ( true );
|
|
main->RacoonCertificatePathUrlrequester->setURL( certpath );
|
|
main->ImportPasswordEdit->setEnabled ( true );
|
|
main->P12GroupBox->setEnabled ( true );
|
|
main->PrivateKeyPassGroupBox->setEnabled ( true );
|
|
main->FilenameUrlrequester->setFilter ( "*.p12" );
|
|
}
|
|
else if ( type == cisco )
|
|
{
|
|
main->P12GroupBox->setTitle ( i18n ( "Import" ) );
|
|
main->CertPathTextLabel->hide();
|
|
main->RacoonCertificatePathUrlrequester->hide();
|
|
main->PrivateKeyPassGroupBox->setTitle ( i18n ( "Certificate protection" ) );
|
|
main->PrivateKeyPassTextLabel->setText(i18n ("Certificate password:"));
|
|
main->PrivateKeyPassAgainTextLabel->setText(i18n ("Certificate password again:"));
|
|
main->FilenameUrlrequester->setFilter ( "*" );
|
|
}
|
|
|
|
else
|
|
{
|
|
main->P12GroupBox->setTitle ( i18n ( "P12" ) );
|
|
main->CertPathTextLabel->hide();
|
|
main->RacoonCertificatePathUrlrequester->hide();
|
|
main->PrivateKeyPassGroupBox->setTitle ( i18n ( "FreeS/WAN (Openswan)" ) );
|
|
main->PrivateKeyPassTextLabel->setText(i18n ("Private key passphrase:"));
|
|
main->PrivateKeyPassAgainTextLabel->setText(i18n ("Passphrase again:"));
|
|
main->FilenameUrlrequester->setFilter ( "*" );
|
|
}
|
|
|
|
main->RacoonCertificatePathUrlrequester->setURL ( certpath );
|
|
}
|
|
|
|
void ImportCertificateDialog::ciscoCertMgrExited()
|
|
{
|
|
doExit=true;
|
|
importOk=true;
|
|
importSuccess=true;
|
|
done=true;
|
|
if ( GlobalConfig->KvpncDebugLevel > 0 )
|
|
GlobalConfig->appendLogEntry ( i18n ( "Certificate import: certificate successful imported." ),GlobalConfig->debug );
|
|
canAccept();
|
|
}
|
|
|
|
void ImportCertificateDialog::usePrivateKeyPassToggled(bool)
|
|
{
|
|
if (main->UsePrivateKeyPasswordCheckBox->isChecked())
|
|
{
|
|
main->PrivateKeyPassGroupBox->setEnabled(true);
|
|
}
|
|
else
|
|
{
|
|
main->PrivateKeyPassGroupBox->setEnabled(false);
|
|
}
|
|
}
|
|
|
|
void ImportCertificateDialog::removePrivateKey()
|
|
{
|
|
disconnect ( ImportProcess, TQ_SIGNAL ( processExited () ), this, TQ_SLOT ( removePrivateKey() ) );
|
|
if ( GlobalConfig->KvpncDebugLevel > 3 )
|
|
GlobalConfig->appendLogEntry ( i18n ( "Certificate import: %1" ).arg("removePrivateKey()"),GlobalConfig->debug );
|
|
|
|
if ( ImportProcess->normalExit () )
|
|
{
|
|
ImportProcess->clearArguments();
|
|
ImportProcess->addArgument ( pathToOpenSSL );
|
|
ImportProcess->addArgument ( "rsa" );
|
|
ImportProcess->addArgument ( "-in" );
|
|
|
|
if ( main->ImporttypeComboBox->currentItem() == pkcs12_freeswan )
|
|
ImportProcess->addArgument ( certpath+"/private/" + certName + ".pem" ); // warning: static
|
|
else if ( main->ImporttypeComboBox->currentItem() == pkcs12_openvpn )
|
|
ImportProcess->addArgument ( certpath+"/" + certName + ".pem" ); // warning: static
|
|
|
|
ImportProcess->addArgument ( "-out" );
|
|
|
|
if ( main->ImporttypeComboBox->currentItem() == pkcs12_freeswan )
|
|
ImportProcess->addArgument ( certpath+"/private/" + certName + ".pem" ); // warning: static
|
|
else if ( main->ImporttypeComboBox->currentItem() == pkcs12_openvpn )
|
|
ImportProcess->addArgument ( certpath+"/" + certName + ".pem" ); // warning: static
|
|
|
|
connect ( ImportProcess, TQ_SIGNAL ( processExited () ), this, TQ_SLOT ( exit() ) );
|
|
|
|
|
|
if ( !ImportProcess->start( ) )
|
|
{
|
|
KMessageBox::sorry ( this, i18n ( "Unable to start process (%1)!" ).arg ( "ln -s" ) );
|
|
GlobalConfig->appendLogEntry ( i18n ( "Certificate import: passphrase could not removed." ),GlobalConfig->error );
|
|
importSuccess=false;
|
|
GlobalConfig->appPointer->restoreOverrideCursor();
|
|
return;
|
|
}
|
|
else
|
|
{
|
|
|
|
if ( GlobalConfig->KvpncDebugLevel > 3 )
|
|
GlobalConfig->appendLogEntry ( i18n ( "Certificate import: %1: send %2..." ).arg("removePrivateKey()").arg ( i18n ( " private key password dummy" ) ),GlobalConfig->debug );
|
|
|
|
// we need 4 chars here
|
|
ImportProcess->writeToStdin ( "abcd\n" );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
importSuccess=false;
|
|
}
|
|
}
|
|
|
|
#include "importcertificatedialog.moc"
|