... | ... |
@@ -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); |