Path: blob/main/mail/antivirus-milter/files/patch-antivirus.c
18157 views
--- antivirus.c.orig 2003-07-15 19:27:14 UTC1+++ antivirus.c2@@ -85,6 +85,8 @@ static char *VIRUSACTION=NULL;3static char *FORMAT=NULL;4static sfsistat avfailcode=0;5static int purgevirus=0;6+static int skipwords=0;7+static int ignorerror2=0;8static char *avargs[]={NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL};910/*11@@ -128,6 +130,12 @@ static char *badext[]={".com",".scr",".v12#define FORMAT_SOPHOS ">>> Virus '%[^']s' found in file %*s"1314/*15+** This one is for clamav16+*/17+#define FORMAT_CLAMAV " %s FOUND"18+#define SCANARGS_CLAMAV "--disable-summary"19+20+/*21** this can be given on the command line22*/23static char *configfile=NULL;24@@ -502,6 +510,7 @@ sfsistat virusscan(SMFICTX *ctx, char *p25int retval;26int fd;27int i;28+ char *word;29char *p=NULL;30char *av[]={NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL};3132@@ -552,13 +561,26 @@ sfsistat virusscan(SMFICTX *ctx, char *p33(int)ctx, retval,priv->workdir);34}3536+ if (ignorerror2 > 0 )37+ {38+ if ( retval == 2 )39+ retval = 0;40+ }41+42if (retval>0)43{44fseek(priv->childfp,0,SEEK_SET);45memset(viruses,0,sizeof(buf));46while (fgets(buf,sizeof(buf),priv->childfp)!=NULL)47{48- if (sscanf(buf,format,tmp)==1)49+ word = buf;50+ if (skipwords > 0 )51+ {52+ word = strchr( word, ' ' );53+ if ( word == NULL )54+ word = buf;55+ }56+ if (sscanf(word,format,tmp)==1)57{58if (viruses[0])59strncat(viruses," ",sizeof(viruses));60@@ -572,10 +594,8 @@ sfsistat virusscan(SMFICTX *ctx, char *p61if (viruses[0])62priv->viruses=strdup(viruses);63else64- priv->viruses=strdup("please contact postmaster");65-66- if ((priv->viruses)==NULL)67{68+ priv->viruses=strdup("please contact postmaster");69return(avfailcode);70}71return(SMFIS_REJECT);72@@ -1211,6 +1231,7 @@ int init(void)73if (AVFAILACTION==NULL) AVFAILACTION=CONF_AVFAILACTION;74if (VIRUSACTION==NULL) VIRUSACTION=CONF_VIRUSACTION;7576+ skipwords = 0;77if (strcasecmp(AVPRODUCT,"mcafee")==0)78{79FORMAT=FORMAT_MCAFEE;80@@ -1225,10 +1246,17 @@ int init(void)81{82FORMAT=FORMAT_FSAV;83}84+ else if (strcasecmp(AVPRODUCT,"clamav")==0)85+ {86+ FORMAT=FORMAT_CLAMAV;87+ AVSCANARGS=SCANARGS_CLAMAV;88+ skipwords = 1;89+ ignorerror2 = 1;90+ }91else92{93fprintf(stderr,"init(): unrecognized AVPRODUCT %s\n",AVPRODUCT);94- fprintf(stderr,"init(): valid values are: mcafee, fsva, sophos\n");95+ fprintf(stderr,"init(): valid values are: mcafee, fsva, sophos, clamav\n");96return(-1);97}9899100101