diff options
Diffstat (limited to 'src/klamd.cpp')
-rw-r--r-- | src/klamd.cpp | 960 |
1 files changed, 0 insertions, 960 deletions
diff --git a/src/klamd.cpp b/src/klamd.cpp deleted file mode 100644 index e6d6859..0000000 --- a/src/klamd.cpp +++ /dev/null @@ -1,960 +0,0 @@ -/* - * Copyright (C) 2004 Robert Hogan <robert at roberthogan dot net> - */ - -#include "klamd.h" -#include "klamav.h" -#include "freshklam.h" -#include "klamavconfig.h" -#include "collectiondb.h" - - - -#include <tdelocale.h> -#include <kiconloader.h> -#include <tdeio/netaccess.h> -#include <karrowbutton.h> - - -#include <tdeaction.h> - -#include <tqcheckbox.h> -#include <kbuttonbox.h> -#include <kprocio.h> -#include <kurlrequester.h> -#include <tqlayout.h> -#include <tdemessagebox.h> -#include <tdetempfile.h> -#include <ksystemtray.h> -#include <tqtoolbutton.h> -#include <knotifyclient.h> - - -const char *check_desc1[] = { - "1", - "2", - "3", - "4", - "5", - 0 -}; - -const char *check_desc2[] = { - "On Access", - "On Execute", - 0 -}; - - -Klamd::Klamd(TQWidget *_parent, const char *name) - : TQWidget(_parent, name) -{ - - parent = _parent; - - klamdAlive = FALSE; - - - //Data Directory Widget - - //TQString dt = TQDateTime::currentDateTime().toString(); - //KMessageBox::information (this,dt); - - TQVBoxLayout *vbox = new TQVBoxLayout(this, KDialog::marginHint(), - KDialog::spacingHint(), "vbox"); - - TQGroupBox *group = new TQGroupBox(i18n("Include Directories"), this); - vbox->addWidget(group); - - TQGridLayout *layout = new TQGridLayout( group, 9, 3, KDialog::spacingHint(), - KDialog::spacingHint(), "layout"); - layout->addRowSpacing(0, group->fontMetrics().height()); - layout->setColStretch(0, 1); - layout->setColStretch(1, 1); - - hlp = new TQWidget( group ); - layout->addMultiCellWidget(hlp, 1,1, 0,2); - TQHBoxLayout *dir_layout = new TQHBoxLayout(hlp, KDialog::spacingHint() ); - - KURL root = KURL( "/" ); - m_fileTreeView = new KFileTreeView( hlp ); - m_fileTreeView->addColumn( i18n("Include") ); - treeBranch = m_fileTreeView->addBranch( root, i18n("Root"), SmallIcon("folder_red") ); - m_fileTreeView->setDirOnlyMode( treeBranch, true ); - treeBranch->setShowingDotFiles( true ); - - - treeBranch->setOpen( true ); - - btnup = new KArrowButton(hlp, LeftArrow); - btnup->setFixedSize(20, 20); - connect(btnup, SIGNAL( clicked() ), SLOT( slotDelIncludeDir() )); - - btndown = new KArrowButton(hlp, RightArrow); - btndown->setEnabled(true); - btndown->setFixedSize(20, 20); - connect(btndown,SIGNAL( clicked() ), SLOT( slotAddIncludeDir())); - - - sessionslb = new MyListBox(hlp); - - config = TDEGlobal::config(); - config->setGroup("Klamd"); - includePaths = config->readListEntry("IncludePaths"); - if (!(includePaths.isEmpty())) - btnup->setEnabled(true); - - sessionslb->insertStringList(includePaths); - - - - dir_layout->addWidget(m_fileTreeView); - dir_layout->addWidget(btnup); - dir_layout->addWidget(btndown); - dir_layout->addWidget(sessionslb); - - TQGroupBox *group2 = new TQGroupBox(i18n("Exclude Directories"), this); - vbox->addWidget(group2); - - TQGridLayout *layout2 = new TQGridLayout( group2, 9, 3, KDialog::spacingHint(), - KDialog::spacingHint(), "layout2"); - layout2->addRowSpacing(0, group2->fontMetrics().height()); - layout2->setColStretch(0, 1); - layout2->setColStretch(1, 1); - - - hlp2 = new TQWidget( group2 ); - layout2->addMultiCellWidget(hlp2, 1,1, 0,2); - TQHBoxLayout *dir_layout2 = new TQHBoxLayout(hlp2, KDialog::spacingHint() ); - - KURL root2 = KURL( "/" ); - m_fileTreeView2 = new KFileTreeView( hlp2 ); - m_fileTreeView2->addColumn( i18n("Exclude") ); - treeBranch2 = m_fileTreeView2->addBranch( root2, i18n("Root"), SmallIcon("folder_red") ); - m_fileTreeView2->setDirOnlyMode( treeBranch2, true ); - treeBranch2->setShowingDotFiles( true ); - treeBranch2->setOpen( true ); - - btnup2 = new KArrowButton(hlp2, LeftArrow); - btnup2->setFixedSize(20, 20); - connect(btnup2, SIGNAL( clicked() ), SLOT( slotDelExcludeDir() )); - - btndown2 = new KArrowButton(hlp2, RightArrow); - btndown2->setEnabled(true); - btndown2->setFixedSize(20, 20); - connect(btndown2,SIGNAL( clicked() ), SLOT( slotAddExcludeDir())); - - - sessionslb2 = new MyListBox(hlp2); - //config = TDEGlobal::config(); - config->setGroup("Klamd"); - excludePaths = config->readListEntry("ExcludePaths"); - if (!(excludePaths.isEmpty())) - btnup2->setEnabled(true); - - sessionslb2->insertStringList(excludePaths); - - - - dir_layout2->addWidget(m_fileTreeView2); - dir_layout2->addWidget(btnup2); - dir_layout2->addWidget(btndown2); - dir_layout2->addWidget(sessionslb2); - - TQGroupBox *group3 = new TQGroupBox(i18n("Options"), this); - vbox->addWidget(group3); - - TQGridLayout *layout3 = new TQGridLayout( group3, 9, 10, KDialog::spacingHint(), - KDialog::spacingHint(), "layout3"); - layout3->addRowSpacing(0, group3->fontMetrics().height()); - //layout3->setColStretch(0, 1); - //layout3->setColStretch(1, 1); - - - hlp3 = new TQWidget( group3 ); - layout3->addMultiCellWidget(hlp3, 1,1, 0,10); - TQHBoxLayout *dir_layout3 = new TQHBoxLayout(hlp3, KDialog::spacingHint() ); - - recursive_box = new TQCheckBox(i18n("&Quarantine"), hlp3); - //recursive_box->setMinimumWidth(recursive_box->sizeHint().width()); - - if ((config->readEntry("Quarantine")) == "Yes") - recursive_box->setChecked(true); - - connect( recursive_box, SIGNAL(toggled(bool)), - SLOT(handleChecks()) ); - - //dir_layout3->addSpacing(10); - dir_layout3->addWidget(recursive_box); - - recursive_box1 = new TQCheckBox(i18n("&Display Warnings"), hlp3); - //recursive_box1->setMinimumWidth(recursive_box1->sizeHint().width()); - - if ((config->readEntry("Warn")) == "Yes") - recursive_box1->setChecked(true); - - connect( recursive_box1, SIGNAL(toggled(bool)), - SLOT(handleChecks()) ); - - //dir_layout3->addSpacing(10); - dir_layout3->addWidget(recursive_box1); - - recursive_box2 = new TQCheckBox(i18n("&Run Docked"), hlp3); - //recursive_box2->setMinimumWidth(recursive_box2->sizeHint().width()); - - if ((config->readEntry("Run Docked")) == "Yes") - recursive_box2->setChecked(true); - - connect( recursive_box2, SIGNAL(toggled(bool)), - SLOT(handleChecks()) ); - - dir_layout3->addWidget(recursive_box2); - dir_layout3->addSpacing(40); - - TQLabel *combo_label = new TQLabel(i18n("Max File Size (MBs):"), hlp3); - //combo_label->setFixedSize(combo_label->sizeHint()); - dir_layout3->addWidget(combo_label); - - check_combo = new TQComboBox(false, hlp3); - check_combo->insertStrList(check_desc1); - check_combo->adjustSize(); - //check_combo->setFixedSize(check_combo->size()); - dir_layout3->addWidget(check_combo); - - dir_layout3->addSpacing(20); - - - TQToolButton* adv_options = new TQToolButton( hlp3,"play" ); - adv_options->setIconSet( SmallIconSet( "configure" ) ); - adv_options->setTextLabel("Options"); - adv_options->setTextPosition(TQToolButton::Right); - adv_options->setUsesTextLabel(true); - -// adv_options = new TQPushButton ("Advanced", hlp3); - dir_layout3->addWidget(adv_options); - //adv_options->setFixedSize(adv_options->sizeHint()); - - connect( adv_options, SIGNAL(clicked()), - SLOT(slotAdvOptions()) ); - -/* TQLabel *combo_label2 = new TQLabel(i18n("Scan:"), hlp3); - combo_label2->setFixedSize(combo_label2->sizeHint()); - dir_layout3->addWidget(combo_label2); - - - check_combo2 = new TQComboBox(false, hlp3); - check_combo2->insertStrList(check_desc2); - check_combo2->adjustSize(); - check_combo2->setFixedSize(check_combo2->size()); - dir_layout3->addWidget(check_combo2); - - TQToolTip::add( check_combo2, "'On Access' scans every file accessed. 'On Execute' only scans files/programs that your system tries to execute." );*/ - - KButtonBox *actionbox = new KButtonBox(this, TQt::Horizontal); - vbox->addWidget(actionbox, 2, 0); - actionbox->addStretch(); - search_button = actionbox->addButton(i18n("&Enable Auto-Scan")); - search_button->setDefault(true); - cancel_button = actionbox->addButton(i18n("&Disable Auto-Scan")); - cancel_button->setEnabled(false); - actionbox->addStretch(); - actionbox->layout(); - -/* - connect( search_button, SIGNAL(clicked()), - SLOT(startKlamd()) ); - connect( cancel_button, SIGNAL(clicked()), - SLOT(slotCancel()) ); -*/ - if (TDEApplication::kApplication()->isRestored()) - restoreKlamd(); - -// KStdAction::quit(this, SLOT(hide()), actionCollection()); - -} - -Klamd::~Klamd() -{ - - if (klamdAlive){ - delete childproc; - childproc = 0; - - } - if (!(tempFileName.isEmpty())) - TDEIO::NetAccess::del(tempFileName,NULL); - -} - - -void Klamd::processOutput() -{ - - if(!childproc) - return; - - item2 = ""; - int pos; - if ((pos = (childproc->readln(item2))) != -1) { - //kdDebug() << item2 << endl; - if ((pos = (item2.find(" FOUND"))) != -1){ - item2 = item2.stripWhiteSpace(); - int fnameStartPoint = (item2.find(":") + 1); - int fnameEndPoint = item2.findRev(":"); - TQString tmpFName = item2.mid(fnameStartPoint,(fnameEndPoint - fnameStartPoint)); - TQString tmpVirusName = item2.mid((fnameEndPoint+1),(item2.length() - (fnameEndPoint+1))); - tmpVirusName.replace("FOUND",""); - CollectionDB::instance()->insertEvent("Virus Found",tmpVirusName,tmpFName); - if (recursive_box1->isChecked()) - KNotifyClient::event(tdemain->_tray->winId(),i18n( "ScanCompleteNoVirus" ), i18n( "Virus %1 Found In %2 by Auto-Scan!" ).arg(tmpVirusName).arg(tmpFName)); - if (recursive_box->isChecked()) - Quarantine(tmpFName.stripWhiteSpace(),tmpVirusName.stripWhiteSpace()); - } - if ((pos = (item2.find("ERROR: Clamuko: Can't register with Dazuko"))) != -1){ - finish(); - KMessageBox::information (this,i18n( "Can't Start On-Access Scanning! Check you have read permissions on file /dev/dazuko.") ); - KNotifyClient::event(tdemain->_tray->winId(),i18n( "Can't Start On-Access Scanning!" ), i18n( "Check you have read permissions on file /dev/dazuko." )); - return; - } - - - } - - - childproc->ackRead(); - - item2 = ""; - buf = ""; - - -} - - -bool Klamd::startKlamd() -{ - - config = TDEGlobal::config(); - config->setGroup("Klamd"); - if ((config->readListEntry("IncludePaths")).isEmpty()){ - KMessageBox::information (this,i18n("You haven't specified any paths to scan. Select the directories you want to KlamAV to keep an eye on and try again.")); - return FALSE; - } - - - if (recursive_box2->isChecked()){ - if (!(this->topLevelWidget()->isHidden())) - KMessageBox::information (this,i18n("I'm going into the background now. You can restore me by clicking on the icon in the system tray on the bottom right.")); - this->topLevelWidget()->hide(); - }/*else{ - this->topLevelWidget()->show(); - }*/ - - - if (runDazuko(true)) - return TRUE; - else - return FALSE; - //this->topLevelWidget()->hide(); -} - -void Klamd::finish() -{ - search_button->setEnabled(true); - cancel_button->setEnabled(false); - //config = TDEGlobal::config(); - if (!TDEApplication::kApplication()->closingDown()){ - config->setGroup("Klamd"); - config->writeEntry("Enabled", "No"); - } - tdemain->clamdStopped(); - - buf += '\n'; - if (childproc){ - processOutput(); - childproc->closeAll(); - childproc->kill(9); - delete childproc; - childproc = 0; - } - klamdAlive = FALSE; - enableInputs(); - if (!(tempFileName.isEmpty())) - TDEIO::NetAccess::del(tempFileName,NULL); - - -} - - -void Klamd::slotCancel() -{ - finish(); - - CollectionDB::instance()->insertEvent("Auto-Scan","Scanning Cancelled",""); - -} - - -void Klamd::childExited() -{ -// int status = childproc->exitStatus(); -// -// kdDebug() << "klamd status" << status << endl; - - tdemain->contextDisable(); - - KMessageBox::information (this,i18n( "The auto-scan process died unexpectedly!") ); - - //if (status != 0) - //matches_label->setText(""); - -} - - -void Klamd::receivedOutput(KProcIO *) -{ - //buf += TQCString(buffer, buflen+1); - processOutput(); -} - - -void Klamd::slotClear() -{ - finish(); - -} - - -void Klamd::setDirName(TQString dir){ -// dir_combo->setEditText(dir); - dir_combo->setURL(dir); -} - -void Klamd::slotAddIncludeDir() -{ - - KURL filepattern = m_fileTreeView->currentURL(); - TQString filepa = filepattern.path(); - if(filepa) - if ((includePaths.contains(filepa) == 0) && (excludePaths.contains(filepa) == 0)){ - sessionslb->insertItem(filepa); - - //config = TDEGlobal::config(); - config->setGroup("Klamd"); - - if (includePaths.contains(filepa) == 0) { - includePaths.prepend(filepa); - }else{ - includePaths.remove(filepa); - includePaths.prepend(filepa); - } - config->writeEntry("IncludePaths", includePaths); - config->sync(); - - btnup->setEnabled(true); - } -} - -void Klamd::slotDelIncludeDir() -{ - - - while (includePaths.contains(sessionslb->currentText())) - { - includePaths.remove(sessionslb->currentText()); - } - - sessionslb->removeItem(sessionslb->currentItem()); - - //config = TDEGlobal::config(); - config->setGroup("Klamd"); - config->writeEntry("IncludePaths", includePaths); - config->sync(); - - if ( sessionslb->count() == 0 ) - btnup->setEnabled(false); - - -} - - -void Klamd::slotAddExcludeDir() -{ -//KFileTreeViewItem* treeItem = dynamic_cast<KFileTreeViewItem*>(KFileTreeViewItem::currentKFileTreeViewItem()); - - KURL filepattern = m_fileTreeView2->currentURL(); - TQString filepa = filepattern.path(); - if(filepa) - if ((includePaths.contains(filepa) == 0) && (excludePaths.contains(filepa) == 0)){ - sessionslb2->insertItem(filepa); - - //config = TDEGlobal::config(); - config->setGroup("Klamd"); - - if (excludePaths.contains(filepa) == 0) { - excludePaths.prepend(filepa); - }else{ - excludePaths.remove(filepa); - excludePaths.prepend(filepa); - } - config->writeEntry("ExcludePaths", excludePaths); - config->sync(); - - btnup2->setEnabled(true); - } -} - -void Klamd::slotDelExcludeDir() -{ - - while (excludePaths.contains(sessionslb2->currentText())) - { - excludePaths.remove(sessionslb2->currentText()); - } - - sessionslb2->removeItem(sessionslb2->currentItem()); - - //config = TDEGlobal::config(); - config->setGroup("Klamd"); - config->writeEntry("ExcludePaths", excludePaths); - config->sync(); - - if ( sessionslb2->count() == 0 ) - btnup2->setEnabled(false); - -} - - -void Klamd::writeConf() -{ - KTempFile tf; - if ( tf.status() != 0 ) { - tf.close(); - //delete tf; - KMessageBox::information (this,"KMFilterActionWithCommand: Could not create temp file!"); - return; - } - - - //config = TDEGlobal::config(); - config->setGroup("Kuarantine"); - TQStringList lastQuarLocations = config->readListEntry("KuarantineLocations"); - TQString quarloc; - for (TQStringList::Iterator ita = lastQuarLocations.begin(); ita == lastQuarLocations.begin() ; ita++){ - quarloc = *ita; - } - - TQString db = tdemain->freshklam->getCurrentDBDir(); - - - //tf->setAutoDelete(TRUE); - - tempFileName = tf.name(); - - TQTextStream &ts = *(tf.textStream()); - - - - - for ( TQListBoxItem *bi = sessionslb->firstItem() ; bi != 0; bi = bi->next() ) - ts << "ClamukoIncludePath " << bi->text() << "\n"; - - ts << "ClamukoExcludePath " <<quarloc << "\n"; - - for ( TQListBoxItem *bi = sessionslb2->firstItem() ; bi != 0; bi = bi->next() ) - ts << "ClamukoExcludePath " << bi->text() << "\n"; - - config->setGroup("Klamd"); - - - - if (KlamavConfig::created()){ - ts << "ClamukoScanOnCloseModified" << "\n"; - clamdcommand = "klamd"; - - ts << "TCPSocket 9888 " << "\n"; - ts << "Foreground" << "\n"; - ts << "LogFile /dev/stdout" << "\n"; - ts << "ScanArchive" << "\n"; - ts << "FixStaleSocket" << "\n"; - ts << "SelfCheck 1800" << "\n"; - ts << TQString("DatabaseDirectory %1").arg(db) << "\n"; - ts << "ClamukoScanOnLine" << "\n"; - - if (KlamavConfig::executed()) - ts << "ClamukoScanOnExec " << "\n"; - - }else{ - clamdcommand = "clamd"; - - ts << "TCPSocket 9888 " << "\n"; - ts << "Foreground True" << "\n"; - ts << "LogFile /dev/stdout" << "\n"; - ts << "ScanArchive True" << "\n"; - ts << "FixStaleSocket True" << "\n"; - ts << "SelfCheck 1800" << "\n"; - ts << TQString("DatabaseDirectory %1").arg(db) << "\n"; - ts << "ClamukoScanOnAccess True" << "\n"; - - if (KlamavConfig::executed()) - ts << "ClamukoScanOnExec True" << "\n"; - - if (KlamavConfig::opened()) - ts << "ClamukoScanOnOpen True" << "\n"; - - if (KlamavConfig::closed()) - ts << "ClamukoScanOnClose True" << "\n"; - } - - TQString curtex = check_combo->currentText(); - ts << "ClamukoMaxFileSize " << curtex << "M\n"; - - tf.close(); -} - -void Klamd::Quarantine(TQString fname, TQString virusname){ - - //config = TDEGlobal::config(); - config->setGroup("Kuarantine"); - //object.replace("Clamuko:",""); - //object = object.stripWhiteSpace(); - ////kdDebug() << object << endl; - //TQString QuarLocation = config->readEntry("KuarantineLocations"); - TQStringList lastQuarLocations = config->readListEntry("KuarantineLocations"); - - TQString quarloc; - for (TQStringList::Iterator it = lastQuarLocations.begin(); it == lastQuarLocations.begin() ; it++){ - quarloc = *it; - } - - lastQuarItems = config->readListEntry(TQString("Items %1").arg(quarloc)); - - if (!(fname.isEmpty())){ - TQDate today = TQDate::currentDate(); - TQTime now = TQTime::currentTime(); - TQString suffix = TQString(":%1 %2") - .arg(today.toString("ddd MMMM d yyyy")) - .arg(now.toString("hh-mm-ss ap")); - - TQString object = fname + ": " + virusname + suffix; - TQStringList tokens = TQStringList::split ( "/", fname, FALSE ); - TQString qname = tokens.last(); - qname.prepend("/"); - qname.prepend(quarloc); - qname.append(suffix); - bufmv = ""; - //kdDebug() << fname << endl; - //kdDebug() << qname << endl; - //kdDebug() << object << endl; - if (rename ((const char *)fname, (const char *)qname) != 0){ - TQString suCommand=TQString("mv '%1' '%2'").arg(fname).arg(qname); - //kdDebug() << suCommand << endl; - proc = new KProcIO(); - proc->setUseShell(TRUE); - *proc<<suCommand; - - - connect( proc, SIGNAL(readReady(KProcIO *)), - SLOT(receivedmvOutput(KProcIO *)) ); - - proc->start(KProcIO::NotifyOnExit,TRUE); - // ouch - proc->wait(); - //kdDebug() << "finished " << suCommand << endl; - if (((bufmv.find("Permission denied"))) != -1){ - KMessageBox::information (this,i18n("<p>Don't have permission to move <b>%1</b> to the quarantine folder.</p>").arg(fname)); - }else if (((bufmv.find("No space"))) != -1){ - KMessageBox::information (this,i18n("<p>Don't have enough space to move <b>%1</b> to the quarantine folder.</p>").arg(fname)); - - }else{ - if (recursive_box1->isChecked()) - KMessageBox::queuedMessageBox(0, KMessageBox::Information, i18n("<p>Infected file found: <br><br>Filename: <b>%1</b> <br>Virus found: <b>%2</b> <br><br>I'm going to quarantine this file. You can restore it later if you want.<br></p>").arg(fname).arg(TQString(virusname).replace("FOUND","")), - //i18n( "Infected File Found!" ), - //i18n( "Quarantine" ) - 0); - - if (lastQuarItems.contains(object)) - lastQuarItems.remove(object); - lastQuarItems.prepend(object); - CollectionDB::instance()->insertEvent("Quarantine",virusname,fname); - } - }else{ - //kdDebug() << "rename worked" << endl; - if (recursive_box1->isChecked()) - KMessageBox::queuedMessageBox(0, KMessageBox::Information, i18n("<p>Infected file found: <br><br>Filename: <b>%1</b> <br>Virus found: <b>%2</b> <br><br>I'm going to quarantine this file. You can restore it later if you want.<br> If the file already exists in the quarantine directory it will be overwritten.</p>").arg(fname).arg(TQString(virusname).replace("FOUND","")), - //i18n( "Infected File Found!" ), - //i18n( "Quarantine" ) - 0); - - if (lastQuarItems.contains(object)) - lastQuarItems.remove(object); - lastQuarItems.prepend(object); - CollectionDB::instance()->insertEvent("Quarantine",virusname,fname); - } - } - - config->writeEntry(TQString("Items %1").arg(quarloc), lastQuarItems); - //config->sync(); - - //tdemain->kuarantine->refresh(); - //kdDebug() << "finished klamd quar" << endl; -} - -void Klamd::receivedmvOutput(KProcIO *) -{ - //kdDebug() << "in receivedmvoutput" << endl; - - mvbuffer = ""; - proc->readln(mvbuffer); - bufmv += TQString(mvbuffer); -} - - - -int Klamd::runDazuko(bool caller){ - - - dazukoLoaded = FALSE; - TQString lsmodCommand="lsmod"; - lsmodproc = new KProcIO(); - TQString curpath = (TQString) getenv("PATH"); - lsmodproc->setEnvironment("PATH",curpath + ":/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin"); - - - lsmodproc->setUseShell(TRUE); - *lsmodproc<<lsmodCommand; - - connect( lsmodproc, SIGNAL(readReady(KProcIO *)), - SLOT(checkForDazuko()) ); - if (caller){ - connect( lsmodproc, SIGNAL(processExited(TDEProcess *)), - SLOT(lsmodOutput()) ); - }else{ - connect( lsmodproc, SIGNAL(processExited(TDEProcess *)), - SLOT(lsmodCheck()) ); - } - - - bool succ = lsmodproc->start(KProcIO::NotifyOnExit,TRUE); - - if (!(succ)) - KMessageBox::information (this,i18n( "There was a problem detecting the loaded status of dazuko.") ); - return 1; -} - -void Klamd::lsmodOutput() -{ - if (!(dazukoLoaded)){ - int result; - result = KMessageBox::warningContinueCancel(this, i18n( "I need to load a module called 'dazuko' first. This module will allow KlamAV to gain real-time access to files. If you don't want this message to appear in future, put the following command in your initialization scripts: 'modprobe dazuko.o'. You will next be asked for the root password."), - i18n( "Load Module" ), - i18n( "Load Module" ), - i18n( "Delete2" )); - switch (result) { - case 2 : KMessageBox::information (this,i18n( "Loading of Module Cancelled.") ); break; - case 5 : loadDazuko(); break; - } - - }else{ - loadKlamd(); - } - - -} - -void Klamd::loadKlamd() -{ - writeConf(); - - klamdAlive = TRUE; - - //TQString suCommand=TQString("tdesu -t -c '" +clamdcommand+" -c '%1'").arg(tempFileName)+"'"; - TQString suCommand=TQString(clamdcommand+" -c '%1'").arg(tempFileName); - childproc = new KProcIO(); - childproc->setUseShell(TRUE); - childproc->setUsePty (KProcIO::Stdout,TRUE); - TQString curpath = (TQString) getenv("PATH"); - childproc->setEnvironment("PATH",curpath + ":/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin"); - - kdDebug() << suCommand << endl; - - *childproc<<suCommand; - - connect( childproc, SIGNAL(readReady(KProcIO *)), - SLOT(receivedOutput(KProcIO *)) ); - childproc->start(KProcIO::NotifyOnExit); - connect( childproc, SIGNAL(processExited(TDEProcess *)), - SLOT(childExited()) ); - - search_button->setEnabled(false); - cancel_button->setEnabled(true); - -/* if (tdemain->freshklam->isFreshklamAlive()) - tdemain->_tray->setPixmap(KSystemTray::loadIcon("klamavdl")); - else*/ - tdemain->_tray->setPixmap(KSystemTray::loadIcon("klamav")); - tdemain->EnableKlamd->setEnabled(FALSE); - tdemain->DisableKlamd->setEnabled(TRUE); - //config = TDEGlobal::config(); - config->setGroup("Klamd"); - config->writeEntry("Enabled", "Yes"); - config->sync(); - disableInputs(); - - CollectionDB::instance()->insertEvent("Auto-Scan","Scanning Started",""); - -} -void Klamd::loadDazuko() -{ - -// struct utsname info; -// -// if (uname(&info) == -1) -// { -// kdError(0) << "uname() failed: errno = " << errno << endl; -// return; -// } -// -// TQString release = TQString(info.release); -// -// //kdDebug() << release << endl; -// TQString insmodCommand="insmod /lib/modules/" + release + "/dazuko.o"; - TQString insmodCommand="modprobe dazuko"; - //TQString insmodCommand="insmod /opt/kde/bin/dazuko.o"; - KProcIO *insmodproc = new KProcIO(); - - TQString curpath = (TQString) getenv("PATH"); - insmodproc->setEnvironment("PATH",curpath + ":/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin"); - - insmodproc->setUseShell(TRUE); - *insmodproc<<"tdesu -i klamav"<<"-c"<<insmodCommand; - - connect( insmodproc, SIGNAL(processExited(TDEProcess *)), - SLOT(moduleLoaded()) ); - - insmodproc->start(KProcIO::NotifyOnExit); -} - -void Klamd::moduleLoaded() -{ - runDazuko(false); - -} - -void Klamd::lsmodCheck() -{ - if (!(dazukoLoaded)){ - KMessageBox::information (this,i18n( "Dazuko was not loaded successfully. Please check your installation." )); - }else{ - int result; - result = KMessageBox::warningContinueCancel(this, i18n( "Module has been loaded. Will now continue to start up real-time scanning."), - i18n( "Continue" ), - i18n( "Continue" ), - i18n( "Delete2" )); - switch (result) { - case 2 : break; - case 5 : loadKlamd();break; - } - } - - -} - -void Klamd::checkForDazuko() -{ - TQString item = ""; - int pos; - pos = lsmodproc->readln(item,TRUE); - //KMessageBox::information (this,item); - if (pos != -1) { - //KMessageBox::information (this,item); - if ((pos = (item.find("dazuko"))) != -1){ - //KMessageBox::information (this,"found dazuko"); - dazukoLoaded = TRUE; - lsmodproc->kill(); - } - lsmodproc->ackRead(); - } -} - -void Klamd::restoreKlamd(){ - - config = TDEGlobal::config(); - config->setGroup("Klamd"); - TQString RunKlamd = config->readEntry("Enabled"); - - if (RunKlamd == "Yes"){ - startKlamd(); - } - -} - -void Klamd::handleChecks(){ - - //config = TDEGlobal::config(); - config->setGroup("Klamd"); - if (recursive_box->isChecked()) - config->writeEntry("Quarantine","Yes"); - else - config->writeEntry("Quarantine","No"); - - if (recursive_box1->isChecked()) - config->writeEntry("Warn","Yes"); - else - config->writeEntry("Warn","No"); - - if (recursive_box2->isChecked()) - config->writeEntry("Run Docked","Yes"); - else - config->writeEntry("Run Docked","No"); - - config->sync(); - -} - -bool Klamd::isKlamdAlive(){ - if (klamdAlive) - return true; - return false; - -} - -TQString Klamd::getKlamdConfFile(){ - return tempFileName; - -} - -void Klamd::slotAdvOptions(){ - -/* config = TDEGlobal::config(); - config->setGroup("Klamd"); - TQString RunKlamd = config->readEntry("Enabled"); - - KlamdOptions *dialog = new KlamdOptions( this, "settings"); - -// connect( dialog, SIGNAL(settingsChanged()), SLOT(applySettings()) ); - - - dialog->show(); - dialog->raise(); - dialog->setActiveWindow();*/ - - tdemain->slotConfigKlamav( "Auto-Scan" ); - -} - -void Klamd::disableInputs(){ - - hlp->setEnabled(false); - hlp2->setEnabled(false); - hlp3->setEnabled(false); -} - -void Klamd::enableInputs(){ - - hlp->setEnabled(true); - hlp2->setEnabled(true); - hlp3->setEnabled(true); - -} - -#include "klamd.moc" |