Applied patch from Arkadiusz Miskiewicz to apply a timeout to read
authorPhilip Hazel <ph10@hermes.cam.ac.uk>
Thu, 6 Jul 2006 14:19:50 +0000 (14:19 +0000)
committerPhilip Hazel <ph10@hermes.cam.ac.uk>
Thu, 6 Jul 2006 14:19:50 +0000 (14:19 +0000)
operations in malware.c.

doc/doc-txt/ChangeLog
src/ACKNOWLEDGMENTS
src/src/malware.c

index 33844879d9cde4fd2894313ff2b5c4379b9dce90..5d8b2afd550307021684a2d1e306e2a3b9b4665a 100644 (file)
@@ -1,4 +1,4 @@
-$Cambridge: exim/doc/doc-txt/ChangeLog,v 1.367 2006/07/03 15:39:06 ph10 Exp $
+$Cambridge: exim/doc/doc-txt/ChangeLog,v 1.368 2006/07/06 14:19:50 ph10 Exp $
 
 Change log file for Exim from version 4.21
 -------------------------------------------
 
 Change log file for Exim from version 4.21
 -------------------------------------------
@@ -72,6 +72,9 @@ PH/09 Applied patch from Erik to use select() instead of poll() in spam.c on
 
 PH/10 Added more information to debugging output for retry time not reached.
 
 
 PH/10 Added more information to debugging output for retry time not reached.
 
+PH/11 Applied patch from Arkadiusz Miskiewicz to apply a timeout to read
+      operations in malware.c.
+
 
 Exim version 4.62
 -----------------
 
 Exim version 4.62
 -----------------
index 4090d24092e896e741cf1f40f09e8a205c6287ec..24c82c97383748a05cdfb75160827dad27aea92e 100644 (file)
@@ -1,4 +1,4 @@
-$Cambridge: exim/src/ACKNOWLEDGMENTS,v 1.50 2006/07/03 15:19:44 ph10 Exp $
+$Cambridge: exim/src/ACKNOWLEDGMENTS,v 1.51 2006/07/06 14:19:50 ph10 Exp $
 
 EXIM ACKNOWLEDGEMENTS
 
 
 EXIM ACKNOWLEDGEMENTS
 
@@ -20,7 +20,7 @@ relatively small patches.
 Philip Hazel
 
 Lists created: 20 November 2002
 Philip Hazel
 
 Lists created: 20 November 2002
-Last updated:  03 July 2006
+Last updated:  06 July 2006
 
 
 THE OLD LIST
 
 
 THE OLD LIST
@@ -201,6 +201,7 @@ Andreas Metzler           Patch for message_id_header_domain
 Alex Miller               Suggested readline() patch
                           Patch for LDAP_RES_SEARCH_REFERENCE handling
                           Support for the DrWeb content scanner
 Alex Miller               Suggested readline() patch
                           Patch for LDAP_RES_SEARCH_REFERENCE handling
                           Support for the DrWeb content scanner
+Arkadiusz Miskiewicz      Patch to add timeout to reads in malware.c
 Andreas Mueller           Patch for logging uncompleted SMTP transactions
 Pete Naylor               Patch for LDAP TCP connect timeout setting
 Alexander Newmann         Diagnosing and patching obscure and subtle socket bug
 Andreas Mueller           Patch for logging uncompleted SMTP transactions
 Pete Naylor               Patch for LDAP TCP connect timeout setting
 Alexander Newmann         Diagnosing and patching obscure and subtle socket bug
