Browse code

missing stuff (-a !@(*&!(@*&)

Tomasz Kojm authored on 2009/07/08 22:05:22
Showing 9 changed files
... ...
@@ -1,3 +1,7 @@
1
+Wed Jul  8 14:59:14 CEST 2009 (tk)
2
+----------------------------------
3
+ * libclamav: initial support for Mach-O executables (part of bb#1592)
4
+
1 5
 Mon Jul  6 16:56:06 CEST 2009 (tk)
2 6
 ----------------------------------
3 7
  * test: add cpio test files
... ...
@@ -292,7 +292,9 @@ libclamav_la_SOURCES = \
292 292
 	bytecode_priv.h\
293 293
 	clambc.h \
294 294
 	cpio.c \
295
-	cpio.h
295
+	cpio.h \
296
+	macho.c \
297
+	macho.h
296 298
 
297 299
 if !LINK_TOMMATH
298 300
 libclamav_la_SOURCES += bignum.c \
... ...
@@ -122,7 +122,7 @@ am__libclamav_la_SOURCES_DIST = clamav.h matcher-ac.c matcher-ac.h \
122 122
 	jsparse/lexglobal.h jsparse/textbuf.h uniq.c uniq.h version.c \
123 123
 	version.h mpool.c mpool.h default.h sha256.c sha256.h bignum.h \
124 124
 	bytecode.c bytecode.h bytecode_vm.c bytecode_priv.h clambc.h \
125
-	cpio.c cpio.h bignum.c bignum_class.h
125
+	cpio.c cpio.h macho.c macho.h bignum.c bignum_class.h
126 126
 @LINK_TOMMATH_FALSE@am__objects_1 = libclamav_la-bignum.lo
127 127
 am_libclamav_la_OBJECTS = libclamav_la-matcher-ac.lo \
128 128
 	libclamav_la-matcher-bm.lo libclamav_la-matcher.lo \
... ...
@@ -161,7 +161,7 @@ am_libclamav_la_OBJECTS = libclamav_la-matcher-ac.lo \
161 161
 	libclamav_la-version.lo libclamav_la-mpool.lo \
162 162
 	libclamav_la-sha256.lo libclamav_la-bytecode.lo \
163 163
 	libclamav_la-bytecode_vm.lo libclamav_la-cpio.lo \
164
-	$(am__objects_1)
164
+	libclamav_la-macho.lo $(am__objects_1)
165 165
 libclamav_la_OBJECTS = $(am_libclamav_la_OBJECTS)
166 166
 libclamav_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
167 167
 	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(libclamav_la_CFLAGS) \
... ...
@@ -532,7 +532,8 @@ libclamav_la_SOURCES = clamav.h matcher-ac.c matcher-ac.h matcher-bm.c \
532 532
 	jsparse/js-norm.h jsparse/lexglobal.h jsparse/textbuf.h uniq.c \
533 533
 	uniq.h version.c version.h mpool.c mpool.h default.h sha256.c \
534 534
 	sha256.h bignum.h bytecode.c bytecode.h bytecode_vm.c \
535
-	bytecode_priv.h clambc.h cpio.c cpio.h $(am__append_7)
535
+	bytecode_priv.h clambc.h cpio.c cpio.h macho.c macho.h \
536
+	$(am__append_7)
536 537
 noinst_LTLIBRARIES = libclamav_internal_utils.la libclamav_internal_utils_nothreads.la
537 538
 COMMON_CLEANFILES = version.h version.h.tmp *.gcda *.gcno lzma/*.gcda lzma/*.gcno
538 539
 @MAINTAINER_MODE_TRUE@BUILT_SOURCES = jsparse/generated/operators.h jsparse/generated/keywords.h jsparse-keywords.gperf
... ...
@@ -671,6 +672,7 @@ distclean-compile:
671 671
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libclamav_la-js-norm.Plo@am__quote@
672 672
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libclamav_la-line.Plo@am__quote@
673 673
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libclamav_la-lzma_iface.Plo@am__quote@
674
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libclamav_la-macho.Plo@am__quote@
674 675
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libclamav_la-matcher-ac.Plo@am__quote@
675 676
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libclamav_la-matcher-bm.Plo@am__quote@
676 677
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libclamav_la-matcher.Plo@am__quote@
... ...
@@ -1266,6 +1268,13 @@ libclamav_la-cpio.lo: cpio.c
1266 1266
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
1267 1267
 @am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libclamav_la_CFLAGS) $(CFLAGS) -c -o libclamav_la-cpio.lo `test -f 'cpio.c' || echo '$(srcdir)/'`cpio.c
1268 1268
 
1269
+libclamav_la-macho.lo: macho.c
1270
+@am__fastdepCC_TRUE@	$(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libclamav_la_CFLAGS) $(CFLAGS) -MT libclamav_la-macho.lo -MD -MP -MF $(DEPDIR)/libclamav_la-macho.Tpo -c -o libclamav_la-macho.lo `test -f 'macho.c' || echo '$(srcdir)/'`macho.c
1271
+@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/libclamav_la-macho.Tpo $(DEPDIR)/libclamav_la-macho.Plo
1272
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='macho.c' object='libclamav_la-macho.lo' libtool=yes @AMDEPBACKSLASH@
1273
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
1274
+@am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libclamav_la_CFLAGS) $(CFLAGS) -c -o libclamav_la-macho.lo `test -f 'macho.c' || echo '$(srcdir)/'`macho.c
1275
+
1269 1276
 libclamav_la-bignum.lo: bignum.c
1270 1277
 @am__fastdepCC_TRUE@	$(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libclamav_la_CFLAGS) $(CFLAGS) -MT libclamav_la-bignum.lo -MD -MP -MF $(DEPDIR)/libclamav_la-bignum.Tpo -c -o libclamav_la-bignum.lo `test -f 'bignum.c' || echo '$(srcdir)/'`bignum.c
1271 1278
 @am__fastdepCC_TRUE@	mv -f $(DEPDIR)/libclamav_la-bignum.Tpo $(DEPDIR)/libclamav_la-bignum.Plo
... ...
@@ -73,6 +73,8 @@ static struct dconf_module modules[] = {
73 73
 
74 74
     { "ELF",	    NULL,	    0x1,		    1 },
75 75
 
76
+    { "MACHO",	    NULL,	    0x1,		    1 },
77
+
76 78
     { "ARCHIVE",    "RAR",	    ARCH_CONF_RAR,	    1 },
77 79
     { "ARCHIVE",    "ZIP",	    ARCH_CONF_ZIP,	    1 },
78 80
     { "ARCHIVE",    "GZIP",	    ARCH_CONF_GZ,	    1 },
... ...
@@ -135,6 +137,10 @@ struct cli_dconf *cli_dconf_init(void)
135 135
 	    if(modules[i].state)
136 136
 		dconf->elf |= modules[i].bflag;
137 137
 
138
+	} else if(!strcmp(modules[i].mname, "MACHO")) {
139
+	    if(modules[i].state)
140
+		dconf->macho |= modules[i].bflag;
141
+
138 142
 	} else if(!strcmp(modules[i].mname, "ARCHIVE")) {
139 143
 	    if(modules[i].state)
140 144
 		dconf->archive |= modules[i].bflag;
... ...
@@ -161,8 +167,8 @@ struct cli_dconf *cli_dconf_init(void)
161 161
 
162 162
 void cli_dconf_print(struct cli_dconf *dconf)
163 163
 {
164
-	uint8_t pe = 0, elf = 0, arch = 0, doc = 0, mail = 0, other = 0, phishing=0;
165
-	unsigned int i;
164
+	unsigned int pe = 0, elf = 0, macho = 0, arch = 0, doc = 0, mail = 0;
165
+	unsigned int other = 0, phishing = 0, i;
166 166
 
167 167
 
168 168
     cli_dbgmsg("Dynamic engine configuration settings:\n");
... ...
@@ -185,6 +191,12 @@ void cli_dconf_print(struct cli_dconf *dconf)
185 185
 		elf = 1;
186 186
 	    }
187 187
 
188
+	} else if(!strcmp(modules[i].mname, "MACHO")) {
189
+	    if(!macho) {
190
+		cli_dbgmsg("Module MACHO: %s\n", dconf->elf ? "On" : "Off");
191
+		macho = 1;
192
+	    }
193
+
188 194
 	} else if(!strcmp(modules[i].mname, "ARCHIVE")) {
189 195
 	    if(!arch) {
190 196
 		cli_dbgmsg("Module ARCHIVE: %s\n", dconf->archive ? "On" : "Off");
... ...
@@ -303,6 +315,15 @@ int cli_dconf_load(FILE *fs, struct cl_engine *engine, unsigned int options, str
303 303
 	    }
304 304
 	}
305 305
 
306
+	if(!strncmp(buffer, "MACHO:", 4) && chkflevel(buffer, 2)) {
307
+	    if(sscanf(buffer + 4, "0x%x", &val) == 1) {
308
+		engine->dconf->macho = val;
309
+	    } else {
310
+		ret = CL_EMALFDB;
311
+		break;
312
+	    }
313
+	}
314
+
306 315
 	if(!strncmp(buffer, "ARCHIVE:", 8) && chkflevel(buffer, 2)) {
307 316
 	    if(sscanf(buffer + 8, "0x%x", &val) == 1) {
308 317
 		engine->dconf->archive = val;
... ...
@@ -33,6 +33,7 @@
33 33
 struct cli_dconf {
34 34
     uint32_t pe;
35 35
     uint32_t elf;
36
+    uint32_t macho;
36 37
     uint32_t archive;
37 38
     uint32_t doc;
38 39
     uint32_t mail;
... ...
@@ -56,6 +56,7 @@ static const struct ftmap_s {
56 56
     { "CL_TYPE_ANY",		0			}, /* for ft-sigs */
57 57
     { "CL_TYPE_MSEXE",		CL_TYPE_MSEXE		},
58 58
     { "CL_TYPE_ELF",		CL_TYPE_ELF		},
59
+    { "CL_TYPE_MACHO",		CL_TYPE_MACHO		},
59 60
     { "CL_TYPE_POSIX_TAR",	CL_TYPE_POSIX_TAR	},
60 61
     { "CL_TYPE_OLD_TAR",	CL_TYPE_OLD_TAR		},
61 62
     { "CL_TYPE_CPIO_OLD",	CL_TYPE_CPIO_OLD	},
... ...
@@ -41,6 +41,7 @@ typedef enum {
41 41
     CL_TYPE_MSEXE,
42 42
     CL_TYPE_PE_DISASM,
43 43
     CL_TYPE_ELF,
44
+    CL_TYPE_MACHO,
44 45
     CL_TYPE_POSIX_TAR,
45 46
     CL_TYPE_OLD_TAR,
46 47
     CL_TYPE_CPIO_OLD,
... ...
@@ -45,7 +45,7 @@
45 45
  * in re-enabling affected modules.
46 46
  */
47 47
 
48
-#define CL_FLEVEL 44
48
+#define CL_FLEVEL 45
49 49
 #define CL_FLEVEL_DCONF	CL_FLEVEL
50 50
 
51 51
 extern uint8_t cli_debug_flag;
... ...
@@ -93,6 +93,7 @@
93 93
 #include "dlp.h"
94 94
 #include "default.h"
95 95
 #include "cpio.h"
96
+#include "macho.h"
96 97
 
97 98
 #ifdef HAVE_BZLIB_H
98 99
 #include <bzlib.h>
... ...
@@ -2084,6 +2085,11 @@ int cli_magic_scandesc(int desc, cli_ctx *ctx)
2084 2084
 		ret = cli_scanelf(desc, ctx);
2085 2085
 	    break;
2086 2086
 
2087
+	case CL_TYPE_MACHO:
2088
+	    if(ctx->dconf->macho)
2089
+		ret = cli_scanmacho(desc, ctx);
2090
+	    break;
2091
+
2087 2092
 	case CL_TYPE_SIS:
2088 2093
 	    if(SCAN_ARCHIVE && (DCONF_ARCH & ARCH_CONF_SIS))
2089 2094
 		ret = cli_scansis(desc, ctx);