X-Git-Url: https://git.exim.org/exim.git/blobdiff_plain/3c5cd61621efb58a8f03d5d1c048ee2a3c941f71..3cc66b4537846d0f9211fcb63c426be9a553edb1:/src/src/malware.c diff --git a/src/src/malware.c b/src/src/malware.c index bdf3348d5..fddb19add 100644 --- a/src/src/malware.c +++ b/src/src/malware.c @@ -1,4 +1,4 @@ -/* $Cambridge: exim/src/src/malware.c,v 1.13 2005/08/02 18:24:14 tom Exp $ */ +/* $Cambridge: exim/src/src/malware.c,v 1.15 2006/07/06 14:19:50 ph10 Exp $ */ /************************************************* * Exim - an Internet mail transport agent * @@ -20,6 +20,10 @@ int mksd_scan_packed(int sock); #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" */ @@ -557,7 +561,7 @@ int malware(uschar **listptr) { 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); @@ -591,7 +595,7 @@ int malware(uschar **listptr) { 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, @@ -873,7 +877,7 @@ int malware(uschar **listptr) { }; (void)string_format(file_name,1024,"%s/scan/%s/%s_scanner_output", spool_directory, message_id, message_id); - scanner_record = fopen(CS file_name,"wb"); + scanner_record = modefopen(file_name,"wb",SPOOL_MODE); if (scanner_record == NULL) { 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)); - 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); @@ -1098,7 +1102,7 @@ int malware(uschar **listptr) { 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, @@ -1238,7 +1242,7 @@ int malware(uschar **listptr) { /* 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)) {