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/ciscocertificateenrollment.cpp

744 lines
26 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 "ciscocertificateenrollment.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 <tqradiobutton.h>
#include <tqcursor.h>
#include "utils.h"
//END INCLUDES
CiscoCertificateEnrollment::CiscoCertificateEnrollment ( TQWidget *, const char*, KVpncConfig *GlobalConfig )
{
this->GlobalConfig = GlobalConfig;
valuesOk=true;
type="";
CA="";
CaUrl="";
ChallengePassword="";
CaDomain="";
FileEncoding="";
FilenameURL="";
Ip="";
State="";
Department="";
Company="";
Domain="";
Name="";
Email="";
Country="";
success=0;
successmsg="";
EnrollmentProcess=0;
setupPages();
}
CiscoCertificateEnrollment::~CiscoCertificateEnrollment()
{
delete selectionpage;
delete datapage;
}
void CiscoCertificateEnrollment::accept()
{
finished=true;
TQWizard::accept();
}
void CiscoCertificateEnrollment::canAccept()
{
TQDialog::accept();
}
void CiscoCertificateEnrollment::reject()
{
if ( GlobalConfig->KvpncDebugLevel > 2 )
GlobalConfig->appendLogEntry ( i18n ( "Enrollment break requested, user cancel" ), GlobalConfig->debug );
if ( EnrollmentProcess != 0 && EnrollmentProcess->isRunning() )
{
EnrollmentProcess->tryTerminate();
TQTimer::singleShot ( 2000, EnrollmentProcess, TQ_SLOT ( kill() ) );
if ( GlobalConfig->KvpncDebugLevel > 2 )
GlobalConfig->appendLogEntry ( i18n ( "process %1 killed" ).arg ( "cisco_cert_mgr" ), GlobalConfig->debug );
}
finished = false;
TQWizard::reject();
}
void CiscoCertificateEnrollment::setupPages()
{
GlobalConfig->appPointer->setOverrideCursor( TQCursor(TQt::WaitCursor) );
selectionpage = new CiscoCertificateEnrollmentBase ( 0 );
selectionpage->sizeHint();
addPage ( selectionpage, "<b>" + i18n ( "Select enrollment type..." ) + "</b>" );
connect ( selectionpage->FileEnrollementRadioButton, TQ_SIGNAL ( toggled ( bool ) ), this, TQ_SLOT ( enrollmentToggled ( bool ) ) );
connect ( selectionpage->OnlineEnrollementRadioButton, TQ_SIGNAL ( toggled ( bool ) ), this, TQ_SLOT ( enrollmentToggled ( bool ) ) );
GlobalConfig->slotStatusMsg(i18n("Collecting cisco CA certs from Cisco certificate store..."), ID_STATUS_MSG);
if (GlobalConfig->KvpncDebugLevel > 2)
GlobalConfig->appendLogEntry(i18n("Looking for CA certs in Cisco certificate store..."), GlobalConfig->debug);
TQStringList CiscoCaCerts = Utils(GlobalConfig).getCertsFromCiscoCertStore("ca");
if (GlobalConfig->KvpncDebugLevel > 2)
GlobalConfig->appendLogEntry(i18n("Done."), GlobalConfig->debug);
GlobalConfig->slotStatusMsg(i18n("Done."), ID_FLASH_MSG);
GlobalConfig->slotStatusMsg(i18n("Ready."), ID_STATUS_MSG);
for ( TQStringList::Iterator it = CiscoCaCerts.begin(); it != CiscoCaCerts.end(); ++it )
{
if ( GlobalConfig->KvpncDebugLevel > 2 ) {
std::cout << "insert item (cisco ca certs): " << TQString ( *it ).local8Bit() << std::endl;
}
selectionpage->CAComboBox->insertItem ( *it );
}
datapage = new CiscoCertificateEnrollmentDataDialog ( 0, "datapage",GlobalConfig );
datapage->sizeHint();
addPage ( datapage, "<b>" + i18n ( "Enter certificate data..." ) + "</b>" );
finishpage = new CiscoCertificateEnrollmentFinishWidgetBase ( 0 );
finishpage->sizeHint();
addPage ( finishpage, "<b>" + i18n ( "Finish" ) + "</b>" );
GlobalConfig->appPointer->restoreOverrideCursor();
}
void CiscoCertificateEnrollment::next ()
{
// called at each finish of a page
bool ok = true;
TQString msg = i18n ( "Please fill in all fields!" );
msg = i18n ( "These fields must be filled in:\n" );
if ( currentpage == selectionpage )
{
if ( selectionpage->FileEnrollementRadioButton->isChecked() )
{
if ( GlobalConfig->KvpncDebugLevel > 2 )
GlobalConfig->appendLogEntry ( i18n ( "Enrollment type: %1" ).arg ( i18n ( "File" ) ), KVpncConfig::debug );
type="file";
if ( selectionpage->FilenameURLRequester->url().isEmpty() )
{
ok = false;
msg += "- " + i18n ( "Filename" ) + "\n";
GlobalConfig->appendLogEntry ( i18n ( "Filename is empty!" ), GlobalConfig->error );
}
else
{
if ( GlobalConfig->KvpncDebugLevel > 2 )
GlobalConfig->appendLogEntry ( i18n ( "Filename: %1" ).arg ( selectionpage->FilenameURLRequester->url() ), KVpncConfig::debug );
FilenameURL = selectionpage->FilenameURLRequester->url();
}
if ( selectionpage->NewPasswordPasswordEdit->text().isEmpty() )
{
ok = false;
msg += "- " + i18n ( "Password" ) + "\n";
GlobalConfig->appendLogEntry ( i18n ( "Password is empty!" ), GlobalConfig->error );
}
else
{
if ( GlobalConfig->KvpncDebugLevel > 2 && GlobalConfig->KvpncDebugLevel < 4 )
GlobalConfig->appendLogEntry ( i18n ( "Password: %1" ).arg ( "******" ), KVpncConfig::debug );
else if ( GlobalConfig->KvpncDebugLevel > 4 )
GlobalConfig->appendLogEntry ( i18n ( "Password (cleartext): %1" ).arg ( selectionpage->NewPasswordPasswordEdit->password() ), KVpncConfig::debug );
ChallengePassword = selectionpage->NewPasswordPasswordEdit->password();
}
if ( GlobalConfig->KvpncDebugLevel > 2 )
GlobalConfig->appendLogEntry ( i18n ( "File encoding: %1" ).arg ( selectionpage->FileEncodingComboBox->currentText() ), KVpncConfig::debug );
FileEncoding = selectionpage->FileEncodingComboBox->currentText();
}
if ( selectionpage->OnlineEnrollementRadioButton->isChecked() )
{
if ( GlobalConfig->KvpncDebugLevel > 2 )
GlobalConfig->appendLogEntry ( i18n ( "Enrollment type: %1" ).arg ( i18n ( "Online" ) ), KVpncConfig::debug );
type="online";
if ( GlobalConfig->KvpncDebugLevel > 2 )
GlobalConfig->appendLogEntry ( i18n ( "CA: %1" ).arg ( selectionpage->CAComboBox->currentText() ), KVpncConfig::debug );
CA = selectionpage->CAComboBox->currentText();
if ( selectionpage->CaUrlLineEdit->text().isEmpty() )
{
ok = false;
msg += "- " + i18n ( "CA URL" ) + "\n";
GlobalConfig->appendLogEntry ( i18n ( "CA URL is empty!" ), GlobalConfig->error );
}
else
{
if ( GlobalConfig->KvpncDebugLevel > 2 )
GlobalConfig->appendLogEntry ( i18n ( "CA URL: %1" ).arg ( selectionpage->CaUrlLineEdit->text() ), KVpncConfig::debug );
CaUrl = selectionpage->CaUrlLineEdit->text();
}
if ( GlobalConfig->KvpncDebugLevel > 2 )
GlobalConfig->appendLogEntry ( i18n ( "CA domain: %1" ).arg ( selectionpage->CaDomainLineEdit->text() ), KVpncConfig::debug );
CaDomain = selectionpage->CaDomainLineEdit->text();
if ( selectionpage->ChallengePasswordPasswordEdit->text().isEmpty() )
{
ok = false;
msg += "- " + i18n ( "Challenge password" ) + "\n";
GlobalConfig->appendLogEntry ( i18n ( "Challenge password is empty!" ), GlobalConfig->error );
}
else
{
if ( GlobalConfig->KvpncDebugLevel > 2 && GlobalConfig->KvpncDebugLevel < 4 )
GlobalConfig->appendLogEntry ( i18n ( "Challenge password: %1" ).arg ( "*****" ), KVpncConfig::debug );
else if ( GlobalConfig->KvpncDebugLevel > 4 )
GlobalConfig->appendLogEntry ( i18n ( "Challenge password (cleartext): %1" ).arg ( selectionpage->ChallengePasswordPasswordEdit->password() ), KVpncConfig::debug );
ChallengePassword = selectionpage->ChallengePasswordPasswordEdit->password();
}
}
}
if ( currentpage == datapage )
{
if ( datapage->NameLineEdit->text().isEmpty() )
{
ok = false;
msg += "- " + i18n ( "Name" ) + "\n";
GlobalConfig->appendLogEntry ( i18n ( "Name is empty!" ), GlobalConfig->error );
}
else
{
if ( GlobalConfig->KvpncDebugLevel > 2 )
GlobalConfig->appendLogEntry ( i18n ( "Name: %1" ).arg ( datapage->NameLineEdit->text() ), KVpncConfig::debug );
Name = datapage->NameLineEdit->text();
}
if ( GlobalConfig->KvpncDebugLevel > 2 )
GlobalConfig->appendLogEntry ( i18n ( "IP address: %1" ).arg ( datapage->IpLineEdit->text() ), KVpncConfig::debug );
Ip = datapage->IpLineEdit->text();
if ( GlobalConfig->KvpncDebugLevel > 2 )
GlobalConfig->appendLogEntry ( i18n ( "State: %1" ).arg ( datapage->StateLineEdit->text() ), KVpncConfig::debug );
State = datapage->StateLineEdit->text();
if ( GlobalConfig->KvpncDebugLevel > 2 )
GlobalConfig->appendLogEntry ( i18n ( "Department: %1" ).arg ( datapage->DepartmentLineEdit->text() ), KVpncConfig::debug );
Department = datapage->DepartmentLineEdit->text();
if ( GlobalConfig->KvpncDebugLevel > 2 )
GlobalConfig->appendLogEntry ( i18n ( "Company: %1" ).arg ( datapage->CompanyLineEdit->text() ), KVpncConfig::debug );
Company = datapage->CompanyLineEdit->text();
if ( GlobalConfig->KvpncDebugLevel > 2 )
GlobalConfig->appendLogEntry ( i18n ( "Domain: %1" ).arg ( datapage->DomainLineEdit->text() ), KVpncConfig::debug );
Domain = datapage->DomainLineEdit->text();
if ( GlobalConfig->KvpncDebugLevel > 2 )
GlobalConfig->appendLogEntry ( i18n ( "Email: %1" ).arg ( datapage->EmailLineEdit->text() ), KVpncConfig::debug );
Email = datapage->EmailLineEdit->text();
if ( GlobalConfig->KvpncDebugLevel > 2 )
GlobalConfig->appendLogEntry ( i18n ( "Country: %1" ).arg ( datapage->CountryLineEdit->text() ), KVpncConfig::debug );
Country = datapage->CountryLineEdit->text();
// now do the work
successmsg =i18n ( "Enrollment was sucessful." );
success=0;
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->setOverrideCursor ( TQCursor ( TQt::WaitCursor ) );
env = new TQStringList();
*env << "LC_ALL=C" << "LANG=C" << "PATH=/bin:/usr/bin:/usr/sbin:/sbin";
EnrollmentProcess = new TQProcess ( this );
EnrollmentProcess->addArgument ( GlobalConfig->pathToCiscoCertMgr );
if ( type == "file" )
{
EnrollmentProcess->addArgument ( "-U" );
EnrollmentProcess->addArgument ( "-op" );
EnrollmentProcess->addArgument ( "enroll_file" );
EnrollmentProcess->addArgument ( "-f" );
EnrollmentProcess->addArgument ( FilenameURL );
EnrollmentProcess->addArgument ( "-cn" );
EnrollmentProcess->addArgument ( Name );
EnrollmentProcess->addArgument ( "-enc" );
EnrollmentProcess->addArgument ( FileEncoding );
}
if ( type == "online" )
{
EnrollmentProcess->addArgument ( "-U" );
EnrollmentProcess->addArgument ( "-op" );
EnrollmentProcess->addArgument ( "enroll" );
EnrollmentProcess->addArgument ( "-cn" );
EnrollmentProcess->addArgument ( Name );
EnrollmentProcess->addArgument ( "-caurl" );
EnrollmentProcess->addArgument ( CaUrl );
EnrollmentProcess->addArgument ( "-cadn" );
EnrollmentProcess->addArgument ( CaDomain );
if ( !Department.isEmpty() )
{
EnrollmentProcess->addArgument ( "-ou" );
EnrollmentProcess->addArgument ( Department );
}
if ( !State.isEmpty() )
{
EnrollmentProcess->addArgument ( "-st" );
EnrollmentProcess->addArgument ( State );
}
if ( !Company.isEmpty() )
{
EnrollmentProcess->addArgument ( "-o" );
EnrollmentProcess->addArgument ( Company );
}
if ( !Domain.isEmpty() )
{
EnrollmentProcess->addArgument ( "-dn" );
EnrollmentProcess->addArgument ( Domain );
}
if ( !Email.isEmpty() )
{
EnrollmentProcess->addArgument ( "-e" );
EnrollmentProcess->addArgument ( Email );
}
if ( !Country.isEmpty() )
{
EnrollmentProcess->addArgument ( "-c" );
EnrollmentProcess->addArgument ( Country );
}
if ( !Ip.isEmpty() )
{
EnrollmentProcess->addArgument ( "-ip" );
EnrollmentProcess->addArgument ( Ip );
}
}
connect ( EnrollmentProcess, TQ_SIGNAL ( readyReadStdout() ), this, TQ_SLOT ( readFromStdout() ) );
connect ( EnrollmentProcess, TQ_SIGNAL ( readyReadStderr() ), this, TQ_SLOT ( readFromStderr() ) );
connect ( EnrollmentProcess, TQ_SIGNAL ( processExited()) , this, TQ_SLOT(enrollmentProcessFinished()));
// if ( GlobalConfig->KvpncDebugLevel > 3 )
{
TQString args = "";
TQStringList list = EnrollmentProcess->arguments();
TQStringList::Iterator it2 = list.begin();
while ( it2 != list.end() )
{
args += TQString ( " " + *it2 ) ;
++it2;
}
if ( GlobalConfig->KvpncDebugLevel > 3 )
GlobalConfig->appendLogEntry ( i18n ( "EnrollmentProcess args: " )+EnrollmentProcess->arguments().join (" "), GlobalConfig->debug );
}
if ( !EnrollmentProcess->start ( env ) )
{
KMessageBox::sorry ( this, i18n ( "Unable to start process (%1)!" ).arg ( "cisco_cert_mgr" ) );
GlobalConfig->appendLogEntry ( i18n ( "Unable to start process (%1)!" ).arg ( "cisco_cert_mgr" ), KVpncConfig::error );
GlobalConfig->appPointer->restoreOverrideCursor();
return;
}
else
{
if ( GlobalConfig->KvpncDebugLevel > 2 )
GlobalConfig->appendLogEntry ( i18n ( "Process %1 started." ).arg ( "cisco_cert_mgr" ), KVpncConfig::debug );
ProgressDlg = new KProgressDialog ( 0, "enrollmentprogress", i18n ( "Enrollment progress" ), i18n ( "Certificate enrollment..." ), true );
ProgressDlg->progressBar()->setTotalSteps ( 100 );
ProgressDlg->setAllowCancel ( true );
ProgressDlg->show();
ProgressDlg->resize ( ProgressDlg->width() +100,ProgressDlg->height() );
connect ( &CheckEnrollmentTimer, TQ_SIGNAL ( timeout() ), this, TQ_SLOT ( checkProgress() ) );
CheckEnrollmentTimer.start ( 500, FALSE );
// we stupid have to send the password :(
// EnrollmentProcess->writeToStdin ( ChallengePassword + "\n" );
// if ( GlobalConfig->KvpncDebugLevel > 4 )
// GlobalConfig->appendLogEntry ( i18n ( "Send challenge password: %1" ).arg (selectionpage->ChallengePasswordPasswordEdit->text() ), KVpncConfig::debug );
if ( ProgressDlg!= 0 )
ProgressDlg->progressBar()->setValue ( 33 );
}
}
if ( currentpage == finishpage )
{
if ( GlobalConfig->KvpncDebugLevel > 2 )
GlobalConfig->appendLogEntry ( i18n ( "Enrollment finished: %1." ).arg ( successmsg ), KVpncConfig::debug );
}
if ( ok )
{
previouspage = currentpage;
TQWizard::next();
}
else
{
KMessageBox::error ( this, msg );
}
}
void CiscoCertificateEnrollment::back()
{
/*
currentpage=previouspage;
// showPage(previouspage);
if ( currentpage == page1 )
{
// nothing here
}
*/
TQWizard::back();
}
void CiscoCertificateEnrollment::showPage ( TQWidget* page )
{
currentpage = page;
TQWizard::showPage ( page );
// FIXME set currentpage at back()
//backButton()->setEnabled(false);
helpButton() ->setEnabled ( false );
if ( page == finishpage )
{
finishpage->SucessTextLabel->setText(successmsg);
}
}
void CiscoCertificateEnrollment::enrollmentProcessFinished()
{
disconnect ( EnrollmentProcess, TQ_SIGNAL ( readyReadStdout() ), this, TQ_SLOT ( readFromStdout() ) );
disconnect ( EnrollmentProcess, TQ_SIGNAL ( readyReadStderr() ), this, TQ_SLOT ( readFromStderr() ) );
disconnect ( EnrollmentProcess, TQ_SIGNAL ( processExited()) , this, TQ_SLOT(enrollmentProcessFinished()));
if ( ProgressDlg!= 0 )
ProgressDlg->progressBar()->setValue ( 100 );
GlobalConfig->appPointer->restoreOverrideCursor();
finishpage->SucessTextLabel->setText ( successmsg );
finishButton() ->setEnabled ( TRUE );
finishButton() ->setFocus();
ProgressDlg->hide();
// delete ProgressDlg;
// delete EnrollmentProcess;
}
void CiscoCertificateEnrollment::enrollmentToggled ( bool )
{
if ( selectionpage->FileEnrollementRadioButton->isChecked() )
{
selectionpage->CaTextLabel->setEnabled ( false );
selectionpage->CAComboBox->setEnabled ( false );
selectionpage->CaUrlLineEdit->setEnabled ( false );
selectionpage->CaUrlTextLabel->setEnabled ( false );
selectionpage->ChallengePasswordTextLabel->setEnabled ( false );
selectionpage->ChallengePasswordPasswordEdit->setEnabled ( false );
selectionpage->CaDomainTextLabel->setEnabled ( false );
selectionpage->CaDomainLineEdit->setEnabled ( false );
selectionpage->FilenameTextLabel->setEnabled ( true );
selectionpage->FilenameURLRequester->setEnabled ( true );
selectionpage->FileEncodingComboBox->setEnabled ( true );
selectionpage->FileEncodingTextLabel->setEnabled ( true );
selectionpage->FileEncodingComboBox->setEnabled ( true );
selectionpage->NewPasswordTextLabel->setEnabled ( true );
selectionpage->NewPasswordPasswordEdit->setEnabled ( true );
}
if ( selectionpage->OnlineEnrollementRadioButton->isChecked() )
{
selectionpage->CaTextLabel->setEnabled ( true );
selectionpage->CAComboBox->setEnabled ( true );
selectionpage->CaUrlTextLabel->setEnabled ( true );
selectionpage->CaUrlLineEdit->setEnabled ( true );
selectionpage->ChallengePasswordTextLabel->setEnabled ( true );
selectionpage->ChallengePasswordPasswordEdit->setEnabled ( true );
selectionpage->CaDomainTextLabel->setEnabled ( true );
selectionpage->CaDomainLineEdit->setEnabled ( true );
selectionpage->FileEncodingComboBox->setEnabled ( false );
selectionpage->FilenameTextLabel->setEnabled ( false );
selectionpage->FilenameURLRequester->setEnabled ( false );
selectionpage->FileEncodingTextLabel->setEnabled ( false );
selectionpage->FileEncodingComboBox->setEnabled ( false );
selectionpage->NewPasswordTextLabel->setEnabled ( false );
selectionpage->NewPasswordPasswordEdit->setEnabled ( false );
}
}
void CiscoCertificateEnrollment::readFromStdout()
{
TQString line2 = TQString( EnrollmentProcess->readStdout() );
TQStringList lines = TQStringList::split( '\n', line2 );
for ( TQStringList::Iterator it = lines.begin(); it != lines.end(); ++it )
// while ( EnrollmentProcess->canReadLineStdout() )
{
// TQString line = TQString ( EnrollmentProcess->readLineStdout() );
TQString line = *it;
if ( GlobalConfig->KvpncDebugLevel > 2 )
GlobalConfig->appendLogEntry ( "[cisco_cert_mgr raw] "+line,GlobalConfig->debug );
if ( line.find ( "Password:" , 0, FALSE ) > -1 )
{
if ( GlobalConfig->KvpncDebugLevel > 0 )
GlobalConfig->appendLogEntry ( i18n ( "Certificate enrollment: %1 was requested, send it..." ).arg ( i18n ( " challenge password" ) ),GlobalConfig->debug );
EnrollmentProcess->writeToStdin ( ChallengePassword + "\n" );
if ( GlobalConfig->KvpncDebugLevel > 4 )
GlobalConfig->appendLogEntry ( i18n ( "Send challenge password: %1" ).arg ( ChallengePassword ), KVpncConfig::debug );
}
if ( line.find ( "Request Pending." , 0, FALSE ) > -1 )
{
if ( ProgressDlg!= 0 )
ProgressDlg->progressBar()->setValue ( 66 );
GlobalConfig->appendLogEntry ( i18n ( "Certificate enrollment: request sent to CA, waiting for grant..." ) ,GlobalConfig->info );
}
if ( line.find ( "contacting certificate authority." , 0, FALSE ) > -1 )
{
GlobalConfig->appendLogEntry ( i18n ( "Certificate enrollment: contacting CA..." ) ,GlobalConfig->info );
}
if ( line.find ( "Success: certificate enrollment completed with no errors." , 0, FALSE ) > -1 )
{
if ( ProgressDlg!= 0 )
ProgressDlg->progressBar()->setValue ( 99 );
if (success==0)
{
GlobalConfig->appendLogEntry ( i18n ( "Certificate enrollment: enrollment was successful." ) ,GlobalConfig->info );
success=0;
successmsg="The enrollment was successful. The CA has granted the request. The user and CA certificates are imported.";
}
}
}
}
void CiscoCertificateEnrollment::readFromStderr()
{
TQString line2 = TQString( EnrollmentProcess->readStderr() );
TQStringList lines = TQStringList::split( '\n', line2 );
for ( TQStringList::Iterator it = lines.begin(); it != lines.end(); ++it )
// while ( EnrollmentProcess->canReadLineStderr() )
{
// TQString line = TQString ( EnrollmentProcess->readLineStderr() );
TQString line = *it;
if ( GlobalConfig->KvpncDebugLevel > 2 )
GlobalConfig->appendLogEntry ( "[cisco_cert_mgr err raw] "+line,GlobalConfig->debug );
if ( line.find ( "certificate enrollment failed." , 0, FALSE ) > -1 )
{
KMessageBox::error ( 0, i18n ( "Certificate enrollment: enrollment has been failed." ), i18n ( "Enrollment failed" ) );
GlobalConfig->appendLogEntry ( i18n ( "Certificate enrollment: enrollment has been failed." ),GlobalConfig->error );
success=-1;
successmsg=i18n ( "Enrollment has been failed" );
// GlobalConfig->appPointer->restoreOverrideCursor();
}
}
// sucess=-1;
}
void CiscoCertificateEnrollment::checkProgress()
{
if ( GlobalConfig->KvpncDebugLevel > 6 )
GlobalConfig->appendLogEntry ( i18n ( "Enrollment timer event" ), GlobalConfig->debug );
if ( ProgressDlg->wasCancelled () )
{
// user has canceled the dlg, so we have to stop here
if ( GlobalConfig->KvpncDebugLevel > 2 )
GlobalConfig->appendLogEntry ( i18n ( "Enrollment break requested, user cancel" ), GlobalConfig->debug );
CheckEnrollmentTimer.stop();
// kill process
disconnect ( EnrollmentProcess, TQ_SIGNAL ( readyReadStdout() ), this, TQ_SLOT ( readFromStdout() ) );
disconnect ( EnrollmentProcess, TQ_SIGNAL ( readyReadStderr() ), this, TQ_SLOT ( readFromStderr() ) );
if ( EnrollmentProcess->isRunning() )
{
EnrollmentProcess->tryTerminate();
TQTimer::singleShot ( 2000, EnrollmentProcess, TQ_SLOT ( kill() ) );
if ( GlobalConfig->KvpncDebugLevel > 2 )
GlobalConfig->appendLogEntry ( i18n ( "process %1 killed" ).arg ( "cisco_cert_mgr" ), GlobalConfig->debug );
}
TQStringList CiscoCertRequests = Utils ( GlobalConfig ).getCertsFromCiscoCertStore ( "enrollment" );
if ( !CiscoCertRequests.isEmpty() )
{
if ( GlobalConfig->KvpncDebugLevel > 2 )
GlobalConfig->appendLogEntry ( i18n ( "removing pending enrollment requests: %1" ).arg ( CiscoCertRequests.join ( ", " ) ), GlobalConfig->debug );
for ( int i=0; i< ( int ) CiscoCertRequests.count() ; i++ )
{
if ( GlobalConfig->KvpncDebugLevel > 2 )
GlobalConfig->appendLogEntry ( i18n ( "delete enrollment request..." ), GlobalConfig->debug );
DeleteProcess = new TQProcess ( 0 );
DeleteProcess->addArgument ( GlobalConfig->pathToCiscoCertMgr );
DeleteProcess->addArgument ( "-E" );
DeleteProcess->addArgument ( "-op" );
DeleteProcess->addArgument ( "delete" );
DeleteProcess->addArgument ( "-ct" );
DeleteProcess->addArgument ( 0 );
connect ( DeleteProcess, TQ_SIGNAL ( processExited()) , this, TQ_SLOT(cancelProcessFinished()));
connect ( DeleteProcess, TQ_SIGNAL ( readyReadStdout() ), this, TQ_SLOT ( readFromStdout_cancel() ) );
connect ( DeleteProcess, TQ_SIGNAL ( readyReadStderr() ), this, TQ_SLOT ( readFromStderr_cancel() ) );
if ( !DeleteProcess->start ( env ) )
{
GlobalConfig->appendLogEntry ( i18n ( "Process (%1) could not started!" ).arg ( "cisco_cert_mgr" ),GlobalConfig->error );
// KMessageBox::sorry ( this, i18n ( "Unable to start process (%1)!" ).arg ( "cisco_cert_mgr" ) );
}
else
{
if ( GlobalConfig->KvpncDebugLevel > 2 )
GlobalConfig->appendLogEntry ( i18n ( "Process (%1) started." ).arg ( "cisco_cert_mgr: delete" ),GlobalConfig->debug );
DeleteProcess->writeToStdin ( ChallengePassword + "\n" );
if ( GlobalConfig->KvpncDebugLevel > 4 )
GlobalConfig->appendLogEntry ( i18n ( "Send challenge password: %1" ).arg ( ChallengePassword ), KVpncConfig::debug );
while (DeleteProcess->isRunning())
{
sleep(1);
}
}
disconnect ( DeleteProcess, TQ_SIGNAL ( processExited()) , this, TQ_SLOT(cancelProcessFinished()));
disconnect ( DeleteProcess, TQ_SIGNAL ( readyReadStdout() ), this, TQ_SLOT ( readFromStdout_cancel() ) );
disconnect ( DeleteProcess, TQ_SIGNAL ( readyReadStderr() ), this, TQ_SLOT ( readFromStderr_cancel() ) );
delete DeleteProcess;
DeleteProcess=0L;
}
}
}
else
{
// nothing to do...
}
}
void CiscoCertificateEnrollment::cancelProcessFinished()
{
if ( GlobalConfig->KvpncDebugLevel > 2 )
GlobalConfig->appendLogEntry ( i18n ( "Process (%1) finished." ).arg ( "cisco_cert_mgr: delete" ),GlobalConfig->debug );
// delete DeleteProcess;
successmsg=i18n ( "Request canceled." );
success=-1;
finishpage->SucessTextLabel->setText ( successmsg );
}
void CiscoCertificateEnrollment::readFromStdout_cancel()
{
TQString line = TQString( DeleteProcess->readStdout() );
// while ( DeleteProcess->canReadLineStdout() )
// {
// TQString line = TQString ( DeleteProcess->readLineStdout() );
if ( GlobalConfig->KvpncDebugLevel > 2 )
GlobalConfig->appendLogEntry ( "[cisco_cert_mgr raw] "+line,GlobalConfig->debug );
// }
}
void CiscoCertificateEnrollment::readFromStderr_cancel()
{
TQString line = TQString ( DeleteProcess->readStderr() );
// while ( DeleteProcess->canReadLineStderr() )
// {
// TQString line = TQString ( DeleteProcess->readLineStderr() );
if ( GlobalConfig->KvpncDebugLevel > 2 )
GlobalConfig->appendLogEntry ( "[cisco_cert_mgr err raw] "+line,GlobalConfig->debug );
// }
// sucess=-1;
}
#include "ciscocertificateenrollment.moc"