Browse code

sigtool: allow arbitrary names for --build

Tomasz Kojm authored on 2011/03/16 01:59:52
Showing 2 changed files
... ...
@@ -1,3 +1,7 @@
1
+Tue Mar 15 17:56:59 CET 2011 (tk)
2
+---------------------------------
3
+ * sigtool: allow arbitrary names for --build
4
+
1 5
 Thu Mar 10 15:54:05 CET 2011 (tk)
2 6
 ---------------------------------
3 7
  * libclamav: optimize handling of {n} wildcards (bb#1796)
... ...
@@ -72,58 +72,62 @@
72 72
 #define MAX_DEL_LOOKAHEAD   200
73 73
 
74 74
 static const struct dblist_s {
75
-    const char *name;
75
+    const char *ext;
76 76
     unsigned int count;
77 77
 } dblist[] = {
78 78
 
79 79
     /* special files */
80
-    { "COPYING",    0 },
81
-    { "daily.cfg",  0 },
82
-    { "daily.ign",  0 },
83
-    { "daily.ign2",  0 },
84
-    { "daily.ftm",  0 },
85
-    { "main.info",  0 },    { "daily.info", 0 },    { "safebrowsing.info", 0 },
80
+    { "cfg",  0 },
81
+    { "ign",  0 },
82
+    { "ign2",  0 },
83
+    { "ftm",  0 },
84
+    { "info",  0 },
86 85
 
87 86
     /* databases */
88
-    { "main.db",    1 },    { "daily.db",   1 },
89
-    { "main.hdb",   1 },    { "daily.hdb",  1 },
90
-    { "main.hdu",   1 },    { "daily.hdu",  1 },
91
-    { "main.hsb",   1 },    { "daily.hsb",  1 },
92
-    { "main.hsu",   1 },    { "daily.hsu",  1 },
93
-    { "main.mdb",   1 },    { "daily.mdb",  1 },
94
-    { "main.mdu",   1 },    { "daily.mdu",  1 },
95
-    { "main.msb",   1 },    { "daily.msb",  1 },
96
-    { "main.msu",   1 },    { "daily.msu",  1 },
97
-    { "main.ndb",   1 },    { "daily.ndb",  1 },
98
-    { "main.ndu",   1 },    { "daily.ndu",  1 },
99
-    { "main.ldb",   1 },    { "daily.ldb",  1 },
100
-    { "main.ldu",   1 },    { "daily.ldu",  1 },
101
-    { "main.sdb",   1 },    { "daily.sdb",  1 },
102
-    { "main.zmd",   1 },    { "daily.zmd",  1 },
103
-    { "main.rmd",   1 },    { "daily.rmd",  1 },
104
-    { "main.idb",   0 },    { "daily.idb",  0 },
105
-    { "main.fp",    0 },    { "daily.fp",   0 },
106
-    { "main.sfp",   0 },    { "daily.sfp",  0 },
107
-    { "main.pdb",   1 },    { "daily.pdb",  1 },    { "safebrowsing.gdb", 1 },
108
-    { "main.wdb",   0 },    { "daily.wdb",  0 },    { "safebrowsing.wdb", 0 },
87
+    { "db",    1 },
88
+    { "hdb",   1 },
89
+    { "hdu",   1 },
90
+    { "hsb",   1 },
91
+    { "hsu",   1 },
92
+    { "mdb",   1 },
93
+    { "mdu",   1 },
94
+    { "msb",   1 },
95
+    { "msu",   1 },
96
+    { "ndb",   1 },
97
+    { "ndu",   1 },
98
+    { "ldb",   1 },
99
+    { "ldu",   1 },
100
+    { "sdb",   1 },
101
+    { "zmd",   1 },
102
+    { "rmd",   1 },
103
+    { "idb",   0 },
104
+    { "fp",    0 },
105
+    { "sfp",   0 },
106
+    { "gdb",   1 },
107
+    { "pdb",   1 },
108
+    { "wdb",   0 },
109 109
 
110 110
     { NULL,	    0 }
111 111
 };
112 112
 
113
-static const char *getdbname(const char *str)
113
+static char *getdbname(const char *str, char *dst, int dstlen)
114 114
 {
115
-    if(strstr(str, "main"))
116
-	return "main";
117
-    else if(strstr(str, "daily"))
118
-	return "daily";
119
-    else if(strstr(str, "safebrowsing"))
120
-	return "safebrowsing";
121
-    else if(strstr(str, "bytecode"))
122
-	return "bytecode";
123
-    else {
124
-	mprintf("!getdbname: Can't extract db name\n");
125
-	return "UNKNOWN";
115
+	int len = strlen(str);
116
+
117
+    if(cli_strbcasestr(str, ".cvd") || cli_strbcasestr(str, ".cld"))
118
+	len -= 4;
119
+
120
+    if(dst) {
121
+	strncpy(dst, str, MIN(dstlen - 1, len));
122
+	dst[MIN(dstlen - 1, len)] = 0;
123
+    } else {
124
+	dst = (char *) malloc(len + 1);
125
+	if(!dst)
126
+	    return NULL;
127
+	strncpy(dst, str, len - 4);
128
+	dst[MIN(dstlen - 1, len - 4)] = 0;
126 129
     }
130
+    return dst;
127 131
 }
128 132
 
129 133
 static int hexdump(void)
... ...
@@ -411,7 +415,7 @@ static int writeinfo(const char *dbname, const char *builder, const char *header
411 411
 {
412 412
 	FILE *fh;
413 413
 	unsigned int i, bytes;
414
-	char file[32], *pt;
414
+	char file[32], *pt, dbfile[32];
415 415
 	unsigned char digest[32], buffer[FILEBUFF];
416 416
 	SHA256_CTX ctx;
417 417
 
... ...
@@ -450,14 +454,15 @@ static int writeinfo(const char *dbname, const char *builder, const char *header
450 450
 	    free(pt);
451 451
 	}
452 452
     } else {
453
-	for(i = 0; dblist[i].name; i++) {
454
-	    if(!cli_strbcasestr(dblist[i].name, ".info") && strstr(dblist[i].name, dbname) && !access(dblist[i].name, R_OK)) {
455
-		if(!(pt = sha256file(dblist[i].name, &bytes))) {
453
+	for(i = 0; dblist[i].ext; i++) {
454
+	    snprintf(dbfile, sizeof(dbfile), "%s.%s", dbname, dblist[i].ext);
455
+	    if(strcmp(dblist[i].ext, "info") && !access(dbfile, R_OK)) {
456
+		if(!(pt = sha256file(dbfile, &bytes))) {
456 457
 		    mprintf("!writeinfo: Can't generate SHA256 for %s\n", file);
457 458
 		    fclose(fh);
458 459
 		    return -1;
459 460
 		}
460
-		if(fprintf(fh, "%s:%u:%s\n", dblist[i].name, bytes, pt) < 0) {
461
+		if(fprintf(fh, "%s:%u:%s\n", dbfile, bytes, pt) < 0) {
461 462
 		    mprintf("!writeinfo: Can't write to info file\n");
462 463
 		    fclose(fh);
463 464
 		    free(pt);
... ...
@@ -617,8 +622,9 @@ static int build(const struct optstruct *opts)
617 617
 	unsigned int i, sigs = 0, oldsigs = 0, entries = 0, version, real_header, fl;
618 618
 	struct stat foo;
619 619
 	unsigned char buffer[FILEBUFF];
620
-	char *tarfile, header[513], smbuff[32], builder[32], *pt, olddb[512], patch[32], broken[32];
621
-	const char *dbname, *newcvd, *localdbdir = NULL;
620
+	char *tarfile, header[513], smbuff[32], builder[32], *pt, olddb[512];
621
+	char patch[32], broken[32], dbname[32], dbfile[32];
622
+	const char *newcvd, *localdbdir = NULL;
622 623
         struct cl_engine *engine;
623 624
 	FILE *cvd, *fh;
624 625
 	gzFile *tar;
... ...
@@ -648,7 +654,7 @@ static int build(const struct optstruct *opts)
648 648
 	return -1;
649 649
     }
650 650
 
651
-    dbname = getdbname(optget(opts, "build")->strarg);
651
+    getdbname(optget(opts, "build")->strarg, dbname, sizeof(dbname));
652 652
     if(!strcmp(dbname, "bytecode"))
653 653
 	bc = 1;
654 654
 
... ...
@@ -714,9 +720,11 @@ static int build(const struct optstruct *opts)
714 714
 		entries += countlines("last.hdb");
715 715
 	    }
716 716
 	} else {
717
-	    for(i = 0; dblist[i].name; i++)
718
-		if(dblist[i].count && strstr(dblist[i].name, dbname) && !access(dblist[i].name, R_OK))
719
-		    entries += countlines(dblist[i].name);
717
+	    for(i = 0; dblist[i].ext; i++) {
718
+		snprintf(dbfile, sizeof(dbfile), "%s.%s", dbname, dblist[i].ext);
719
+		if(dblist[i].count && !access(dbfile, R_OK))
720
+		    entries += countlines(dbfile);
721
+	    }
720 722
 	}
721 723
 
722 724
 	if(entries != sigs)
... ...
@@ -871,9 +879,10 @@ static int build(const struct optstruct *opts)
871 871
 	    }
872 872
 	}
873 873
     } else {
874
-	for(i = 0; dblist[i].name; i++) {
875
-	    if(strstr(dblist[i].name, dbname) && !access(dblist[i].name, R_OK)) {
876
-		if(tar_addfile(-1, tar, dblist[i].name) == -1) {
874
+	for(i = 0; dblist[i].ext; i++) {
875
+	    snprintf(dbfile, sizeof(dbfile), "%s.%s", dbname, dblist[i].ext);
876
+	    if(!access(dbfile, R_OK)) {
877
+		if(tar_addfile(-1, tar, dbfile) == -1) {
877 878
 		    gzclose(tar);
878 879
 		    unlink(tarfile);
879 880
 		    free(tarfile);
... ...
@@ -1474,7 +1483,7 @@ static int comparesha(const char *dbname)
1474 1474
 	int ret = 0, tokens_count;
1475 1475
 
1476 1476
 
1477
-    snprintf(info, sizeof(info), "%s.info", getdbname(dbname));
1477
+    snprintf(info, sizeof(info), "%s.info", getdbname(dbname, buff, 32));
1478 1478
 
1479 1479
     if(!(fh = fopen(info, "rb"))) {
1480 1480
 	mprintf("!verifydiff: Can't open %s\n", info);
... ...
@@ -1712,6 +1721,7 @@ static int compare(const char *oldpath, const char *newpath, FILE *diff)
1712 1712
 	if(!badxchg) {
1713 1713
 	    while(fgets(obuff, l1, old)) {
1714 1714
 		oline++;
1715
+		cli_chomp(obuff);
1715 1716
 		obuff[MIN(16, l1-1)] = 0;
1716 1717
 		if((pt = strchr(obuff, ' ')))
1717 1718
 		    *pt = 0;
... ...
@@ -2574,7 +2584,7 @@ static int diffdirs(const char *old, const char *new, const char *patch)
2574 2574
 
2575 2575
 static int makediff(const struct optstruct *opts)
2576 2576
 {
2577
-	char *odir, *ndir, name[32], broken[32];
2577
+	char *odir, *ndir, name[32], broken[32], dbname[32];
2578 2578
 	struct cl_cvd *cvd;
2579 2579
 	unsigned int oldver, newver;
2580 2580
 	int ret;
... ...
@@ -2648,7 +2658,7 @@ static int makediff(const struct optstruct *opts)
2648 2648
 	return -1;
2649 2649
     }
2650 2650
 
2651
-    snprintf(name, sizeof(name), "%s-%u.script", getdbname(opts->filename[0]), newver);
2651
+    snprintf(name, sizeof(name), "%s-%u.script", getdbname(opts->filename[0], dbname, sizeof(dbname)), newver);
2652 2652
     ret = diffdirs(odir, ndir, name);
2653 2653
 
2654 2654
     cli_rmdirs(odir);