diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index c6c8a91..2edf96b 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -40,7 +40,7 @@ tde_add_executable( ${PROJECT_NAME} AUTOMOC activityviewer.cpp collectiondb.cpp configdialog.cpp klamavconfig.kcfgc archivelimits.ui archivetypes.ui specialfiletypes.ui - firstrunwizard.ui logoptions.ui + firstrunwizard.ui logoptions.ui backend.ui k3bjobprogressosd_mod.cpp LINK diff --git a/src/backend.ui b/src/backend.ui new file mode 100644 index 0000000..bec4513 --- /dev/null +++ b/src/backend.ui @@ -0,0 +1,93 @@ + +KlamBackend + + + KlamBackend + + + + 0 + 0 + 600 + 480 + + + + Scanning Backend + + + + unnamed + + + + backendConfig + + + Scanning Backend + + + + unnamed + + + + kcfg_ScannerClamscan + + + Standalone scanner + + + false + + + + + kcfg_ClamdMultiscan + + + Force Multiscan mode + + + true + + + + + kcfg_ScannerClamdscan + + + ClamAV daemon + + + true + + + + + + + backendHelpMessage + + + RichText + + + Here you can choose the backend you'd like to use with KlamAV. +<p><b>Standalone scanner</b> uses the 'clamscan' command to perform a scan. This backend is configurable via KlamAV, but takes longer to start. This backend is also the easiest to set up, as it does not require running a system-wide daemon.</p> +<p><b>ClamAV daemon</b> uses the 'clamdscan' command to perform a scan. This backend depends on a running instance of the <i>clamd</i> daemon and depends on the options of the daemon. This backend starts up faster and also makes use of the Multiscan feature.</p + + + + + + slotToggleClamdcan(bool) + + + init() + + + + ktextbrowser.h + + diff --git a/src/configdialog.cpp b/src/configdialog.cpp index d59d52d..94466db 100644 --- a/src/configdialog.cpp +++ b/src/configdialog.cpp @@ -14,6 +14,7 @@ email : markey@web.de ***************************************************************************/ #include "configdialog.h" +#include "backend.h" #include "archivelimits.h" #include "archivetypes.h" #include "specialfiletypes.h" @@ -30,6 +31,7 @@ email : markey@web.de #include #include #include +#include #include #include #include @@ -52,6 +54,7 @@ KlamavConfigDialog::KlamavConfigDialog( TQWidget *parent, const char* name, TDEC setWFlags( WDestructiveClose ); // IMPORTANT Don't simply change the page names, they are used as identifiers in other parts of the app. + m_klambackend = new KlamBackend( 0, "Scanning Backend" ); m_archivelimits = new ArchiveLimits( 0, "Archive Limits" ); m_archivetypes = new ArchiveTypes( 0, "Archive Types" ); m_emailprotection = new Sigtool ( 0, "E-mail protection" ); @@ -60,6 +63,10 @@ KlamavConfigDialog::KlamavConfigDialog( TQWidget *parent, const char* name, TDEC m_logoptions = new LogOptions( 0, "Event Logging" ); // add pages + addPage( m_klambackend, i18n( "Backend" ), "system-run", i18n( "Configure Scanning Backend" ) ); + connect( m_klambackend->kcfg_ScannerClamdscan, SIGNAL(toggled(bool)), this, SLOT(slotToggleClamdscan(bool)) ); + slotToggleClamdscan( m_klambackend->kcfg_ScannerClamdscan->isOn() ); // initial state + addPage( m_archivelimits, i18n( "Archive Limits" ), "ark", i18n( "Configure Archive Limits" ) ); addPage( m_archivetypes, i18n( "Archive Types" ), "application-x-tarz", i18n( "Configure Archive Types" ) ); addPage( m_emailprotection, i18n( "E-mail protection" ), "email", i18n( "Set up your e-mail client to use Klammail" ) ); @@ -85,7 +92,13 @@ KlamavConfigDialog::~KlamavConfigDialog() { } - +void KlamavConfigDialog::slotToggleClamdscan(bool on) +{ + m_klambackend->kcfg_ClamdMultiscan->setEnabled(on); + m_archivelimits->setEnabled(!on); + m_archivetypes->setEnabled(!on); + m_specialfiletypes->setEnabled(!on); +} /** Show page by object name */ void KlamavConfigDialog::showPage( const TQCString& page ) diff --git a/src/configdialog.h b/src/configdialog.h index 3100f20..8bb26af 100644 --- a/src/configdialog.h +++ b/src/configdialog.h @@ -40,10 +40,13 @@ class KlamavConfigDialog : public TDEConfigDialog void showPage( const TQCString& page ); + public slots: + void slotToggleClamdscan( bool on ); private: + bool clamdscan; - + class KlamBackend *m_klambackend; class ArchiveLimits *m_archivelimits; class ArchiveTypes *m_archivetypes; class SpecialFileTypes *m_specialfiletypes; diff --git a/src/klamav.cpp b/src/klamav.cpp index bf61432..dbe311c 100644 --- a/src/klamav.cpp +++ b/src/klamav.cpp @@ -284,7 +284,7 @@ void Klamav::slotScheduleScan() { klamscan->slotSchedule(); } void Klamav::slotOptions() { - slotConfigKlamav("Archive Limits"); + slotConfigKlamav("Scanning Backend"); } void Klamav::slotToggleWelcome() { diff --git a/src/klamavconfig.kcfg b/src/klamavconfig.kcfg index 420beeb..017730f 100644 --- a/src/klamavconfig.kcfg +++ b/src/klamavconfig.kcfg @@ -3,6 +3,24 @@ + + + + Use KlamAV without the ClamAV daemon. + true + + + + Use KlamAV with the ClamAV daemon. + false + + + + Force clamdscan to use multiscan mode (scan multiple directories at once in separate threads). May lower scanning time. + true + + + diff --git a/src/klamscan.cpp b/src/klamscan.cpp index 784398f..2a945e3 100644 --- a/src/klamscan.cpp +++ b/src/klamscan.cpp @@ -295,7 +295,7 @@ void Klamscan::slotAdvOptions(){ dialog->raise(); dialog->setActiveWindow();*/ - tdemain->slotConfigKlamav( "Archive Limits" ); + tdemain->slotConfigKlamav( "Scanning Backend" ); } diff --git a/src/scanviewer.cpp b/src/scanviewer.cpp index d61f4a4..0e5e702 100644 --- a/src/scanviewer.cpp +++ b/src/scanviewer.cpp @@ -39,9 +39,9 @@ ScanViewer::ScanViewer(TQWidget *parent, const char *name) : TQWidget(parent, name) { - scanInProgress = TRUE; - multiScan = FALSE; - + scanInProgress = TRUE; + multiScan = FALSE; + //TQGridLayout *layout = new TQGridLayout(this, 6, 3, 10, 4); layout = new TQGridLayout(this, 6, 3, 10, 4); layout->setColStretch(0, 10); @@ -53,9 +53,9 @@ ScanViewer::ScanViewer(TQWidget *parent, const char *name) layout->setRowStretch(2, 10); layout->addRowSpacing(4, 10); layout->setRowStretch(4, 0); - - - + + + resultview = new TQListView(this); resultview->setShowSortIndicator(true); @@ -77,24 +77,24 @@ ScanViewer::ScanViewer(TQWidget *parent, const char *name) menu = new TQPopupMenu( resultview ); - connect(resultview, SIGNAL( contextMenuRequested( TQListViewItem *, const TQPoint& , int ) ), + connect(resultview, SIGNAL( contextMenuRequested( TQListViewItem *, const TQPoint& , int ) ), this, SLOT( slotRMB( TQListViewItem *, const TQPoint &, int ) ) ); - + status_frame = new TQFrame(this); status_frame->setFrameStyle(TQFrame::Panel | TQFrame::Sunken); TQBoxLayout *status_layout = new TQHBoxLayout(status_frame, 2); - + status_label = new TQLabel("", status_frame); status_layout->addWidget(status_label, 10); - + //matches_label = new TQLabel(status_frame); //TQFontMetrics ml_fm(matches_label->fontMetrics()); //matches_label->setFixedWidth(ml_fm.width(i18n("9999 viruses/errors found"))); //matches_label->setFixedHeight(ml_fm.lineSpacing()); //status_layout->addWidget(matches_label, 0); - - + + status_layout->activate(); status_frame->adjustSize(); status_frame->setMinimumSize(status_frame->size()); @@ -103,7 +103,7 @@ ScanViewer::ScanViewer(TQWidget *parent, const char *name) status2_frame = new TQFrame(this); status2_frame->setFrameStyle(TQFrame::Panel | TQFrame::Sunken); status2_layout = new TQHBoxLayout(status2_frame, 2); - + status2_label = new TQLabel(i18n("Files scanned: 0"), status2_frame); status2_layout->addWidget(status2_label, 10); status2_label->hide(); @@ -135,7 +135,7 @@ ScanViewer::ScanViewer(TQWidget *parent, const char *name) matches2_label->setFixedWidth(ml_fm2.width(i18n("9999 viruses/problems found"))); matches2_label->setFixedHeight(ml_fm2.lineSpacing()); status2_layout->addWidget(matches2_label, 0); - + TQToolTip::add(matches2_label, i18n("cf. 'Flanderseses' - Homer Simpson. This childish joke will be removed when KlamAV is more mature.")); status2_layout->activate(); @@ -144,7 +144,7 @@ ScanViewer::ScanViewer(TQWidget *parent, const char *name) layout->addMultiCellWidget(status2_frame, 4, 4, 0, 2); - + layout->activate(); @@ -209,7 +209,7 @@ void ScanViewer::processOutput() filesscanned++; if (!(showProgress)) status2_label->setText(i18n("Files scanned: %1").arg(filesscanned)); - + //}else if ((pos = buf.section('\n',j,j).find("ERROR:")) != -1){ }else if ((pos = (item2.find("ERROR:"))) != -1){ TQString tmpVirusName = item2.mid((fnameEndPoint+1),(item2.length() - (fnameEndPoint+1))); @@ -241,7 +241,7 @@ void ScanViewer::processOutput() "- Access Denied!").arg(tmpFName)); CollectionDB::instance()->insertEvent("Error Found","Access Denied",tmpFName); //}else if ((pos = buf.section('\n',j,j).find(": Can't open")) != -1){ - + }else if ((pos = (item2.find(": Can't open"))) != -1){ //status2_label->setText(i18n("Files scanned: %1").arg(++filesscanned)); filesscanned++; @@ -280,9 +280,9 @@ void ScanViewer::processOutput() void ScanViewer::slotScan(const TQStringList & filepattern, int mode, bool recursive, bool dcopscan) { - //KMessageBox::information (this, filepattern); + //KMessageBox::information (this, filepattern); TDECmdLineArgs *args = TDECmdLineArgs::parsedArgs(); - + if(( args->isSet( "scanthis" ) ) || (dcopscan)) { calculateTime = FALSE; showProgress = FALSE; @@ -341,13 +341,16 @@ void ScanViewer::slotScan(const TQStringList & filepattern, int mode, bool recur //kdDebug() << filepattern << endl; prog->setTotalSteps(cnt); - kdDebug() << "COUNT" << cnt << endl; + kdDebug() << "COUNT" << cnt << endl; config = TDEGlobal::config(); + config->setGroup("KlamavBackend"); + clamdscan = config->readBoolEntry("ScannerClamdscan", false); + slotClear(); QuarantineList.clear(); - + errorsEncountered = FALSE; filesscanned = 0; //status2_label->setText(i18n("Scan in Progress...")); @@ -363,17 +366,17 @@ void ScanViewer::slotScan(const TQStringList & filepattern, int mode, bool recur db = *ita; } } - - ////kdDebug() << "here 2" << endl; + + ////kdDebug() << "here 2" << endl; TQString dbpath; TQString excludes; - TQString options; - + TQString options; // can not be used for clamdscan + if (!(db.isEmpty())) dbpath = TQString(" -d %1 ").arg(db); config->setGroup("Klamscan"); - + if (config->readEntry("ExcludeQuarantine") == "Yes"){ config->setGroup("Kuarantine"); TQStringList lastQuarLocations = config->readListEntry("KuarantineLocations"); @@ -384,7 +387,7 @@ void ScanViewer::slotScan(const TQStringList & filepattern, int mode, bool recur excludes += TQString(" --exclude=%1 ").arg(quarloc); } - + //if ((recursive_box->isChecked() && !(multiScan)) || (multi_recursive && multiScan)) if (recursive) options += " -r "; @@ -397,7 +400,7 @@ void ScanViewer::slotScan(const TQStringList & filepattern, int mode, bool recur // if (KlamavConfig::mBsToExtract() > 0) // options += "--max-space=" + TQString("%1").arg(KlamavConfig::mBsToExtract()) + " "; -// +// // if (KlamavConfig::compressionRatio() > 0) // options += "--max-ratio=" + TQString("%1").arg(KlamavConfig::compressionRatio()) + " "; @@ -410,7 +413,7 @@ void ScanViewer::slotScan(const TQStringList & filepattern, int mode, bool recur if (KlamavConfig::maxScanSize() > 0) options += "--max-scansize=" + TQString("%1").arg(KlamavConfig::maxScanSize()) + "M "; - + //config->setGroup("Klamscan"); // if (KlamavConfig::virusLimitsExceeded()) // options += "--block-max "; @@ -423,7 +426,7 @@ void ScanViewer::slotScan(const TQStringList & filepattern, int mode, bool recur if (!(KlamavConfig::scanHTML())) options += "--no-html "; - + if (!(KlamavConfig::scanPE())) options += "--no-pe "; @@ -449,7 +452,7 @@ void ScanViewer::slotScan(const TQStringList & filepattern, int mode, bool recur else options+=" "; } - + if (KlamavConfig::scanArj()){ options += "--arj"; if ((KlamavConfig::arjUsing()) != "") @@ -465,7 +468,7 @@ void ScanViewer::slotScan(const TQStringList & filepattern, int mode, bool recur else options+=" "; } - + if (KlamavConfig::scanLzh()){ options += "--lha"; if ((KlamavConfig::lzhUsing()) != "") @@ -506,21 +509,59 @@ void ScanViewer::slotScan(const TQStringList & filepattern, int mode, bool recur options+=" "; } - kdDebug() << "clamscan -v " - << excludes << " " - << dbpath << " " - << options << " " - << "'" + m_filepattern.join("' '") + "'" << endl; + if(clamdscan) { + // make sure that clamd is running + FILE* clamdpid; + if( clamdpid = fopen("/run/clamav/clamd.pid","r") ) + fclose(clamdpid); // it's ok + else { + int choice = KMessageBox::warningYesNoCancel( + this, + i18n("The ClamAV daemon does not seem to be running on this system. Do you really want to continue with this scan or would you like to launch a standalone scan instead?'"), + i18n("Clamd not running"), + i18n("Continue this scan"), + i18n("Launch standalone scan"), + i18n("Do not ask me again") + ); + + switch(choice) { + case 2: // cancel + return; + break; + case 4: // launch standalone scan + clamdscan = false; + break; + } + } + } childproc = new KProcIO(); childproc->setUseShell(TRUE); childproc->setUsePty (KProcIO::Stdout,TRUE); - *childproc << "clamscan -v "; - *childproc << excludes << " "; - *childproc << dbpath << " "; - *childproc << options << " "; - + if(clamdscan) { + config->setGroup("KlamavBackend"); + TQString multiscanOption = config->readBoolEntry("ClamdMultiscan", true) ? " -m " : ""; + + kdDebug() << "clamdscan -v " + << multiscanOption + << "'" + m_filepattern.join("' '") + "'" << endl; + + *childproc << "clamdscan -v "; + *childproc << multiscanOption; + } else { + kdDebug() << "clamscan -v " + << excludes << " " + << dbpath << " " + << options << " " + << "'" + m_filepattern.join("' '") + "'" << endl; + + *childproc << "clamscan -v "; + *childproc << excludes << " "; + *childproc << dbpath << " "; + *childproc << options << " "; + } + *childproc << "'" + m_filepattern.join("' '") + "'"; @@ -601,7 +642,7 @@ void ScanViewer::childExited() int status = childproc->exitStatus(); int result; - + status2_label->setText( i18n("Scan Complete") ); CollectionDB::instance()->insertEvent("Manual Scan",TQString("Scan Complete"),m_filepattern.join(" ")); @@ -743,7 +784,7 @@ void ScanViewer::Quarantine(){ KMessageBox::information (this,i18n("

There was a problem quarantining %1. Check your diskspace, the permissions on your quarantine location and whether a file with the same name already exists in the quarantine.

").arg(fname)); } - + } } if (allQuarantined) @@ -752,7 +793,7 @@ void ScanViewer::Quarantine(){ tdemain->_tray->setPixmap(KSystemTray::loadIcon("klamav_scan_found")); config->writeEntry(TQString("Items %1").arg(quarloc), lastQuarItems); config->sync(); - + //tdemain->kuarantine->refresh(); @@ -807,7 +848,7 @@ void ScanViewer::slotQuarantineSelected() TQPtrList list; TQListViewItemIterator it( resultview, TQListViewItemIterator::Selected ); - + QuarantineList = ""; while ( it.current() ) { TQListViewItem* tItem = it.current(); @@ -844,7 +885,7 @@ void ScanViewer::slotStartAgain() calculateTime = TRUE; emit scanStartingAgain(this); slotScan(m_filepattern, m_mode, m_recursive,false); - + } @@ -865,22 +906,22 @@ void ScanViewer::slotCancelScanTime() // void ScanViewer::startProgress() // { -// +// // cnt = 0; // //kdDebug() << "m_filepattern" << m_filepattern << endl; // TQDir d( m_filepattern ); // // int num = countFiles(d); // // if (countFiles(d) > 0) // // //kdDebug() << "count" << num << endl; -// +// // progress = new KProgressDialog (this, "progress", i18n( "Loading .." ), i18n( "Loading..." ), true); // progress->setAllowCancel(false); // prog = progress->progressBar(); // progress->setLabel(i18n( "Loading lots and lots and lots of virus information" )); // //int cnt = countFiles(d); // prog->setTotalSteps(countFiles(d)); -// //kdDebug() << "COUNT" << countFiles(d) << endl; -// +// //kdDebug() << "COUNT" << countFiles(d) << endl; +// // } int ScanViewer::countFiles( TQDir & root) @@ -894,15 +935,15 @@ int ScanViewer::countFiles( TQDir & root) } TQStringList entries = root.entryList( TQDir::Dirs | TQDir::Files | TQDir::Hidden); - - ////kdDebug() << "count" << counter << endl; + + ////kdDebug() << "count" << counter << endl; for (TQStringList::size_type j = 0; j < entries.size(); j++ ) { TQString entry = entries[j]; if( entry == "." || entry == "..") continue; - + TQFileInfo fi(root, entry ); entry = fi.absFilePath(); @@ -980,7 +1021,7 @@ void ScanViewer::slotOnItem( TQListViewItem * lineitem) status_label->setText( message); - + } void ScanViewer::slotOffItem( ) diff --git a/src/scanviewer.h b/src/scanviewer.h index fa85e6b..3114960 100644 --- a/src/scanviewer.h +++ b/src/scanviewer.h @@ -59,7 +59,7 @@ public: /** * Use this method to load whatever file/URL you have */ - + //void setDirName(TQString); void slotScan(const TQStringList & filepattern, int mode, bool recursive, bool dcopscan); void slotCancel(); @@ -128,6 +128,7 @@ private: void Quarantine(); void askUser(); int countFiles( TQDir & root); + TQString scanner; //void ScanViewer::startProgress(); TQLineEdit *template_edit; TQComboBox *files_combo, *pattern_combo, *check_combo; @@ -173,6 +174,7 @@ private: bool calculateTime; bool showProgress; TQFrame *status_frame; + bool clamdscan; }; #endif // _SCANVIEWER_H_ diff --git a/translations/messages/klamav.pot b/translations/messages/klamav.pot index 5e969d9..1ee945f 100644 --- a/translations/messages/klamav.pot +++ b/translations/messages/klamav.pot @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2021-01-30 18:34+0200\n" +"POT-Creation-Date: 2021-02-05 22:20+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -49,46 +49,54 @@ msgstr "" msgid "Multiple Directories Selected" msgstr "" +#: configdialog.cpp:66 +msgid "Backend" +msgstr "" + +#: configdialog.cpp:66 +msgid "Configure Scanning Backend" +msgstr "" + #: archivelimits.ui:16 archivelimits.ui:38 -#: archivetypes.ui:16 configdialog.cpp:63 +#: archivetypes.ui:16 configdialog.cpp:70 #, no-c-format msgid "Archive Limits" msgstr "" -#: configdialog.cpp:63 +#: configdialog.cpp:70 msgid "Configure Archive Limits" msgstr "" -#: archivetypes.ui:27 configdialog.cpp:64 klamscanoptions.cpp:201 +#: archivetypes.ui:27 configdialog.cpp:71 klamscanoptions.cpp:201 #, no-c-format msgid "Archive Types" msgstr "" -#: configdialog.cpp:64 +#: configdialog.cpp:71 msgid "Configure Archive Types" msgstr "" -#: configdialog.cpp:65 +#: configdialog.cpp:72 msgid "E-mail protection" msgstr "" -#: configdialog.cpp:65 +#: configdialog.cpp:72 msgid "Set up your e-mail client to use Klammail" msgstr "" -#: configdialog.cpp:66 +#: configdialog.cpp:73 msgid "File Types" msgstr "" -#: configdialog.cpp:66 +#: configdialog.cpp:73 msgid "Configure File Types" msgstr "" -#: configdialog.cpp:68 +#: configdialog.cpp:75 msgid "Event Logging" msgstr "" -#: configdialog.cpp:68 +#: configdialog.cpp:75 msgid "Configure Events to Log" msgstr "" @@ -539,7 +547,7 @@ msgstr "" msgid "Update Process Died Unexpectedly!" msgstr "" -#: freshklam.cpp:491 scanviewer.cpp:633 +#: freshklam.cpp:491 scanviewer.cpp:674 msgid "Unknown option passed." msgstr "" @@ -720,7 +728,7 @@ msgstr "" msgid "Welcome" msgstr "" -#: klamav.cpp:214 scanviewer.cpp:621 +#: klamav.cpp:214 scanviewer.cpp:662 msgid "Quarantine" msgstr "" @@ -958,11 +966,11 @@ msgid "" "your self." msgstr "" -#: kuarantine.cpp:640 kuarantine.cpp:646 scanviewer.cpp:798 +#: kuarantine.cpp:640 kuarantine.cpp:646 scanviewer.cpp:839 msgid "Search for %1 with Trend Micro" msgstr "" -#: kuarantine.cpp:641 kuarantine.cpp:647 scanviewer.cpp:800 +#: kuarantine.cpp:641 kuarantine.cpp:647 scanviewer.cpp:841 msgid "Search for %1 with Google" msgstr "" @@ -1025,7 +1033,7 @@ msgid "" msgstr "" #: scanviewer.cpp:211 scanviewer.cpp:224 scanviewer.cpp:233 scanviewer.cpp:239 -#: scanviewer.cpp:249 scanviewer.cpp:257 scanviewer.cpp:668 +#: scanviewer.cpp:249 scanviewer.cpp:257 scanviewer.cpp:709 #, c-format msgid "Files scanned: %1" msgstr "" @@ -1042,154 +1050,177 @@ msgstr "" msgid "Files scanned:" msgstr "" -#: scanviewer.cpp:563 +#: scanviewer.cpp:520 +msgid "" +"The ClamAV daemon does not seem to be running on this system. Do you really " +"want to continue with this scan or would you like to launch a standalone " +"scan instead?'" +msgstr "" + +#: scanviewer.cpp:521 +msgid "Clamd not running" +msgstr "" + +#: scanviewer.cpp:522 +msgid "Continue this scan" +msgstr "" + +#: scanviewer.cpp:523 +msgid "Launch standalone scan" +msgstr "" + +#: scanviewer.cpp:524 +msgid "Do not ask me again" +msgstr "" + +#: scanviewer.cpp:604 msgid "" "If viruses were found, you can right-click to quarantine selected files." msgstr "" -#: scanviewer.cpp:588 +#: scanviewer.cpp:629 msgid "Cancelled" msgstr "" -#: scanviewer.cpp:605 +#: scanviewer.cpp:646 msgid "Scan Complete" msgstr "" -#: scanviewer.cpp:612 +#: scanviewer.cpp:653 msgid "Scan Complete - No Viruses Found!" msgstr "" -#: scanviewer.cpp:614 +#: scanviewer.cpp:655 msgid "Scan Complete - No Viruses Found But Some Errors Encountered!" msgstr "" -#: scanviewer.cpp:621 +#: scanviewer.cpp:662 msgid "" "I'm going to quarantine this lot, you can restore them later if you want. If " "you don't want to quarantine, just press cancel." msgstr "" -#: scanviewer.cpp:621 +#: scanviewer.cpp:662 msgid "Quarantine Infected Files" msgstr "" -#: scanviewer.cpp:631 +#: scanviewer.cpp:672 msgid "Scan Complete - Viruses Found!" msgstr "" -#: scanviewer.cpp:635 +#: scanviewer.cpp:676 msgid "Database initialization error." msgstr "" -#: scanviewer.cpp:637 +#: scanviewer.cpp:678 msgid "Not supported file type." msgstr "" -#: scanviewer.cpp:639 +#: scanviewer.cpp:680 msgid "Can't open directory." msgstr "" -#: scanviewer.cpp:641 +#: scanviewer.cpp:682 msgid "Can't open file. (ofm)" msgstr "" -#: scanviewer.cpp:643 +#: scanviewer.cpp:684 msgid "Error reading file. (ofm)" msgstr "" -#: scanviewer.cpp:645 +#: scanviewer.cpp:686 msgid "Can't stat input file / directory." msgstr "" -#: scanviewer.cpp:647 +#: scanviewer.cpp:688 msgid "Can't get absolute path name of current working directory." msgstr "" -#: scanviewer.cpp:649 +#: scanviewer.cpp:690 msgid "I/O error, please check your filesystem." msgstr "" -#: scanviewer.cpp:651 +#: scanviewer.cpp:692 msgid "Can't get information about current user from /etc/passwd." msgstr "" -#: scanviewer.cpp:653 +#: scanviewer.cpp:694 msgid "" "Can't get information about user 'clamav' (default name) from /etc/passwd." msgstr "" -#: scanviewer.cpp:655 +#: scanviewer.cpp:696 msgid "Can't fork." msgstr "" -#: scanviewer.cpp:657 +#: scanviewer.cpp:698 msgid "Can't create temporary files/directories (check permissions)." msgstr "" -#: scanviewer.cpp:659 +#: scanviewer.cpp:700 msgid "Can't write to temporary directory (please specify another one)." msgstr "" -#: scanviewer.cpp:661 +#: scanviewer.cpp:702 msgid "Can't allocate and clear memory (calloc)." msgstr "" -#: scanviewer.cpp:663 +#: scanviewer.cpp:704 msgid "Can't allocate memory (malloc)." msgstr "" -#: scanviewer.cpp:665 +#: scanviewer.cpp:706 msgid "Unspecified Error!" msgstr "" -#: scanviewer.cpp:693 +#: scanviewer.cpp:734 msgid "0 viruses/problems found" msgstr "" -#: scanviewer.cpp:743 +#: scanviewer.cpp:784 msgid "" "

There was a problem quarantining %1. Check your diskspace, the " "permissions on your quarantine location and whether a file with the same " "name already exists in the quarantine.

" msgstr "" -#: scanviewer.cpp:930 +#: scanviewer.cpp:971 msgid "Please Wait" msgstr "" -#: scanviewer.cpp:967 +#: scanviewer.cpp:1008 msgid "Attempts to scan " msgstr "" -#: scanviewer.cpp:967 +#: scanviewer.cpp:1008 msgid " resulted in exceeding a limit you set in 'Archive Limits'." msgstr "" -#: scanviewer.cpp:969 +#: scanviewer.cpp:1010 msgid " contains the ClamAV test signature. It's not a virus." msgstr "" -#: scanviewer.cpp:971 +#: scanviewer.cpp:1012 msgid " is a damaged exectuable. Some viruses use this to conceal themselves." msgstr "" -#: scanviewer.cpp:973 +#: scanviewer.cpp:1014 msgid " has a form of zip compression sometimes used by viruses." msgstr "" -#: scanviewer.cpp:975 +#: scanviewer.cpp:1016 msgid " is an encrypted zip file." msgstr "" -#: scanviewer.cpp:977 +#: scanviewer.cpp:1018 msgid " is an encrypted RAR file." msgstr "" -#: scanviewer.cpp:979 +#: scanviewer.cpp:1020 msgid " is mis-formatted in a way sometimes used by viruses." msgstr "" -#: scanviewer.cpp:990 +#: scanviewer.cpp:1031 msgid "" "Hover over each entry for more info. Right-click on entries for more options." msgstr "" @@ -1280,23 +1311,23 @@ msgstr "" msgid "Once only" msgstr "" -#: sigtool.cpp:33 +#: sigtool.cpp:34 msgid "Email Client" msgstr "" -#: sigtool.cpp:49 +#: sigtool.cpp:50 msgid "Choose your email client:" msgstr "" -#: sigtool.cpp:65 +#: sigtool.cpp:66 msgid "Configure Automatically" msgstr "" -#: sigtool.cpp:69 +#: sigtool.cpp:70 msgid "Tell me how to do it" msgstr "" -#: sigtool.cpp:84 +#: sigtool.cpp:85 msgid "" "This will help you configure your email client to scan incoming and outgoing " "mail with KlamAV. Not all mail clients are fully supported yet. Infected " @@ -1304,27 +1335,27 @@ msgid "" "telling you the name of the virus and other relevant details." msgstr "" -#: sigtool.cpp:86 +#: sigtool.cpp:87 msgid "Notes" msgstr "" -#: sigtool.cpp:130 +#: sigtool.cpp:131 msgid "Please ensure KMail is not open before we proceed." msgstr "" -#: sigtool.cpp:152 +#: sigtool.cpp:153 msgid "" "You're already set up! Sure you haven't already configured KMail for KlamAV " "scanning?" msgstr "" -#: sigtool.cpp:200 +#: sigtool.cpp:201 msgid "" "I've set up the filters as the last two in your KMail filter list. You might " "want to open Kmail up and take a look." msgstr "" -#: sigtool.cpp:206 +#: sigtool.cpp:207 msgid "" "Mail scanning support is provided by a program called 'klammail'. This was " "installed automatically as part of the KlamAV installation. To use this " @@ -1336,7 +1367,7 @@ msgid "" "the virus and who the mail is from." msgstr "" -#: sigtool.cpp:215 +#: sigtool.cpp:216 msgid "" "Mail scanning support is provided by a program called 'klammail'. This was " "installed automatically as part of the KlamAV installation. To use this " @@ -1409,13 +1440,13 @@ msgstr "" msgid "Maximum MBs of Files to Scan" msgstr "" -#: archivelimits.ui:84 klamavconfig.kcfg:23 +#: archivelimits.ui:84 klamavconfig.kcfg:41 #, no-c-format msgid "Maximum Number of Files to Extract" msgstr "" -#: archivelimits.ui:114 klamavconfig.kcfg:13 -#: klamavconfig.kcfg:18 +#: archivelimits.ui:114 klamavconfig.kcfg:31 +#: klamavconfig.kcfg:36 #, no-c-format msgid "Maximum MBs to Extract" msgstr "" @@ -1520,6 +1551,40 @@ msgstr "" msgid "Alt+W" msgstr "" +#: backend.ui:16 backend.ui:27 +#, no-c-format +msgid "Scanning Backend" +msgstr "" + +#: backend.ui:38 klamavconfig.kcfg:8 +#, no-c-format +msgid "Standalone scanner" +msgstr "" + +#: backend.ui:49 klamavconfig.kcfg:18 +#, no-c-format +msgid "Force Multiscan mode" +msgstr "" + +#: backend.ui:60 klamavconfig.kcfg:13 +#, no-c-format +msgid "ClamAV daemon" +msgstr "" + +#: backend.ui:76 +#, no-c-format +msgid "" +"Here you can choose the backend you'd like to use with KlamAV.\n" +"

Standalone scanner uses the 'clamscan' command to perform a scan. " +"This backend is configurable via KlamAV, but takes longer to start. This " +"backend is also the easiest to set up, as it does not require running a " +"system-wide daemon.

\n" +"

ClamAV daemon uses the 'clamdscan' command to perform a scan. This " +"backend depends on a running instance of the clamd daemon and depends " +"on the options of the daemon. This backend starts up faster and also makes " +"use of the Multiscan feature.