Browse code

include CVD header at the top of db.info file

git-svn: trunk@2050

Tomasz Kojm authored on 2006/06/28 22:11:03
Showing 2 changed files
... ...
@@ -1,3 +1,8 @@
1
+Wed Jun 28 15:06:08 CEST 2006 (tk)
2
+----------------------------------
3
+  * sigtool/sigtool.c: include CVD header (without MD5 and digital signature)
4
+		       at the top of db.info file
5
+
1 6
 Wed Jun 28 00:00:50 CEST 2006 (tk)
2 7
 ----------------------------------
3 8
   * sigtool: --diff: initial version of update script generator
... ...
@@ -263,7 +263,7 @@ static char *getdsig(const char *host, const char *user, const char *data)
263 263
     return strdup(pt);
264 264
 }
265 265
 
266
-static int writeinfo(const char *db, unsigned int ver)
266
+static int writeinfo(const char *db, const char *header)
267 267
 {
268 268
 	FILE *fh;
269 269
 	int i;
... ...
@@ -285,8 +285,8 @@ static int writeinfo(const char *db, unsigned int ver)
285 285
 	return -1;
286 286
     }
287 287
 
288
-    if(fprintf(fh, "%s:%u\n", db, ver) < 0) {
289
-	mprintf("!writeinfo: Can't write to info file\n");
288
+    if(fprintf(fh, "%s\n", header) < 0) {
289
+	mprintf("!writeinfo: Can't write to %s\n", file);
290 290
 	fclose(fh);
291 291
 	return -1;
292 292
     }
... ...
@@ -317,10 +317,10 @@ static int build(struct optstruct *opt)
317 317
 {
318 318
 	int ret;
319 319
 	size_t bytes;
320
-	unsigned int sigs = 0, lines = 0, version;
320
+	unsigned int sigs = 0, lines = 0, version, real_header;
321 321
 	struct stat foo;
322 322
 	char buffer[FILEBUFF], *tarfile, *gzfile, header[513],
323
-	     smbuff[30], *pt, *dbdir;
323
+	     smbuff[30], builder[32], *pt, *dbdir;
324 324
         struct cl_node *root = NULL;
325 325
 	FILE *tar, *cvd;
326 326
 	gzFile *gz;
... ...
@@ -397,17 +397,61 @@ static int build(struct optstruct *opt)
397 397
 	scanf("%u", &version);
398 398
     }
399 399
 
400
+    strcpy(header, "ClamAV-VDB:");
401
+
402
+    /* time */
403
+    time(&timet);
404
+    brokent = localtime(&timet);
405
+    setlocale(LC_TIME, "C");
406
+    strftime(smbuff, sizeof(smbuff), "%d %b %Y %H-%M %z", brokent);
407
+    strcat(header, smbuff);
408
+
409
+    /* version */
410
+    sprintf(smbuff, ":%d:", version);
411
+    strcat(header, smbuff);
412
+
413
+    /* number of signatures */
414
+    sprintf(smbuff, "%d:", sigs);
415
+    strcat(header, smbuff);
416
+
417
+    /* functionality level */
418
+    sprintf(smbuff, "%d:", cl_retflevel());
419
+    strcat(header, smbuff);
420
+
421
+    real_header = strlen(header);
422
+
423
+    /* add fake MD5 and dsig (for writeinfo) */
424
+    strcat(header, "X:X:");
425
+
426
+    /* ask for builder name */
427
+    fflush(stdin);
428
+    mprintf("Builder name: ");
429
+    if(fgets(builder, sizeof(builder), stdin)) {
430
+	cli_chomp(builder);
431
+    } else {
432
+	mprintf("!build: Can't get builder name\n");
433
+	return -1;
434
+    }
435
+
436
+    /* add builder */
437
+    strcat(header, builder);
438
+
439
+    /* add current time */
440
+    sprintf(header + strlen(header), ":%d", (int) timet);
441
+
400 442
     pt = opt_arg(opt, "build");
401 443
     if(strstr(pt, "main"))
402 444
 	pt = "main";
403 445
     else
404 446
 	pt = "daily";
405 447
 
406
-    if(writeinfo(pt, version) == -1) {
448
+    if(writeinfo(pt, header) == -1) {
407 449
 	mprintf("!build: Can't generate info file\n");
408 450
 	return -1;
409 451
     }
410 452
 
453
+    header[real_header] = 0;
454
+
411 455
     if(!(tarfile = cli_gentemp("."))) {
412 456
 	mprintf("!build: Can't generate temporary name for tarfile\n");
413 457
 	return -1;
... ...
@@ -480,28 +524,6 @@ static int build(struct optstruct *opt)
480 480
     unlink(tarfile);
481 481
     free(tarfile);
482 482
 
483
-    /* build header */
484
-    strcpy(header, "ClamAV-VDB:");
485
-
486
-    /* time */
487
-    time(&timet);
488
-    brokent = localtime(&timet);
489
-    setlocale(LC_TIME, "C");
490
-    strftime(smbuff, sizeof(smbuff), "%d %b %Y %H-%M %z", brokent);
491
-    strcat(header, smbuff);
492
-
493
-    /* increment version number by one */
494
-    sprintf(smbuff, ":%d:", version);
495
-    strcat(header, smbuff);
496
-
497
-    /* number of signatures */
498
-    sprintf(smbuff, "%d:", sigs);
499
-    strcat(header, smbuff);
500
-
501
-    /* functionality level */
502
-    sprintf(smbuff, "%d:", cl_retflevel());
503
-    strcat(header, smbuff);
504
-
505 483
     /* MD5 */
506 484
     if(!(pt = cli_md5file(gzfile))) {
507 485
 	mprintf("!build: Can't generate MD5 checksum for gzfile\n");
... ...
@@ -513,18 +535,6 @@ static int build(struct optstruct *opt)
513 513
     free(pt);
514 514
     strcat(header, ":");
515 515
 
516
-    /* ask for builder name */
517
-    fflush(stdin);
518
-    mprintf("Builder name: ");
519
-    if(fgets(smbuff, sizeof(smbuff), stdin)) {
520
-	cli_chomp(smbuff);
521
-    } else {
522
-	mprintf("!build: Can't get builder name\n");
523
-	unlink(gzfile);
524
-	free(gzfile);
525
-	return -1;
526
-    }
527
-
528 516
     /* digital signature */
529 517
     if(!(tar = fopen(gzfile, "rb"))) {
530 518
 	mprintf("!build: Can't open file %s for reading\n", gzfile);
... ...
@@ -542,7 +552,7 @@ static int build(struct optstruct *opt)
542 542
     free(pt);
543 543
     rewind(tar);
544 544
 
545
-    if(!(pt = getdsig(opt_arg(opt, "server"), smbuff, buffer))) {
545
+    if(!(pt = getdsig(opt_arg(opt, "server"), builder, buffer))) {
546 546
 	mprintf("!build: Can't get digital signature from remote server\n");
547 547
 	unlink(gzfile);
548 548
 	free(gzfile);
... ...
@@ -554,7 +564,7 @@ static int build(struct optstruct *opt)
554 554
     strcat(header, ":");
555 555
 
556 556
     /* add builder */
557
-    strcat(header, smbuff);
557
+    strcat(header, builder);
558 558
 
559 559
     /* add current time */
560 560
     sprintf(header + strlen(header), ":%d", (int) timet);