77
78
strncpy(name, block, 100);
81
if(strchr(name, '/')) {
82
cli_errmsg("Slash separators are not allowed in CVD.\n");
79
88
strcpy(fullname, destdir);
80
89
strcat(fullname, "/");
81
90
strcat(fullname, name);
238
if((i=fread(head, 1, 512, fd)) != 512) {
255
if((i = fread(head, 1, 512, fd)) != 512) {
239
256
cli_dbgmsg("Short read (%d) while reading CVD head from %s\n", i, file);
276
293
if((cvd = cl_cvdparse(head)) == NULL)
297
memcpy(cvdpt, cvd, sizeof(struct cl_cvd));
280
md5 = cli_md5stream(fd);
299
md5 = cli_md5stream(fd, NULL);
281
300
cli_dbgmsg("MD5(.tar.gz) = %s\n", md5);
283
302
if(strncmp(md5, cvd->md5, 32)) {
314
ret = cli_cvdverify(fd);
333
ret = cli_cvdverify(fd, NULL);
320
int cli_cvdload(FILE *fd, struct cl_node **root, int *virnum)
339
int cli_cvdload(FILE *fd, struct cl_node **root, unsigned int *signo, short warn)
322
341
char *dir, *tmp, *buffer;
327
348
cli_dbgmsg("in cli_cvdload()\n");
331
if((ret = cli_cvdverify(fd)))
352
if((ret = cli_cvdverify(fd, &cvd)))
355
if(cvd.stime && warn) {
357
if((int) stime - cvd.stime > 604800) {
358
cli_warnmsg("**************************************************\n");
359
cli_warnmsg("*** The virus database is older than 7 days. ***\n");
360
cli_warnmsg("*** Please update it IMMEDIATELY! ***\n");
361
cli_warnmsg("**************************************************\n");
365
if(cvd.fl > cl_retflevel()) {
366
cli_warnmsg("********************************************************\n");
367
cli_warnmsg("*** This version of the ClamAV engine is outdated. ***\n");
368
cli_warnmsg("*** DON'T PANIC! Read http://www.clamav.net/faq.html ***\n");
369
cli_warnmsg("********************************************************\n");
334
372
fseek(fd, 512, SEEK_SET);
336
tmpdir = getenv("TMPDIR");
345
dir = cl_gentemp(tmpdir);
374
dir = cli_gentemp(NULL);
346
375
if(mkdir(dir, 0700)) {
347
376
cli_errmsg("cli_cvdload(): Can't create temporary directory %s\n", dir);
348
377
return CL_ETMPDIR;
369
398
return CL_ETMPFILE;
372
if(!(buffer = (char *) cli_malloc(FILEBUFF)))
401
if(!(buffer = (char *) cli_malloc(FILEBUFF))) {
375
408
while((bytes = fread(buffer, 1, FILEBUFF, fd)) > 0)
376
409
fwrite(buffer, 1, bytes, tmpd);
381
414
fseek(tmpd, 0L, SEEK_SET);
383
416
if(cli_untgz(fileno(tmpd), dir)) {
384
418
cli_errmsg("cli_cvdload(): Can't unpack CVD file.\n");
389
424
return CL_ECVDEXTR;
398
433
/* load extracted directory */
399
cl_loaddbdir(dir, root, virnum);
434
cl_loaddbdir(dir, root, signo);