From d55852b5652d03b1f654da65e5a11fa5f6e7f560 Mon Sep 17 00:00:00 2001 From: aCaB Date: Wed, 11 Aug 2010 12:33:42 +0200 Subject: [PATCH] clamav-for-windows: add dumb mode --- win32/clamav-for-windows/clscanapi.h | 3 ++- win32/clamav-for-windows/interface.c | 11 +++++++++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/win32/clamav-for-windows/clscanapi.h b/win32/clamav-for-windows/clscanapi.h index 4224e5bf1..dca83418e 100644 --- a/win32/clamav-for-windows/clscanapi.h +++ b/win32/clamav-for-windows/clscanapi.h @@ -184,8 +184,9 @@ extern "C" { * INPUT @param pEnginesFolder : path where defs are located * INPUT @param pTempRoot : path in which temporary files must be created * INPUT @param pLicenseKey : license key blob + * INPUT @param bLoadMinDefs : load minimal defs */ -int CLAMAPI Scan_Initialize(const wchar_t *pEnginesFolder, const wchar_t *pTempRoot, const wchar_t *pLicenseKey); +int CLAMAPI Scan_Initialize(const wchar_t *pEnginesFolder, const wchar_t *pTempRoot, const wchar_t *pLicenseKey, BOOL bLoadMinDefs); /* * MANDATORY SUPPORT diff --git a/win32/clamav-for-windows/interface.c b/win32/clamav-for-windows/interface.c index 65b8f5e25..fbbae88db 100644 --- a/win32/clamav-for-windows/interface.c +++ b/win32/clamav-for-windows/interface.c @@ -57,6 +57,8 @@ unsigned int ninsts_total = 0; unsigned int ninsts_avail = 0; HANDLE instance_mutex; +BOOL minimal_definitions = FALSE; + #define lock_engine()(WaitForSingleObject(engine_mutex, INFINITE) == WAIT_FAILED) #define unlock_engine() do {ReleaseMutex(engine_mutex);} while(0) @@ -176,7 +178,7 @@ BOOL interface_setup(void) { } static int sigload_callback(const char *type, const char *name, void *context) { - if(!strncmp(name, "Exploit.PDF", 11) || !strncmp(name, "DOS.", 4) || !strcmp(type, "db")) /* FIXME */ + if(minimal_definitions && strcmp(type, "fp")) return 1; return 0; } @@ -249,7 +251,7 @@ static void free_engine_and_unlock(void) { unlock_engine(); } -int CLAMAPI Scan_Initialize(const wchar_t *pEnginesFolder, const wchar_t *pTempRoot, const wchar_t *pLicenseKey) { +int CLAMAPI Scan_Initialize(const wchar_t *pEnginesFolder, const wchar_t *pTempRoot, const wchar_t *pLicenseKey, BOOL bLoadMinDefs) { char tmpdir[PATH_MAX]; BOOL cant_convert; int ret; @@ -272,6 +274,11 @@ int CLAMAPI Scan_Initialize(const wchar_t *pEnginesFolder, const wchar_t *pTempR } cl_engine_set_clcb_pre_scan(engine, prescan_cb); cl_engine_set_clcb_post_scan(engine, postscan_cb); + + minimal_definitions = bLoadMinDefs; + if(bLoadMinDefs) + logg("!MINIMAL DEFINITIONS MODE ON!"); + if(!WideCharToMultiByte(CP_ACP, WC_NO_BEST_FIT_CHARS, pTempRoot, -1, tmpdir, sizeof(tmpdir), NULL, &cant_convert) || cant_convert) { free_engine_and_unlock(); FAIL(CL_EARG, "Can't translate pTempRoot");