From 95083a4f89419a2e66b001b0bcd302bbd4b93e1e Mon Sep 17 00:00:00 2001 From: Tomasz Kojm Date: Fri, 15 Oct 2004 21:00:20 +0000 Subject: [PATCH] allow (optional) engine version requirement in sigs git-svn: trunk@1003 --- clamav-devel/ChangeLog | 4 ++++ clamav-devel/libclamav/readdb.c | 26 ++++++++++++++++++++++++-- 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/clamav-devel/ChangeLog b/clamav-devel/ChangeLog index 3adf602a8..10cbcfb87 100644 --- a/clamav-devel/ChangeLog +++ b/clamav-devel/ChangeLog @@ -1,3 +1,7 @@ +Fri Oct 15 22:56:23 CEST 2004 (tk) +---------------------------------- + * libclamav/readdb.c: allow (optional) engine version requirement in sigs + Fri Oct 15 02:23:02 CEST 2004 (tk) ---------------------------------- * libclamav/special.c: return 1 for other JPEG exploit variants diff --git a/clamav-devel/libclamav/readdb.c b/clamav-devel/libclamav/readdb.c index d4a57155a..4db73ca31 100644 --- a/clamav-devel/libclamav/readdb.c +++ b/clamav-devel/libclamav/readdb.c @@ -480,7 +480,7 @@ static int cli_loaddb(FILE *fd, struct cl_node **root, unsigned int *signo) static int cli_loadndb(FILE *fd, struct cl_node **root, unsigned int *signo) { char buffer[FILEBUFF], *sig, *virname, *offset, *pt; - int line = 0, ret = 0; + int line = 0, sigs = 0, ret = 0; unsigned short target; @@ -511,6 +511,7 @@ static int cli_loadndb(FILE *fd, struct cl_node **root, unsigned int *signo) while(fgets(buffer, FILEBUFF, fd)) { line++; + sigs++; cli_chomp(buffer); if(!(virname = cli_strtok(buffer, 0, ":"))) { @@ -518,8 +519,29 @@ static int cli_loadndb(FILE *fd, struct cl_node **root, unsigned int *signo) break; } + if((pt = cli_strtok(buffer, 4, ":"))) { + if(!isdigit(*pt)) { + free(virname); + free(pt); + ret = CL_EMALFDB; + break; + } + + if(atoi(pt) > cl_retflevel()) { + cli_warnmsg("Signature for %s requires new ClamAV version. Please update!\n", virname); + sigs--; + free(virname); + free(pt); + continue; + } + + free(pt); + } + if(!(pt = cli_strtok(buffer, 1, ":")) || !isdigit(*pt)) { free(virname); + if(pt) + free(pt); ret = CL_EMALFDB; break; } @@ -568,7 +590,7 @@ static int cli_loadndb(FILE *fd, struct cl_node **root, unsigned int *signo) } if(signo) - *signo += line; + *signo += sigs; return 0; }