summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMavridis Philippe <mavridisf@gmail.com>2021-02-05 22:31:58 +0200
committerMavridis Philippe <mavridisf@gmail.com>2021-02-05 22:34:25 +0200
commit18923e403764c902e11aa2c8cd49c6f7335a9923 (patch)
tree708bc47445e10d6a95beda5c4178e9e17c272dc4
parent3f7deb35938a8993ee835e05de9bc2cddfe05744 (diff)
downloadklamav-18923e403764c902e11aa2c8cd49c6f7335a9923.tar.gz
klamav-18923e403764c902e11aa2c8cd49c6f7335a9923.zip
Added support for clamd scanning.
This option has to be enabled in the new 'Backend' section of the Options dialog. Most configuration options are unavailable for use with 'clamdscan'. For more information on the inherited limitations see the man page for clamdscan(1). This resolves issue #17. Signed-off-by: Mavridis Philippe <mavridisf@gmail.com>
-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 ""