Browse code

make the sigload callback be aware of custom sigs

aCaB authored on 2011/06/15 02:04:02
Showing 4 changed files
... ...
@@ -261,11 +261,12 @@ CL_VIRUS = Blacklisted by callback - scan result is set to CL_VIRUS
261 261
 extern void cl_engine_set_clcb_post_scan(struct cl_engine *engine, clcb_post_scan callback);
262 262
 
263 263
 
264
-typedef int (*clcb_sigload)(const char *type, const char *name, void *context);
264
+typedef int (*clcb_sigload)(const char *type, const char *name, unsigned int custom, void *context);
265 265
 /* SIGNATURE LOAD
266 266
 Input:
267 267
 type = The signature type (e.g. "db", "ndb", "mdb", etc.)
268 268
 name = The virus name
269
+custom = The signature is official (custom == 0) or custom (custom != 0)
269 270
 context = Opaque application provided data
270 271
 
271 272
 Output:
... ...
@@ -573,7 +573,7 @@ static int cli_loaddb(FILE *fs, struct cl_engine *engine, unsigned int *signo, u
573 573
 	if(engine->ignored && cli_chkign(engine->ignored, start, buffer_cpy))
574 574
 	    continue;
575 575
 
576
-	if(engine->cb_sigload && engine->cb_sigload("db", start, engine->cb_sigload_ctx)) {
576
+	if(engine->cb_sigload && engine->cb_sigload("db", start, options & CL_DB_OFFICIAL, engine->cb_sigload_ctx)) {
577 577
 	    cli_dbgmsg("cli_loaddb: skipping %s due to callback\n", start);
578 578
 	    continue;
579 579
 	}
... ...
@@ -652,7 +652,7 @@ static int cli_loadidb(FILE *fs, struct cl_engine *engine, unsigned int *signo,
652 652
 	if(engine->ignored && cli_chkign(engine->ignored, tokens[0], buffer_cpy))
653 653
 	    continue;
654 654
 
655
-	if(engine->cb_sigload && engine->cb_sigload("idb", tokens[0], engine->cb_sigload_ctx)) {
655
+	if(engine->cb_sigload && engine->cb_sigload("idb", tokens[0], options & CL_DB_OFFICIAL, engine->cb_sigload_ctx)) {
656 656
 	    cli_dbgmsg("cli_loadidb: skipping %s due to callback\n", tokens[0]);
657 657
 	    continue;
658 658
 	}
... ...
@@ -926,7 +926,7 @@ static int cli_loadndb(FILE *fs, struct cl_engine *engine, unsigned int *signo,
926 926
 	if(engine->ignored && cli_chkign(engine->ignored, virname, buffer_cpy))
927 927
 	    continue;
928 928
 
929
-	if(!sdb && engine->cb_sigload && engine->cb_sigload("ndb", virname, engine->cb_sigload_ctx)) {
929
+	if(!sdb && engine->cb_sigload && engine->cb_sigload("ndb", virname, options & CL_DB_OFFICIAL, engine->cb_sigload_ctx)) {
930 930
 	    cli_dbgmsg("cli_loadndb: skipping %s due to callback\n", virname);
931 931
 	    continue;
932 932
 	}
... ...
@@ -1235,7 +1235,7 @@ static int load_oneldb(char *buffer, int chkpua, int chkign, struct cl_engine *e
1235 1235
     if (chkign && cli_chkign(engine->ignored, virname, buffer_cpy))
1236 1236
 	return CL_SUCCESS;
1237 1237
 
1238
-    if(engine->cb_sigload && engine->cb_sigload("ldb", virname, engine->cb_sigload_ctx)) {
1238
+    if(engine->cb_sigload && engine->cb_sigload("ldb", virname, options & CL_DB_OFFICIAL, engine->cb_sigload_ctx)) {
1239 1239
 	cli_dbgmsg("cli_loadldb: skipping %s due to callback\n", virname);
1240 1240
 	(*sigs)--;
1241 1241
 	return CL_SUCCESS;
... ...
@@ -1443,7 +1443,7 @@ static int cli_loadcbc(FILE *fs, struct cl_engine *engine, unsigned int *signo,
1443 1443
 	return CL_SUCCESS;
1444 1444
     }
1445 1445
 
1446
-    if(engine->cb_sigload && engine->cb_sigload("cbc", dbname, engine->cb_sigload_ctx)) {
1446
+    if(engine->cb_sigload && engine->cb_sigload("cbc", dbname, options & CL_DB_OFFICIAL, engine->cb_sigload_ctx)) {
1447 1447
 	cli_dbgmsg("cli_loadcbc: skipping %s due to callback\n", dbname);
1448 1448
 	return CL_SUCCESS;
1449 1449
     }
... ...
@@ -1948,7 +1948,7 @@ static int cli_loadhash(FILE *fs, struct cl_engine *engine, unsigned int *signo,
1948 1948
 		dot = dbname;
1949 1949
 	    else
1950 1950
 		dot++;
1951
-	    if(engine->cb_sigload(dot, pt, engine->cb_sigload_ctx)) {
1951
+	    if(engine->cb_sigload(dot, pt, options & CL_DB_OFFICIAL, engine->cb_sigload_ctx)) {
1952 1952
 		cli_dbgmsg("cli_loadhash: skipping %s (%s) due to callback\n", pt, dot);
1953 1953
 	        continue;
1954 1954
 	    }
... ...
@@ -2090,7 +2090,7 @@ static int cli_loadmd(FILE *fs, struct cl_engine *engine, unsigned int *signo, i
2090 2090
 	    continue;
2091 2091
 	}
2092 2092
 
2093
-	if(engine->cb_sigload && engine->cb_sigload("md", new->virname, engine->cb_sigload_ctx)) {
2093
+	if(engine->cb_sigload && engine->cb_sigload("md", new->virname, options & CL_DB_OFFICIAL, engine->cb_sigload_ctx)) {
2094 2094
 	    cli_dbgmsg("cli_loadmd: skipping %s due to callback\n", new->virname);
2095 2095
 	    mpool_free(engine->mempool, new->virname);
2096 2096
 	    mpool_free(engine->mempool, new);
... ...
@@ -2230,7 +2230,7 @@ static int cli_loadcdb(FILE *fs, struct cl_engine *engine, unsigned int *signo,
2230 2230
 	    continue;
2231 2231
 	}
2232 2232
 
2233
-	if(engine->cb_sigload && engine->cb_sigload("cdb", new->virname, engine->cb_sigload_ctx)) {
2233
+	if(engine->cb_sigload && engine->cb_sigload("cdb", new->virname, options & CL_DB_OFFICIAL, engine->cb_sigload_ctx)) {
2234 2234
 	    cli_dbgmsg("cli_loadcdb: skipping %s due to callback\n", new->virname);
2235 2235
 	    mpool_free(engine->mempool, new->virname);
2236 2236
 	    mpool_free(engine->mempool, new);
... ...
@@ -441,7 +441,7 @@ int load_regex_matcher(struct cl_engine *engine,struct regex_matcher* matcher,FI
441 441
 		if(functionality_level_check(buffer))
442 442
 			continue;
443 443
 
444
-		if(engine->cb_sigload && engine->cb_sigload("phishing", buffer, engine->cb_sigload_ctx)) {
444
+		if(engine->cb_sigload && engine->cb_sigload("phishing", buffer, options & CL_DB_OFFICIAL, engine->cb_sigload_ctx)) {
445 445
 			cli_dbgmsg("load_regex_matcher: skipping %s due to callback\n", buffer);
446 446
 			continue;
447 447
 		}
... ...
@@ -250,8 +250,8 @@ BOOL interface_setup(void) {
250 250
     return TRUE;
251 251
 }
252 252
 
253
-static int sigload_callback(const char *type, const char *name, void *context) {
254
-    if(minimal_definitions && strcmp(type, "fp"))
253
+static int sigload_callback(const char *type, const char *name, unsigned int custom, void *context) {
254
+    if(minimal_definitions && (custom || strcmp(type, "fp")))
255 255
 	return 1;
256 256
     return 0;
257 257
 }