71
80
#include "bytecode.h"
72
81
#include "bytecode_api_impl.h"
75
85
int (*cli_unrar_open)(int fd, const char *dirname, unrar_state_t *state);
76
86
int (*cli_unrar_extract_next_prepare)(unrar_state_t *state, const char *dirname);
393
/* Set up default stats/intel gathering callbacks */
394
intel = cli_calloc(1, sizeof(cli_intel_t));
396
#ifdef CL_THREAD_SAFE
397
if (pthread_mutex_init(&(intel->mutex), NULL)) {
398
cli_errmsg("cli_engine_new: Cannot initialize stats gathering mutex\n");
399
mpool_free(new->mempool, new->dconf);
400
mpool_free(new->mempool, new->root);
402
mpool_destroy(new->mempool);
410
intel->maxsamples = STATS_MAX_SAMPLES;
411
intel->maxmem = STATS_MAX_MEM;
413
new->stats_data = intel;
415
new->stats_data = NULL;
418
new->cb_stats_add_sample = NULL;
419
new->cb_stats_submit = NULL;
420
new->cb_stats_flush = clamav_stats_flush;
421
new->cb_stats_remove_sample = clamav_stats_remove_sample;
422
new->cb_stats_decrement_count = clamav_stats_decrement_count;
423
new->cb_stats_get_num = clamav_stats_get_num;
424
new->cb_stats_get_size = clamav_stats_get_size;
425
new->cb_stats_get_hostid = clamav_stats_get_hostid;
427
/* Setup raw disk image max settings */
428
new->maxpartitions = CLI_DEFAULT_MAXPARTITIONS;
430
/* Engine max settings */
431
new->maxiconspe = CLI_DEFAULT_MAXICONSPE;
381
433
cli_dbgmsg("Initialized %s engine\n", cl_retver());
468
520
case CL_ENGINE_FORCETODISK:
470
engine->forcetodisk = 1;
522
engine->engine_options |= ENGINE_OPTIONS_FORCE_TO_DISK;
472
engine->forcetodisk = 0;
524
engine->engine_options &= ~(ENGINE_OPTIONS_FORCE_TO_DISK);
474
526
case CL_ENGINE_BYTECODE_SECURITY:
475
527
if (engine->dboptions & CL_DB_COMPILED) {
494
546
if (num == CL_BYTECODE_MODE_TEST)
495
547
cli_infomsg(NULL, "bytecode engine in test mode\n");
549
case CL_ENGINE_DISABLE_CACHE:
551
engine->engine_options |= ENGINE_OPTIONS_DISABLE_CACHE;
553
engine->engine_options &= ~(ENGINE_OPTIONS_DISABLE_CACHE);
554
if (!(engine->cache))
555
cli_cache_init(engine);
558
case CL_ENGINE_DISABLE_PE_STATS:
560
engine->engine_options |= ENGINE_OPTIONS_DISABLE_PE_STATS;
562
engine->engine_options &= ~(ENGINE_OPTIONS_DISABLE_PE_STATS);
565
case CL_ENGINE_STATS_TIMEOUT:
566
if ((engine->stats_data)) {
567
cli_intel_t *intel = (cli_intel_t *)(engine->stats_data);
569
intel->timeout = (uint32_t)num;
572
case CL_ENGINE_MAX_PARTITIONS:
573
engine->maxpartitions = (uint32_t)num;
575
case CL_ENGINE_MAX_ICONSPE:
576
engine->maxiconspe = (uint32_t)num;
498
579
cli_errmsg("cl_engine_set_num: Incorrect field number\n");
552
633
case CL_ENGINE_KEEPTMP:
553
634
return engine->keeptmp;
554
635
case CL_ENGINE_FORCETODISK:
555
return engine->forcetodisk;
636
return engine->engine_options & ENGINE_OPTIONS_FORCE_TO_DISK;
556
637
case CL_ENGINE_BYTECODE_SECURITY:
557
638
return engine->bytecode_security;
558
639
case CL_ENGINE_BYTECODE_TIMEOUT:
559
640
return engine->bytecode_timeout;
560
641
case CL_ENGINE_BYTECODE_MODE:
561
642
return engine->bytecode_mode;
643
case CL_ENGINE_DISABLE_CACHE:
644
return engine->engine_options & ENGINE_OPTIONS_DISABLE_CACHE;
645
case CL_ENGINE_STATS_TIMEOUT:
646
return ((cli_intel_t *)(engine->stats_data))->timeout;
647
case CL_ENGINE_MAX_PARTITIONS:
648
return engine->maxpartitions;
649
case CL_ENGINE_MAX_ICONSPE:
650
return engine->maxiconspe;
563
652
cli_errmsg("cl_engine_get: Incorrect field number\n");
631
720
settings->ac_maxdepth = engine->ac_maxdepth;
632
721
settings->tmpdir = engine->tmpdir ? strdup(engine->tmpdir) : NULL;
633
722
settings->keeptmp = engine->keeptmp;
634
settings->forcetodisk = engine->forcetodisk;
635
723
settings->maxscansize = engine->maxscansize;
636
724
settings->maxfilesize = engine->maxfilesize;
637
725
settings->maxreclevel = engine->maxreclevel;
655
743
settings->cb_sigload_ctx = engine->cb_sigload_ctx;
656
744
settings->cb_hash = engine->cb_hash;
657
745
settings->cb_meta = engine->cb_meta;
746
settings->engine_options = engine->engine_options;
748
settings->cb_stats_add_sample = engine->cb_stats_add_sample;
749
settings->cb_stats_remove_sample = engine->cb_stats_remove_sample;
750
settings->cb_stats_decrement_count = engine->cb_stats_decrement_count;
751
settings->cb_stats_submit = engine->cb_stats_submit;
752
settings->cb_stats_flush = engine->cb_stats_flush;
753
settings->cb_stats_get_num = engine->cb_stats_get_num;
754
settings->cb_stats_get_size = engine->cb_stats_get_size;
755
settings->cb_stats_get_hostid = engine->cb_stats_get_hostid;
757
settings->maxpartitions = engine->maxpartitions;
759
settings->maxiconspe = engine->maxiconspe;
662
764
int cl_engine_settings_apply(struct cl_engine *engine, const struct cl_settings *settings)
664
768
engine->ac_only = settings->ac_only;
665
769
engine->ac_mindepth = settings->ac_mindepth;
666
770
engine->ac_maxdepth = settings->ac_maxdepth;
667
771
engine->keeptmp = settings->keeptmp;
668
engine->forcetodisk = settings->forcetodisk;
669
772
engine->maxscansize = settings->maxscansize;
670
773
engine->maxfilesize = settings->maxfilesize;
671
774
engine->maxreclevel = settings->maxreclevel;
680
783
engine->bytecode_security = settings->bytecode_security;
681
784
engine->bytecode_timeout = settings->bytecode_timeout;
682
785
engine->bytecode_mode = settings->bytecode_mode;
786
engine->engine_options = settings->engine_options;
684
788
if(engine->tmpdir)
685
789
mpool_free(engine->mempool, engine->tmpdir);
709
813
engine->cb_hash = settings->cb_hash;
710
814
engine->cb_meta = settings->cb_meta;
816
engine->cb_stats_add_sample = settings->cb_stats_add_sample;
817
engine->cb_stats_remove_sample = settings->cb_stats_remove_sample;
818
engine->cb_stats_decrement_count = settings->cb_stats_decrement_count;
819
engine->cb_stats_submit = settings->cb_stats_submit;
820
engine->cb_stats_flush = settings->cb_stats_flush;
821
engine->cb_stats_get_num = settings->cb_stats_get_num;
822
engine->cb_stats_get_size = settings->cb_stats_get_size;
823
engine->cb_stats_get_hostid = settings->cb_stats_get_hostid;
825
engine->maxpartitions = settings->maxpartitions;
827
engine->maxiconspe = settings->maxiconspe;
712
829
return CL_SUCCESS;
774
891
char *cli_hashstream(FILE *fs, unsigned char *digcpy, int type)
776
unsigned char digest[32];
790
sha256_init(&sha256);
792
while((bytes = fread(buff, 1, FILEBUFF, fs))) {
794
cli_md5_update(&md5, buff, bytes);
796
SHA1Update(&sha1, buff, bytes);
798
sha256_update(&sha256, buff, bytes);
802
cli_md5_final(digest, &md5);
804
} else if(type == 2) {
805
SHA1Final(&sha1, digest);
808
sha256_final(&sha256, digest);
893
unsigned char digest[32];
896
const char *alg=NULL;
915
ctx = cl_hash_init(alg);
919
while((bytes = fread(buff, 1, FILEBUFF, fs)))
920
cl_update_hash(ctx, buff, bytes);
922
cl_finish_hash(ctx, digest);
812
924
if(!(hashstr = (char *) cli_calloc(size*2 + 1, sizeof(char))))
816
928
for(i = 0; i < size; i++) {
817
sprintf(pt, "%02x", digest[i]);
929
sprintf(pt, "%02x", digest[i]);
822
memcpy(digcpy, digest, size);
934
memcpy(digcpy, digest, size);