diff options
Diffstat (limited to 'src/ciscocertificateenrollment.cpp')
-rw-r--r-- | src/ciscocertificateenrollment.cpp | 742 |
1 files changed, 742 insertions, 0 deletions
diff --git a/src/ciscocertificateenrollment.cpp b/src/ciscocertificateenrollment.cpp new file mode 100644 index 0000000..bb1d54c --- /dev/null +++ b/src/ciscocertificateenrollment.cpp @@ -0,0 +1,742 @@ +/*************************************************************************** + * Copyright (C) 2004 by Christoph Thielecke * + * [email protected] * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ + +//BEGIN INCLUDES +#include "ciscocertificateenrollment.h" + +#include <kmessagebox.h> +#include <klocale.h> +#include <kurlrequester.h> +#include <kpassdlg.h> +#include <kcombobox.h> +#include <kdebug.h> +#include <klineedit.h> +#include <iostream> +#include <qradiobutton.h> +#include <qcursor.h> + +#include "utils.h" +//END INCLUDES + +CiscoCertificateEnrollment::CiscoCertificateEnrollment ( QWidget *, 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; + QWizard::accept(); +} + +void CiscoCertificateEnrollment::canAccept() +{ + + + + QDialog::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(); + QTimer::singleShot ( 2000, EnrollmentProcess, SLOT ( kill() ) ); + + if ( GlobalConfig->KvpncDebugLevel > 2 ) + GlobalConfig->appendLogEntry ( i18n ( "process %1 killed" ).arg ( "cisco_cert_mgr" ), GlobalConfig->debug ); + } + finished = false; + QWizard::reject(); +} + +void CiscoCertificateEnrollment::setupPages() +{ + GlobalConfig->appPointer->setOverrideCursor( QCursor(Qt::WaitCursor) ); + selectionpage = new CiscoCertificateEnrollmentBase ( 0 ); + selectionpage->sizeHint(); + addPage ( selectionpage, "<b>" + i18n ( "Select enrollment type..." ) + "</b>" ); + + connect ( selectionpage->FileEnrollementRadioButton, SIGNAL ( toggled ( bool ) ), this, SLOT ( enrollmentToggled ( bool ) ) ); + connect ( selectionpage->OnlineEnrollementRadioButton, SIGNAL ( toggled ( bool ) ), this, 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); + QStringList 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 ( QStringList::Iterator it = CiscoCaCerts.begin(); it != CiscoCaCerts.end(); ++it ) + { + if ( GlobalConfig->KvpncDebugLevel > 2 ) + std::cout << "insert item (cisco ca certs): " << QString ( *it ) << 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; + QString 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 =QString(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 =QString(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; + QString 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 ( QCursor ( Qt::WaitCursor ) ); + + env = new QStringList(); + *env << "LC_ALL=C" << "LANG=C" << "PATH=/bin:/usr/bin:/usr/sbin:/sbin"; + + EnrollmentProcess = new QProcess ( 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, SIGNAL ( readyReadStdout() ), this, SLOT ( readFromStdout() ) ); + connect ( EnrollmentProcess, SIGNAL ( readyReadStderr() ), this, SLOT ( readFromStderr() ) ); + connect ( EnrollmentProcess, SIGNAL ( processExited()) , this, SLOT(enrollmentProcessFinished())); + +// if ( GlobalConfig->KvpncDebugLevel > 3 ) + { + QString args = ""; + QStringList list = EnrollmentProcess->arguments(); + QStringList::Iterator it2 = list.begin(); + while ( it2 != list.end() ) + { + args += QString ( " " + *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, SIGNAL ( timeout() ), this, 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; + QWizard::next(); + } + else + { + KMessageBox::error ( this, msg ); + } +} + +void CiscoCertificateEnrollment::back() +{ + /* + currentpage=previouspage; + // showPage(previouspage); + + if ( currentpage == page1 ) + { + // nothing here + } + + + */ + QWizard::back(); +} + +void CiscoCertificateEnrollment::showPage ( QWidget* page ) +{ + currentpage = page; + QWizard::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, SIGNAL ( readyReadStdout() ), this, SLOT ( readFromStdout() ) ); + disconnect ( EnrollmentProcess, SIGNAL ( readyReadStderr() ), this, SLOT ( readFromStderr() ) ); + disconnect ( EnrollmentProcess, SIGNAL ( processExited()) , this, 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() +{ + + QString line2 = QString( EnrollmentProcess->readStdout() ); + QStringList lines = QStringList::split( '\n', line2 ); + for ( QStringList::Iterator it = lines.begin(); it != lines.end(); ++it ) +// while ( EnrollmentProcess->canReadLineStdout() ) + { +// QString line = QString ( EnrollmentProcess->readLineStdout() ); + QString 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() +{ + QString line2 = QString( EnrollmentProcess->readStderr() ); + QStringList lines = QStringList::split( '\n', line2 ); + for ( QStringList::Iterator it = lines.begin(); it != lines.end(); ++it ) +// while ( EnrollmentProcess->canReadLineStderr() ) + { +// QString line = QString ( EnrollmentProcess->readLineStderr() ); + QString 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, SIGNAL ( readyReadStdout() ), this, SLOT ( readFromStdout() ) ); + disconnect ( EnrollmentProcess, SIGNAL ( readyReadStderr() ), this, SLOT ( readFromStderr() ) ); + if ( EnrollmentProcess->isRunning() ) + { + EnrollmentProcess->tryTerminate(); + QTimer::singleShot ( 2000, EnrollmentProcess, SLOT ( kill() ) ); + + if ( GlobalConfig->KvpncDebugLevel > 2 ) + GlobalConfig->appendLogEntry ( i18n ( "process %1 killed" ).arg ( "cisco_cert_mgr" ), GlobalConfig->debug ); + } + + QStringList 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 QProcess ( 0 ); + DeleteProcess->addArgument ( GlobalConfig->pathToCiscoCertMgr ); + DeleteProcess->addArgument ( "-E" ); + DeleteProcess->addArgument ( "-op" ); + DeleteProcess->addArgument ( "delete" ); + DeleteProcess->addArgument ( "-ct" ); + DeleteProcess->addArgument ( 0 ); + connect ( DeleteProcess, SIGNAL ( processExited()) , this, SLOT(cancelProcessFinished())); + connect ( DeleteProcess, SIGNAL ( readyReadStdout() ), this, SLOT ( readFromStdout_cancel() ) ); + connect ( DeleteProcess, SIGNAL ( readyReadStderr() ), this, 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, SIGNAL ( processExited()) , this, SLOT(cancelProcessFinished())); + disconnect ( DeleteProcess, SIGNAL ( readyReadStdout() ), this, SLOT ( readFromStdout_cancel() ) ); + disconnect ( DeleteProcess, SIGNAL ( readyReadStderr() ), this, 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() +{ + + QString line = QString( DeleteProcess->readStdout() ); +// while ( DeleteProcess->canReadLineStdout() ) +// { +// QString line = QString ( DeleteProcess->readLineStdout() ); + + if ( GlobalConfig->KvpncDebugLevel > 2 ) + GlobalConfig->appendLogEntry ( "[cisco_cert_mgr raw] "+line,GlobalConfig->debug ); + +// } +} + +void CiscoCertificateEnrollment::readFromStderr_cancel() +{ + QString line = QString ( DeleteProcess->readStderr() ); +// while ( DeleteProcess->canReadLineStderr() ) +// { +// QString line = QString ( DeleteProcess->readLineStderr() ); + if ( GlobalConfig->KvpncDebugLevel > 2 ) + GlobalConfig->appendLogEntry ( "[cisco_cert_mgr err raw] "+line,GlobalConfig->debug ); + +// } + +// sucess=-1; +} + + |