Browse code

add collect hashes options to clamd and clamscan

aCaB authored on 2010/05/08 06:33:26
Showing 6 changed files
... ...
@@ -912,6 +912,11 @@ int recvloop_th(int *socketds, unsigned nsockets, struct cl_engine *engine, unsi
912 912
 	    options |= CL_SCAN_STRUCTURED_SSN_STRIPPED;
913 913
     }
914 914
 
915
+#ifdef HAVE__INTERNAL__SHA_COLLECT
916
+    if(optget(opts, "DevCollectHashes")->enabled)
917
+	options |= CL_SCAN_INTERNAL_COLLECT_SHA;
918
+#endif
919
+
915 920
     selfchk = optget(opts, "SelfCheck")->numarg;
916 921
     if(!selfchk) {
917 922
 	logg("Self checking disabled.\n");
... ...
@@ -523,6 +523,11 @@ int scanmanager(const struct optstruct *opts)
523 523
     if(optget(opts, "algorithmic-detection")->enabled)
524 524
 	options |= CL_SCAN_ALGORITHMIC;
525 525
 
526
+#ifdef HAVE__INTERNAL__SHA_COLLECT
527
+    if(optget(opts, "dev-collect-hashes")->enabled)
528
+	options |= CL_SCAN_INTERNAL_COLLECT_SHA;
529
+#endif
530
+
526 531
     if(optget(opts, "detect-structured")->enabled) {
527 532
 	options |= CL_SCAN_STRUCTURED;
528 533
 
... ...
@@ -109,6 +109,8 @@ typedef enum {
109 109
 #define CL_SCAN_PARTIAL_MESSAGE         0x40000
110 110
 #define CL_SCAN_HEURISTIC_PRECEDENCE    0x80000
111 111
 
112
+#define CL_SCAN_INTERNAL_COLLECT_SHA    0x80000000 /* Enables hash output in sha-collect builds - for internal use only */
113
+
112 114
 /* recommended scan settings */
113 115
 #define CL_SCAN_STDOPT		(CL_SCAN_ARCHIVE | CL_SCAN_MAIL | CL_SCAN_OLE2 | CL_SCAN_PDF | CL_SCAN_HTML | CL_SCAN_PE | CL_SCAN_ALGORITHMIC | CL_SCAN_ELF)
114 116
 
... ...
@@ -394,7 +394,7 @@ int cli_checkfp(unsigned char *digest, size_t size, cli_ctx *ctx)
394 394
     cli_dbgmsg("FP SIGNATURE: %s:%u:%s\n", md5, (unsigned int) size, *ctx->virname ? *ctx->virname : "Name");
395 395
 
396 396
 #ifdef HAVE__INTERNAL__SHA_COLLECT
397
-    if(ctx->sha_collect>0) {
397
+    if((ctx->options & CL_SCAN_INTERNAL_COLLECT_SHA) && ctx->sha_collect>0) {
398 398
         SHA1Context sha1;
399 399
         SHA256_CTX sha256;
400 400
         fmap_t *map = *ctx->fmap;
... ...
@@ -2345,7 +2345,7 @@ int cl_scandesc(int desc, const char **virname, unsigned long int *scanned, cons
2345 2345
     ctx.hook_lsig_matches = cli_bitset_init();
2346 2346
 
2347 2347
 #ifdef HAVE__INTERNAL__SHA_COLLECT
2348
-    do {
2348
+    if(scanoptions & CL_SCAN_INTERNAL_COLLECT_SHA) {
2349 2349
 	char link[32];
2350 2350
 	ssize_t linksz;
2351 2351
 
... ...
@@ -329,6 +329,10 @@ const struct clam_option __clam_options[] = {
329 329
 
330 330
     { "DevACDepth", "dev-ac-depth", 0, TYPE_NUMBER, MATCH_NUMBER, -1, NULL, FLAG_HIDDEN, OPT_CLAMD | OPT_CLAMSCAN, "", "" },
331 331
 
332
+#ifdef HAVE__INTERNAL__SHA_COLLECT
333
+    { "DevCollectHashes", "dev-collect-hashes", 0, TYPE_BOOL, MATCH_BOOL, -1, NULL, FLAG_HIDDEN, OPT_CLAMD | OPT_CLAMSCAN, "", "" },
334
+#endif
335
+
332 336
     /* Freshclam-only entries */
333 337
 
334 338
     /* FIXME: drop this entry and use LogFile */