diff -urN src.orig/malware.c src/malware.c --- src.orig/malware.c Wed Sep 29 17:53:11 2004 +++ src/malware.c Wed Sep 29 17:58:36 2004 @@ -36,7 +36,7 @@ return(byte[0] ? LITTLE_ENDIAN : BIG_ENDIAN); } -uschar malware_name_buffer[256]; +uschar malware_name_buffer[256], malware_temp_name[256]; int malware_ok = 0; int malware(uschar **listptr) { @@ -53,6 +53,7 @@ int roffset; const pcre *re; const uschar *rerror; + int mw_cnt = 0; /* make sure the eml mbox file is spooled up */ mbox_file = spool_mbox(&mbox_size); @@ -98,19 +99,12 @@ return DEFER; }; - /* Do not scan twice. */ - if (malware_ok == 0) { - - /* find the scanner type from the av_scanner option */ - if ((scanner_name = string_nextinlist(&av_scanner_work, &sep, + while(scanner_name = string_nextinlist(&av_scanner_work, &sep, scanner_name_buffer, - sizeof(scanner_name_buffer))) == NULL) { - /* no scanner given */ - log_write(0, LOG_MAIN|LOG_PANIC, - "malware acl condition: av_scanner configuration variable is empty"); - return DEFER; - }; - + sizeof(scanner_name_buffer))) { + + mw_cnt++; /* increment the count of malware processed */ + /* "drweb" scanner type ----------------------------------------------- */ /* v0.1 - added support for tcp sockets */ /* v0.0 - initial release -- support for unix sockets */ @@ -942,7 +936,6 @@ /* ----------------------------------------------------------------------- */ - /* "unknown" scanner type ------------------------------------------------- */ else { log_write(0, LOG_MAIN|LOG_PANIC, @@ -950,11 +943,25 @@ return DEFER; }; /* ----------------------------------------------------------------------- */ - - /* set "been here, done that" marker */ - malware_ok = 1; - }; + /* Add malware name and go out if virus found */ + if( malware_name ) { + Ustrcpy(CS malware_temp_name, CS scanner_name); + Ustrcat(CS malware_temp_name, ": "); + Ustrcat(CS malware_temp_name, CS malware_name); + Ustrcpy(CS malware_name, CS malware_temp_name); + break; + } + + }; /* end of loop */ + + if( mw_cnt == 0 ) { + /* no scanner given */ + log_write(0, LOG_MAIN|LOG_PANIC, + "malware acl condition: av_scanner configuration variable is empty"); + return DEFER; + }; + /* match virus name against pattern (caseless ------->----------v) */ if ( (malware_name != NULL) && (regex_match_and_setup(re, malware_name, 0, -1)) ) {