[Pkg-clamav-commits] [SCM] Debian repository for ClamAV branch, debian/unstable, updated. debian/0.95+dfsg-1-6156-g094ec9b

Tomasz Kojm tkojm at clamav.net
Sun Apr 4 01:08:02 UTC 2010


The following commit has been merged in the debian/unstable branch:
commit 9cdf477e98c8f15986868b7f4587fd3c5644e4e7
Author: Tomasz Kojm <tkojm at clamav.net>
Date:   Fri Oct 16 14:57:15 2009 +0200

    clamdscan: fix some output msgs (bb#1716)

diff --git a/ChangeLog b/ChangeLog
index 3c77654..b55979a 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+Fri Oct 16 14:56:10 CEST 2009 (tk)
+----------------------------------
+ * clamdscan: fix some output msgs (bb#1716)
+
 Fri Oct 16 10:11:56 CEST 2009 (tk)
 ----------------------------------
  * sigtool: add support for --find-sigs (part of bb#1246)
diff --git a/clamdscan/proto.c b/clamdscan/proto.c
index b359d28..c1c3128 100644
--- a/clamdscan/proto.c
+++ b/clamdscan/proto.c
@@ -248,6 +248,7 @@ int dsresult(int sockd, int scantype, const char *filename, int *printok) {
     int infected = 0, len, beenthere = 0;
     char *bol, *eol;
     struct RCVLN rcv;
+    struct stat sb;
 
     recvlninit(&rcv, sockd);
 
@@ -314,8 +315,11 @@ int dsresult(int sockd, int scantype, const char *filename, int *printok) {
 	}
     }
     if(!beenthere) {
-	logg("~%s: no reply from clamd\n", filename ? filename : "STDIN");
-	return -1;
+	stat(filename, &sb);
+	if(!S_ISDIR(sb.st_mode)) {
+	    logg("~%s: no reply from clamd\n", filename ? filename : "STDIN");
+	    return -1;
+	}
     }
     return infected;
 }
@@ -327,6 +331,8 @@ struct client_serial_data {
     int infected;
     int scantype;
     int printok;
+    int files;
+    int errors;
 };
 
 /* FTW callback for scanning in non IDSESSION mode
@@ -338,17 +344,20 @@ static int serial_callback(struct stat *sb, char *filename, const char *path, en
 
     switch(reason) {
     case error_stat:
-	logg("^Can't access file %s\n", path);
+	logg("!Can't access file %s\n", path);
+	c->errors++;
 	return CL_SUCCESS;
     case error_mem:
-	logg("^Memory allocation failed in ftw\n");
+	logg("!Memory allocation failed in ftw\n");
+	c->errors++;
 	return CL_EMEM;
     case warning_skipped_dir:
 	logg("^Directory recursion limit reached\n");
     case warning_skipped_link:
 	return CL_SUCCESS;
     case warning_skipped_special:
-	logg("~%s: Not supported file type. ERROR\n", path);
+	logg("!%s: Not supported file type\n", path);
+	c->errors++;
 	return CL_SUCCESS;
     case visit_directory_toplev:
 	if(c->scantype >= STREAM)
@@ -368,6 +377,7 @@ static int serial_callback(struct stat *sb, char *filename, const char *path, en
     closesocket(sockd);
     if(ret < 0) return CL_EOPEN;
     c->infected += ret;
+    c->files++;
     if(reason == visit_directory_toplev)
 	return CL_BREAK;
     return CL_SUCCESS;
@@ -381,6 +391,8 @@ int serial_client_scan(char *file, int scantype, int *infected, int maxlevel, in
     int ftw;
 
     cdata.infected = 0;
+    cdata.files = 0;
+    cdata.errors = 0;
     cdata.printok = printinfected^1;
     cdata.scantype = scantype;
     data.data = &cdata;
@@ -388,7 +400,7 @@ int serial_client_scan(char *file, int scantype, int *infected, int maxlevel, in
     ftw = cli_ftw(file, flags, maxlevel ? maxlevel : INT_MAX, serial_callback, &data, NULL);
     *infected += cdata.infected;
 
-    if(ftw == CL_SUCCESS || ftw == CL_BREAK) {
+    if((cdata.errors < cdata.files) && (ftw == CL_SUCCESS || ftw == CL_BREAK)) {
 	if(cdata.printok)
 	    logg("~%s: OK\n", file);
 	return 0;
@@ -399,6 +411,8 @@ int serial_client_scan(char *file, int scantype, int *infected, int maxlevel, in
 /* Used in IDSESSION mode */
 struct client_parallel_data {
     int infected;
+    int files;
+    int errors;
     int scantype;
     int sockd;
     int lastid;
@@ -473,16 +487,19 @@ static int parallel_callback(struct stat *sb, char *filename, const char *path,
 
     switch(reason) {
     case error_stat:
-	logg("^Can't access file %s\n", path);
+	logg("!Can't access file %s\n", path);
+	c->errors++;
 	return CL_SUCCESS;
     case error_mem:
-	logg("^Memory allocation failed in ftw\n");
+	logg("!Memory allocation failed in ftw\n");
+	c->errors++;
 	return CL_EMEM;
     case warning_skipped_dir:
 	logg("^Directory recursion limit reached\n");
 	return CL_SUCCESS;
     case warning_skipped_special:
-	logg("~%s: Not supported file type. ERROR\n", path);
+	logg("!%s: Not supported file type\n", path);
+	c->errors++;
     case warning_skipped_link:
     case visit_directory_toplev:
 	return CL_SUCCESS;
@@ -524,6 +541,7 @@ static int parallel_callback(struct stat *sb, char *filename, const char *path,
     cid->file = filename;
     cid->next = c->ids;
     c->ids = cid;
+    c->files++;
 
     switch(c->scantype) {
 #ifdef HAVE_FD_PASSING
@@ -562,6 +580,8 @@ int parallel_client_scan(char *file, int scantype, int *infected, int maxlevel,
     }
 
     cdata.infected = 0;
+    cdata.files = 0;
+    cdata.errors = 0;
     cdata.scantype = scantype;
     cdata.lastid = 0;
     cdata.ids = NULL;
@@ -586,6 +606,8 @@ int parallel_client_scan(char *file, int scantype, int *infected, int maxlevel,
 	logg("!Clamd closed the connection before scanning all files.\n");
 	return 1;
     }
+    if(cdata.errors == cdata.files)
+	return 1;
     if(cdata.printok)
 	logg("~%s: OK\n", file);
     return 0;

-- 
Debian repository for ClamAV



More information about the Pkg-clamav-commits mailing list