index 7e3c587c971d1d4a7a329b6d4712072c4fb13845..fddb19add4d8c53f0dfdb1ceb1597336a487850e 100644 (file)
@@ -1,4 +1,4 @@
-/* $Cambridge: exim/src/src/malware.c,v 1.14 2006/02/22 14:46:44 ph10 Exp $ */
+/* $Cambridge: exim/src/src/malware.c,v 1.15 2006/07/06 14:19:50 ph10 Exp $ */
 
 /*************************************************
 *     Exim - an Internet mail transport agent    *
 
 /*************************************************
 *     Exim - an Internet mail transport agent    *
@@ -20,6 +20,10 @@ int mksd_scan_packed(int sock);
 #define SHUT_WR 1
 #endif
 
 #define SHUT_WR 1
 #endif
 
+
+#define        MALWARE_TIMEOUT             120
+
+
 #define DRWEBD_SCAN_CMD             (1)     /* scan file, buffer or diskfile */
 #define DRWEBD_RETURN_VIRUSES       (1<<0)   /* ask daemon return to us viruses names from report */
 #define DRWEBD_IS_MAIL              (1<<19)  /* say to daemon that format is "archive MAIL" */
 #define DRWEBD_SCAN_CMD             (1)     /* scan file, buffer or diskfile */
 #define DRWEBD_RETURN_VIRUSES       (1<<0)   /* ask daemon return to us viruses names from report */
 #define DRWEBD_IS_MAIL              (1<<19)  /* say to daemon that format is "archive MAIL" */
@@ -557,7 +561,7 @@ int malware(uschar **listptr) {
           return DEFER;
         };
 
           return DEFER;
         };
 
-        bread = read(sock, av_buffer, sizeof(av_buffer));
+        bread = ip_recv(sock, av_buffer, sizeof(av_buffer), MALWARE_TIMEOUT);
         if (bread >0) av_buffer[bread]='\0';
         if (bread < 0) {
           (void)close(sock);
         if (bread >0) av_buffer[bread]='\0';
         if (bread < 0) {
           (void)close(sock);
@@ -591,7 +595,7 @@ int malware(uschar **listptr) {
         i = 0;
         memset(av_buffer, 0, sizeof(av_buffer));
         do {
         i = 0;
         memset(av_buffer, 0, sizeof(av_buffer));
         do {
-          bread=read(sock, &av_buffer[i], 1);
+          bread=ip_recv(sock, &av_buffer[i], 1, MALWARE_TIMEOUT);
           if (bread < 0) {
             (void)close(sock);
             log_write(0, LOG_MAIN|LOG_PANIC,
           if (bread < 0) {
             (void)close(sock);
             log_write(0, LOG_MAIN|LOG_PANIC,
@@ -976,7 +980,7 @@ int malware(uschar **listptr) {
 
       /* wait for result */
       memset(av_buffer, 0, sizeof(av_buffer));
 
       /* wait for result */
       memset(av_buffer, 0, sizeof(av_buffer));
-      if ((!(bread = read(sock, av_buffer, sizeof(av_buffer))) > 0)) {
+      if ((!(bread = ip_recv(sock, av_buffer, sizeof(av_buffer), MALWARE_TIMEOUT)) > 0)) {
         (void)close(sock);
         log_write(0, LOG_MAIN|LOG_PANIC,
              "malware acl condition: unable to read from sophie UNIX socket (%s)", sophie_options);
         (void)close(sock);
         log_write(0, LOG_MAIN|LOG_PANIC,
              "malware acl condition: unable to read from sophie UNIX socket (%s)", sophie_options);
@@ -1098,7 +1102,7 @@ int malware(uschar **listptr) {
             return DEFER;
           }
           memset(av_buffer2, 0, sizeof(av_buffer2));
             return DEFER;
           }
           memset(av_buffer2, 0, sizeof(av_buffer2));
-          bread = read(sock, av_buffer2, sizeof(av_buffer2));
+          bread = ip_recv(sock, av_buffer2, sizeof(av_buffer2), MALWARE_TIMEOUT);
 
           if (bread < 0) {
             log_write(0, LOG_MAIN|LOG_PANIC,
 
           if (bread < 0) {
             log_write(0, LOG_MAIN|LOG_PANIC,
@@ -1238,7 +1242,7 @@ int malware(uschar **listptr) {
 
       /* Read the result */
       memset(av_buffer, 0, sizeof(av_buffer));
 
       /* Read the result */
       memset(av_buffer, 0, sizeof(av_buffer));
-      bread = read(sock, av_buffer, sizeof(av_buffer));
+      bread = ip_recv(sock, av_buffer, sizeof(av_buffer), MALWARE_TIMEOUT);
       (void)close(sock);
 
       if (!(bread  > 0)) {
       (void)close(sock);
 
       if (!(bread  > 0)) {