Browse code

allow (optional) engine version requirement in sigs

git-svn-id: file:///var/lib/svn/clamav-devel/trunk/clamav-devel@1003 77e5149b-7576-45b1-b177-96237e5ba77b

Tomasz Kojm authored on 2004/10/16 06:00:20
Showing 2 changed files
... ...
@@ -1,3 +1,7 @@
1
+Fri Oct 15 22:56:23 CEST 2004 (tk)
2
+----------------------------------
3
+  * libclamav/readdb.c: allow (optional) engine version requirement in sigs
4
+
1 5
 Fri Oct 15 02:23:02 CEST 2004 (tk)
2 6
 ----------------------------------
3 7
   * libclamav/special.c: return 1 for other JPEG exploit variants
... ...
@@ -480,7 +480,7 @@ static int cli_loaddb(FILE *fd, struct cl_node **root, unsigned int *signo)
480 480
 static int cli_loadndb(FILE *fd, struct cl_node **root, unsigned int *signo)
481 481
 {
482 482
 	char buffer[FILEBUFF], *sig, *virname, *offset, *pt;
483
-	int line = 0, ret = 0;
483
+	int line = 0, sigs = 0, ret = 0;
484 484
 	unsigned short target;
485 485
 
486 486
 
... ...
@@ -511,6 +511,7 @@ static int cli_loadndb(FILE *fd, struct cl_node **root, unsigned int *signo)
511 511
 
512 512
     while(fgets(buffer, FILEBUFF, fd)) {
513 513
 	line++;
514
+	sigs++;
514 515
 	cli_chomp(buffer);
515 516
 
516 517
 	if(!(virname = cli_strtok(buffer, 0, ":"))) {
... ...
@@ -518,8 +519,29 @@ static int cli_loadndb(FILE *fd, struct cl_node **root, unsigned int *signo)
518 518
 	    break;
519 519
 	}
520 520
 
521
+	if((pt = cli_strtok(buffer, 4, ":"))) {
522
+	    if(!isdigit(*pt)) {
523
+		free(virname);
524
+		free(pt);
525
+		ret = CL_EMALFDB;
526
+		break;
527
+	    }
528
+
529
+	    if(atoi(pt) > cl_retflevel()) {
530
+		cli_warnmsg("Signature for %s requires new ClamAV version. Please update!\n", virname);
531
+		sigs--;
532
+		free(virname);
533
+		free(pt);
534
+		continue;
535
+	    }
536
+
537
+	    free(pt);
538
+	}
539
+
521 540
 	if(!(pt = cli_strtok(buffer, 1, ":")) || !isdigit(*pt)) {
522 541
 	    free(virname);
542
+	    if(pt)
543
+		free(pt);
523 544
 	    ret = CL_EMALFDB;
524 545
 	    break;
525 546
 	}
... ...
@@ -568,7 +590,7 @@ static int cli_loadndb(FILE *fd, struct cl_node **root, unsigned int *signo)
568 568
     }
569 569
 
570 570
     if(signo)
571
-	*signo += line;
571
+	*signo += sigs;
572 572
 
573 573
     return 0;
574 574
 }