summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/CMakeLists.txt2
-rw-r--r--src/backend.ui93
-rw-r--r--src/configdialog.cpp15
-rw-r--r--src/configdialog.h5
-rw-r--r--src/klamav.cpp2
-rw-r--r--src/klamavconfig.kcfg18
-rw-r--r--src/klamscan.cpp2
-rw-r--r--src/scanviewer.cpp151
-rw-r--r--src/scanviewer.h4
-rw-r--r--translations/messages/klamav.pot314
10 files changed, 429 insertions, 177 deletions
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 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>KlamBackend</class>
+<widget class="TQWidget">
+ <property name="name">
+ <cstring>KlamBackend</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>600</width>
+ <height>480</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Scanning Backend</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="TQButtonGroup">
+ <property name="name">
+ <cstring>backendConfig</cstring>
+ </property>
+ <property name="title">
+ <string>Scanning Backend</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="TQRadioButton" row="0" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>kcfg_ScannerClamscan</cstring>
+ </property>
+ <property name="text">
+ <string>Standalone scanner</string>
+ </property>
+ <property name="checked">
+ <bool>false</bool>
+ </property>
+ </widget>
+ <widget class="TQCheckBox" row="1" column="1">
+ <property name="name">
+ <cstring>kcfg_ClamdMultiscan</cstring>
+ </property>
+ <property name="text">
+ <string>Force Multiscan mode</string>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="TQRadioButton" row="1" column="0">
+ <property name="name">
+ <cstring>kcfg_ScannerClamdscan</cstring>
+ </property>
+ <property name="text">
+ <string>ClamAV daemon</string>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="KTextBrowser">
+ <property name="name">
+ <cstring>backendHelpMessage</cstring>
+ </property>
+ <property name="textFormat">
+ <enum>RichText</enum>
+ </property>
+ <property name="text">
+ <string>Here you can choose the backend you'd like to use with KlamAV.
+&lt;p&gt;&lt;b&gt;Standalone scanner&lt;/b&gt; 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.&lt;/p&gt;
+&lt;p&gt;&lt;b&gt;ClamAV daemon&lt;/b&gt; uses the 'clamdscan' command to perform a scan. This backend depends on a running instance of the &lt;i&gt;clamd&lt;/i&gt; daemon and depends on the options of the daemon. This backend starts up faster and also makes use of the Multiscan feature.&lt;/p</string>
+ </property>
+ </widget>
+ </vbox>
+</widget>
+<slots>
+ <slot>slotToggleClamdcan(bool)</slot>
+</slots>
+<functions>
+ <function access="private" specifier="non virtual">init()</function>
+</functions>
+<layoutdefaults spacing="6" margin="11"/>
+<includehints>
+ <includehint>ktextbrowser.h</includehint>
+</includehints>
+</UI>
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 <tqobjectlist.h>
#include <tqpushbutton.h>
#include <tqradiobutton.h>
+#include <tqcheckbox.h>
#include <tqspinbox.h>
#include <tqtextcodec.h>
#include <tqtooltip.h>
@@ -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 @@
<kcfg>
<kcfgfile name="klamavrc"/>
+<group name="KlamavBackend">
+ <entry name="ScannerClamscan" type="Bool">
+ <label>Standalone scanner</label>
+ <whatsthis>Use KlamAV without the ClamAV daemon.</whatsthis>
+ <default>true</default>
+ </entry>
+ <entry name="ScannerClamdscan" type="Bool">
+ <label>ClamAV daemon</label>
+ <whatsthis>Use KlamAV with the ClamAV daemon.</whatsthis>
+ <default>false</default>
+ </entry>
+ <entry name="ClamdMultiscan" type="Bool">
+ <label>Force Multiscan mode</label>
+ <whatsthis>Force clamdscan to use multiscan mode (scan multiple directories at once in separate threads). May lower scanning time.</whatsthis>
+ <default>true</default>
+ </entry>
+</group>
+
<group name="ArchiveLimits">
<entry name="RecursionLevel" type="Int">
<label>Maximum Recursion Level</label>
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("<p>There was a problem quarantining <b>%1</b>. Check your diskspace, the permissions on your quarantine location and whether a file with the same name already exists in the quarantine. </p>").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<TQListViewItem> 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 <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\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 ""
"<p>There was a problem quarantining <b>%1</b>. Check your diskspace, the "
"permissions on your quarantine location and whether a file with the same "
"name already exists in the quarantine. </p>"
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"
+"<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>\n"
+"<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"
+msgstr ""
+
#: firstrunwizard.ui:58
#, no-c-format
msgid ""
@@ -1554,256 +1619,273 @@ msgstr ""
msgid "Signature Database Location:"
msgstr ""
-#: klamavconfig.kcfg:8
+#: klamavconfig.kcfg:9
+#, no-c-format
+msgid "Use KlamAV without the ClamAV daemon."
+msgstr ""
+
+#: klamavconfig.kcfg:14
+#, no-c-format
+msgid "Use KlamAV with the ClamAV daemon."
+msgstr ""
+
+#: klamavconfig.kcfg:19
+#, no-c-format
+msgid ""
+"Force clamdscan to use multiscan mode (scan multiple directories at once in "
+"separate threads). May lower scanning time."
+msgstr ""
+
+#: klamavconfig.kcfg:26
#, no-c-format
msgid "Maximum Recursion Level"
msgstr ""
-#: klamavconfig.kcfg:9
+#: klamavconfig.kcfg:27
#, no-c-format
msgid "The maximum number of subdirectories in a zip file to open before ."
msgstr ""
-#: klamavconfig.kcfg:14 klamavconfig.kcfg:19
+#: klamavconfig.kcfg:32 klamavconfig.kcfg:37
#, no-c-format
msgid ""
"The maximum number of megabytes to extract from a zip file before marking it "
"as suspicious."
msgstr ""
-#: klamavconfig.kcfg:24
+#: klamavconfig.kcfg:42
#, no-c-format
msgid ""
"The maximum number of file to extract from a zip file before marking it as "
"suspicious."
msgstr ""
-#: klamavconfig.kcfg:31
+#: klamavconfig.kcfg:49
#, no-c-format
msgid "Scan DEB files"
msgstr ""
-#: klamavconfig.kcfg:32 klamavconfig.kcfg:37
+#: klamavconfig.kcfg:50 klamavconfig.kcfg:55
#, no-c-format
msgid "Scan DEB files using the named program."
msgstr ""
-#: klamavconfig.kcfg:36
+#: klamavconfig.kcfg:54
#, no-c-format
msgid "Program to scan DEB files."
msgstr ""
-#: klamavconfig.kcfg:41
+#: klamavconfig.kcfg:59
#, no-c-format
msgid "Scan TAR files"
msgstr ""
-#: klamavconfig.kcfg:42 klamavconfig.kcfg:47
+#: klamavconfig.kcfg:60 klamavconfig.kcfg:65
#, no-c-format
msgid "Scan TAR files using the named program."
msgstr ""
-#: klamavconfig.kcfg:46
+#: klamavconfig.kcfg:64
#, no-c-format
msgid "Program to scan TAR files."
msgstr ""
-#: klamavconfig.kcfg:51
+#: klamavconfig.kcfg:69
#, no-c-format
msgid "Scan JAR files"
msgstr ""
-#: klamavconfig.kcfg:52 klamavconfig.kcfg:57
+#: klamavconfig.kcfg:70 klamavconfig.kcfg:75
#, no-c-format
msgid "Scan JAR files using the named program."
msgstr ""
-#: klamavconfig.kcfg:56
+#: klamavconfig.kcfg:74
#, no-c-format
msgid "Program to scan JAR files."
msgstr ""
-#: klamavconfig.kcfg:61
+#: klamavconfig.kcfg:79
#, no-c-format
msgid "Scan LZH files"
msgstr ""
-#: klamavconfig.kcfg:62 klamavconfig.kcfg:67
+#: klamavconfig.kcfg:80 klamavconfig.kcfg:85
#, no-c-format
msgid "Scan LZH files using the named program."
msgstr ""
-#: klamavconfig.kcfg:66
+#: klamavconfig.kcfg:84
#, no-c-format
msgid "Program to scan LZH files."
msgstr ""
-#: klamavconfig.kcfg:71
+#: klamavconfig.kcfg:89
#, no-c-format
msgid "Scan Zoo files"
msgstr ""
-#: klamavconfig.kcfg:72 klamavconfig.kcfg:77
+#: klamavconfig.kcfg:90 klamavconfig.kcfg:95
#, no-c-format
msgid "Scan Zoo files using the named program."
msgstr ""
-#: klamavconfig.kcfg:76
+#: klamavconfig.kcfg:94
#, no-c-format
msgid "Program to scan Zoo files."
msgstr ""
-#: klamavconfig.kcfg:81
+#: klamavconfig.kcfg:99
#, no-c-format
msgid "Scan RAR files"
msgstr ""
-#: klamavconfig.kcfg:82 klamavconfig.kcfg:87
+#: klamavconfig.kcfg:100 klamavconfig.kcfg:105
#, no-c-format
msgid "Scan RAR files using the named program."
msgstr ""
-#: klamavconfig.kcfg:86
+#: klamavconfig.kcfg:104
#, no-c-format
msgid "Program to scan RAR files."
msgstr ""
-#: klamavconfig.kcfg:91
+#: klamavconfig.kcfg:109
#, no-c-format
msgid "Scan Zip files"
msgstr ""
-#: klamavconfig.kcfg:92 klamavconfig.kcfg:97
+#: klamavconfig.kcfg:110 klamavconfig.kcfg:115
#, no-c-format
msgid "Scan Zip files using the named program."
msgstr ""
-#: klamavconfig.kcfg:96
+#: klamavconfig.kcfg:114
#, no-c-format
msgid "Program to scan Zip files."
msgstr ""
-#: klamavconfig.kcfg:101
+#: klamavconfig.kcfg:119
#, no-c-format
msgid "Scan TGZ files"
msgstr ""
-#: klamavconfig.kcfg:102 klamavconfig.kcfg:107
+#: klamavconfig.kcfg:120 klamavconfig.kcfg:125
#, no-c-format
msgid "Scan TGZ files using the named program."
msgstr ""
-#: klamavconfig.kcfg:106
+#: klamavconfig.kcfg:124
#, no-c-format
msgid "Program to scan TGZ files."
msgstr ""
-#: klamavconfig.kcfg:111
+#: klamavconfig.kcfg:129
#, no-c-format
msgid "Scan ARJ files"
msgstr ""
-#: klamavconfig.kcfg:112 klamavconfig.kcfg:117
+#: klamavconfig.kcfg:130 klamavconfig.kcfg:135
#, no-c-format
msgid "Scan ARJ files using the named program."
msgstr ""
-#: klamavconfig.kcfg:116
+#: klamavconfig.kcfg:134
#, no-c-format
msgid "Program to scan ARJ files."
msgstr ""
-#: klamavconfig.kcfg:124
+#: klamavconfig.kcfg:142
#, no-c-format
msgid "Mark Encrypted Files as Suspicious"
msgstr ""
-#: klamavconfig.kcfg:128
+#: klamavconfig.kcfg:146
#, no-c-format
msgid "Mark Broken Files as Suspicious"
msgstr ""
-#: klamavconfig.kcfg:132
+#: klamavconfig.kcfg:150
#, no-c-format
msgid "Exclude Quarantine Directories from scanning"
msgstr ""
-#: klamavconfig.kcfg:136
+#: klamavconfig.kcfg:154
#, no-c-format
msgid "Scan Microsoft Office Macros"
msgstr ""
-#: klamavconfig.kcfg:140
+#: klamavconfig.kcfg:158
#, no-c-format
msgid "Scan Portable Executable Files"
msgstr ""
-#: klamavconfig.kcfg:144
+#: klamavconfig.kcfg:162
#, no-c-format
msgid "Scan Emails"
msgstr ""
-#: klamavconfig.kcfg:148
+#: klamavconfig.kcfg:166
#, no-c-format
msgid "Scan HTML Files"
msgstr ""
-#: klamavconfig.kcfg:157
+#: klamavconfig.kcfg:175
#, no-c-format
msgid "Scan Files When They Are Executed"
msgstr ""
-#: klamavconfig.kcfg:161
+#: klamavconfig.kcfg:179
#, no-c-format
msgid "Scan Files When They Are Opened"
msgstr ""
-#: klamavconfig.kcfg:165
+#: klamavconfig.kcfg:183
#, no-c-format
msgid "Scan Files When They Are Closed"
msgstr ""
-#: klamavconfig.kcfg:169
+#: klamavconfig.kcfg:187
#, no-c-format
msgid "Scan Files When They Are Created or Modified"
msgstr ""
-#: klamavconfig.kcfg:177 klamavconfig.kcfg:214
+#: klamavconfig.kcfg:195 klamavconfig.kcfg:232
#, no-c-format
msgid "Expire Events After the Specified Number of Days"
msgstr ""
-#: klamavconfig.kcfg:181
+#: klamavconfig.kcfg:199
#, no-c-format
msgid "Log Software Update Events"
msgstr ""
-#: klamavconfig.kcfg:185
+#: klamavconfig.kcfg:203
#, no-c-format
msgid "Log Quarantine Events"
msgstr ""
-#: klamavconfig.kcfg:189
+#: klamavconfig.kcfg:207
#, no-c-format
msgid "Log KlamAV launching and shutting-down Events"
msgstr ""
-#: klamavconfig.kcfg:193
+#: klamavconfig.kcfg:211
#, no-c-format
msgid "Log Database Events"
msgstr ""
-#: klamavconfig.kcfg:197
+#: klamavconfig.kcfg:215
#, no-c-format
msgid "Log StartedStoppedCancelled Events"
msgstr ""
-#: klamavconfig.kcfg:201
+#: klamavconfig.kcfg:219
#, no-c-format
msgid "Log VirusFound Events"
msgstr ""
-#: klamavconfig.kcfg:205
+#: klamavconfig.kcfg:223
#, no-c-format
msgid "Log Error Events"
msgstr ""