git-svn: trunk@2018
Tomasz Kojm authored on 2006/06/09 19:46:12... | ... |
@@ -1,3 +1,15 @@ |
1 |
+Fri Jun 9 12:29:15 CEST 2006 (tk) |
|
2 |
+---------------------------------- |
|
3 |
+ * shared/misc.c: add cvd_unpack() |
|
4 |
+ |
|
5 |
+Thu Jun 8 20:00:52 CEST 2006 (tk) |
|
6 |
+---------------------------------- |
|
7 |
+ * move rmdirs() from clamscan/treewalk.c to shared/misc.c |
|
8 |
+ |
|
9 |
+Thu Jun 8 19:00:12 CEST 2006 (tk) |
|
10 |
+---------------------------------- |
|
11 |
+ * libclamav/cvd.c: cleanup |
|
12 |
+ |
|
1 | 13 |
Wed Jun 7 13:29:22 BST 2006 (njh) |
2 | 14 |
---------------------------------- |
3 | 15 |
* libclamav/mbox.c: NEW_WORLD: Fast phish detection. |
... | ... |
@@ -38,6 +38,8 @@ |
38 | 38 |
#include "memory.h" |
39 | 39 |
#include "output.h" |
40 | 40 |
|
41 |
+#include "../libclamav/cvd.h" |
|
42 |
+ |
|
41 | 43 |
|
42 | 44 |
char *freshdbdir(void) |
43 | 45 |
{ |
... | ... |
@@ -119,7 +121,7 @@ int filecopy(const char *src, const char *dest) |
119 | 119 |
return -1; |
120 | 120 |
case 0: |
121 | 121 |
execl("/usr/bin/ditto", "ditto", "--rsrc", src, dest, NULL); |
122 |
- perror("execv(ditto)"); |
|
122 |
+ perror("execl(ditto)"); |
|
123 | 123 |
break; |
124 | 124 |
default: |
125 | 125 |
wait(NULL); |
... | ... |
@@ -218,3 +220,22 @@ int isnumb(const char *str) |
218 | 218 |
|
219 | 219 |
return 1; |
220 | 220 |
} |
221 |
+ |
|
222 |
+int cvd_unpack(const char *cvd, const char *destdir) |
|
223 |
+{ |
|
224 |
+ int fd; |
|
225 |
+ |
|
226 |
+ |
|
227 |
+ if((fd = open(cvd, O_RDONLY)) == -1) |
|
228 |
+ return -1; |
|
229 |
+ |
|
230 |
+ if(lseek(fd, 512, SEEK_SET) == -1) { |
|
231 |
+ close(fd); |
|
232 |
+ return -1; |
|
233 |
+ } |
|
234 |
+ |
|
235 |
+ if(cli_untgz(fd, destdir) == -1) /* cli_untgz() will close fd */ |
|
236 |
+ return -1; |
|
237 |
+ |
|
238 |
+ return 0; |
|
239 |
+} |
... | ... |
@@ -588,7 +588,6 @@ char *getdsig(const char *host, const char *user, const char *data) |
588 | 588 |
|
589 | 589 |
int unpack(struct optstruct *opt) |
590 | 590 |
{ |
591 |
- int fd; |
|
592 | 591 |
char *name, *dbdir; |
593 | 592 |
|
594 | 593 |
if(opt_check(opt, "unpack-current")) { |
... | ... |
@@ -599,24 +598,14 @@ int unpack(struct optstruct *opt) |
599 | 599 |
} else |
600 | 600 |
name = strdup(opt_arg(opt, "unpack")); |
601 | 601 |
|
602 |
- if((fd = open(name, O_RDONLY|O_BINARY)) == -1) { |
|
603 |
- logg("!Can't open CVD file %s\n", name); |
|
602 |
+ if(cvd_unpack(name, ".") == -1) { |
|
603 |
+ logg("!Can't unpack CVD file %s\n", name); |
|
604 | 604 |
free(name); |
605 | 605 |
opt_free(opt); |
606 | 606 |
exit(1); |
607 | 607 |
} |
608 | 608 |
|
609 | 609 |
free(name); |
610 |
- lseek(fd, 512, SEEK_SET); |
|
611 |
- |
|
612 |
- if(cli_untgz(fd, ".")) { |
|
613 |
- logg("!Can't unpack file.\n"); |
|
614 |
- close(fd); |
|
615 |
- opt_free(opt); |
|
616 |
- exit(1); |
|
617 |
- } |
|
618 |
- |
|
619 |
- close(fd); |
|
620 | 610 |
opt_free(opt); |
621 | 611 |
exit(0); |
622 | 612 |
} |