java/src/org/openantivirus/engine/vfs/container CompressedContainerFactory.java,1.3,1.4

Kurt Huwig <[email protected]> Sun, 30 May 2004 00:52:46 +0000
Newsgroups gmane.comp.security.virus.openantivirus.cvs
Message-ID <[email protected]>
Update of /cvsroot/openantivirus/java/src/org/openantivirus/engine/vfs/container
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv13916/src/org/openantivirus/engine/vfs/container

Modified Files:
	CompressedContainerFactory.java 
Log Message:
Added options for archives

Index: CompressedContainerFactory.java
===================================================================
RCS file: /cvsroot/openantivirus/java/src/org/openantivirus/engine/vfs/container/CompressedContainerFactory.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -d -r1.3 -r1.4
--- CompressedContainerFactory.java	23 May 2004 15:22:36 -0000	1.3
+++ CompressedContainerFactory.java	30 May 2004 00:52:44 -0000	1.4
@@ -88,18 +88,25 @@
             ZOO_MAGIC   = {(byte)0xdc, (byte)0xa7, (byte)0xc4, (byte)0xfd};
     
     public VfsContainer getContainer(VfsEntry entry,
-                                     ScanConfiguration configuration)
+                                     ScanConfiguration scanConf)
                                      throws IOException {
+        
+        if (!scanConf.getBoolean("vfs.archive.enable")) {
+            return null;
+        }
+        
         final byte[] start = entry.getStart();
         
         // ZIP
-        if (startsWithMagic(start, ZIP_MAGIC)) {
-            return new ZipContainer(entry, configuration);
+        if (scanConf.getBoolean("vfs.archive.zip")
+                && startsWithMagic(start, ZIP_MAGIC)) {
+            return new ZipContainer(entry, scanConf);
         }
         
         // BZIP2
-        if (startsWithMagic(start, BZIP2_MAGIC)) {
-            return new SingleFileContainer(entry, "bzip2", configuration) {
+        if (scanConf.getBoolean("vfs.archive.bzip2")
+                && startsWithMagic(start, BZIP2_MAGIC)) {
+            return new SingleFileContainer(entry, "bzip2", scanConf) {
                 public void extractFile(VfsEntry entry, File tempFile)
                 throws IOException {
                     runCommand(new String[] {
@@ -112,8 +119,9 @@
         }
         
         // GZIP
-        if (startsWithMagic(start, GZIP_MAGIC)) {
-            return new SingleFileContainer(entry, "gzip", configuration) {
+        if (scanConf.getBoolean("vfs.archive.gzip")
+                && startsWithMagic(start, GZIP_MAGIC)) {
+            return new SingleFileContainer(entry, "gzip", scanConf) {
                 public void extractFile(VfsEntry entry, File tempFile)
                 throws IOException {
                     copyStream(new GZIPInputStream(new FileInputStream(entry.getFile())),
@@ -123,8 +131,9 @@
         }
         
         // TAR
-        if (containsMagic(start, TAR_MAGIC, 257)) {
-            return new ArchiveContainer(entry, " >> tar:", configuration) {
+        if (scanConf.getBoolean("vfs.archive.tar")
+                && containsMagic(start, TAR_MAGIC, 257)) {
+            return new ArchiveContainer(entry, " >> tar:", scanConf) {
                 public void extractArchive(VfsEntry entry, File tempDir)
                 throws IOException {
                     runCommand(new String[] {
@@ -137,8 +146,9 @@
         }
         
         // Microsoft Cabinet
-        if (startsWithMagic(start, CAB_MAGIC)) {
-            return new ArchiveContainer(entry, " >> cab:", configuration) {
+        if (scanConf.getBoolean("vfs.archive.cab")
+                && startsWithMagic(start, CAB_MAGIC)) {
+            return new ArchiveContainer(entry, " >> cab:", scanConf) {
                 public void extractArchive(VfsEntry entry, File tempDir)
                 throws IOException {
                     runCommand(new String[] {
@@ -152,10 +162,11 @@
         
         // Self-extracting
         if (startsWithMagic(start, EXE_MAGIC)) {
-            if (containsMagic(start, RAR_MAGIC, 7195)) {
+            if (scanConf.getBoolean("vfs.archive.rar")
+                    && containsMagic(start, RAR_MAGIC, 7195)) {
                 return new ArchiveContainer(entry,
                                             " >> rar-exe:",
-                                            configuration) {
+                                            scanConf) {
                     public void extractArchive(VfsEntry entry, File tempDir)
                     throws IOException {
                         runCommand(new String[] {
@@ -167,29 +178,32 @@
                 };
             }
             
-            final File file = entry.getFile();
-            final RandomAccessFile raf = new RandomAccessFile(file, "r");
-            final UPXDecompress upxDecompress =
-                    new UPXDecompress(raf, file.length());
-            
-            boolean canUnpack;
-            try {
-                canUnpack = upxDecompress.canUnpack();
-            } catch (Exception e) {
-                // if anything goes wrong, we cannot unpack!
-                e.printStackTrace();
-                canUnpack = false;
-            }
-            if (canUnpack) {
-                return new UpxContainer(entry, upxDecompress, configuration);
-            } else {
-                raf.close();
+            if (scanConf.getBoolean("vfs.archive.upx")) {
+                final File file = entry.getFile();
+                final RandomAccessFile raf = new RandomAccessFile(file, "r");
+                final UPXDecompress upxDecompress =
+                        new UPXDecompress(raf, file.length());
+                
+                boolean canUnpack;
+                try {
+                    canUnpack = upxDecompress.canUnpack();
+                } catch (Exception e) {
+                    // if anything goes wrong, we cannot unpack!
+                    e.printStackTrace();
+                    canUnpack = false;
+                }
+                if (canUnpack) {
+                    return new UpxContainer(entry, upxDecompress, scanConf);
+                } else {
+                    raf.close();
+                }
             }
         }
         
         // ACE
-        if (containsMagic(start, ACE_MAGIC, 7)) {
-            return new ArchiveContainer(entry, " >> ace:", configuration) {
+        if (scanConf.getBoolean("vfs.archive.ace")
+                && containsMagic(start, ACE_MAGIC, 7)) {
+            return new ArchiveContainer(entry, " >> ace:", scanConf) {
                 public void extractArchive(VfsEntry entry, File tempDir)
                 throws IOException {
                     runCommand(new String[] {
@@ -202,8 +216,9 @@
         }
         
         // AR
-        if (startsWithMagic(start, AR_MAGIC)) {
-            return new ArchiveContainer(entry, " >> ar:", configuration) {
+        if (scanConf.getBoolean("vfs.archive.ar")
+                && startsWithMagic(start, AR_MAGIC)) {
+            return new ArchiveContainer(entry, " >> ar:", scanConf) {
                 public void extractArchive(VfsEntry entry, File tempDir)
                 throws IOException {
                     runCommand(new String[] {
@@ -216,8 +231,9 @@
         }
         
         // RAR
-        if (startsWithMagic(start, RAR_MAGIC)) {
-            return new ArchiveContainer(entry, " >> rar:", configuration) {
+        if (scanConf.getBoolean("vfs.archive.rar")
+                && startsWithMagic(start, RAR_MAGIC)) {
+            return new ArchiveContainer(entry, " >> rar:", scanConf) {
                 public void extractArchive(VfsEntry entry, File tempDir)
                 throws IOException {
                     runCommand(new String[] {
@@ -230,20 +246,21 @@
         }
         
         // LHA
-        if (containsMagic(start, LHA__MAGIC, 2)
-                || containsMagic(start, LHA0_MAGIC, 2)
-                || containsMagic(start, LHA1_MAGIC, 2)
-                || containsMagic(start, LHA2_MAGIC, 2)
-                || containsMagic(start, LHA3_MAGIC, 2)
-                || containsMagic(start, LHA4_MAGIC, 2)
-                || containsMagic(start, LHA5_MAGIC, 2)
-                || containsMagic(start, LHA6_MAGIC, 2)
-                || containsMagic(start, LHA7_MAGIC, 2)
-                || containsMagic(start, LHA7_MAGIC, 2)
-                || containsMagic(start, LHAD_MAGIC, 2)
-                || containsMagic(start, LHAZ4_MAGIC, 2)
-                || containsMagic(start, LHAZ5_MAGIC, 2)) {
-            return new ArchiveContainer(entry, " >> lha:", configuration) {
+        if (scanConf.getBoolean("vfs.archive.lha")
+                && (containsMagic(start, LHA__MAGIC, 2)
+                    || containsMagic(start, LHA0_MAGIC, 2)
+                    || containsMagic(start, LHA1_MAGIC, 2)
+                    || containsMagic(start, LHA2_MAGIC, 2)
+                    || containsMagic(start, LHA3_MAGIC, 2)
+                    || containsMagic(start, LHA4_MAGIC, 2)
+                    || containsMagic(start, LHA5_MAGIC, 2)
+                    || containsMagic(start, LHA6_MAGIC, 2)
+                    || containsMagic(start, LHA7_MAGIC, 2)
+                    || containsMagic(start, LHA7_MAGIC, 2)
+                    || containsMagic(start, LHAD_MAGIC, 2)
+                    || containsMagic(start, LHAZ4_MAGIC, 2)
+                    || containsMagic(start, LHAZ5_MAGIC, 2))) {
+            return new ArchiveContainer(entry, " >> lha:", scanConf) {
                 public void extractArchive(VfsEntry entry, File tempDir)
                 throws IOException {
                     runCommand(new String[] {
@@ -255,8 +272,9 @@
         }
         
         // ARJ
-        if (startsWithMagic(start, ARJ_MAGIC)) {
-            return new ArchiveContainer(entry, " >> arj:", configuration) {
+        if (scanConf.getBoolean("vfs.archive.arj")
+                && startsWithMagic(start, ARJ_MAGIC)) {
+            return new ArchiveContainer(entry, " >> arj:", scanConf) {
                 public void extractArchive(VfsEntry entry, File tempDir)
                 throws IOException {
                     runCommand(new String[] {
@@ -269,8 +287,9 @@
         }
         
         // ZOO
-        if (containsMagic(start, ZOO_MAGIC, 0x14)) {
-            return new ArchiveContainer(entry, " >> zoo:", configuration) {
+        if (scanConf.getBoolean("vfs.archive.zoo")
+                && containsMagic(start, ZOO_MAGIC, 0x14)) {
+            return new ArchiveContainer(entry, " >> zoo:", scanConf) {
                 public void extractArchive(VfsEntry entry, File tempDir)
                 throws IOException {
                     runCommand(new String[] {
@@ -284,12 +303,13 @@
         }
         
         // CPIO
-        if (startsWithMagic(start, CPIO_MAGIC)
-                || startsWithMagic(start, CPIOS_MAGIC)
-                || startsWithMagic(start, CPIO1_MAGIC)
-                || startsWithMagic(start, CPIO2_MAGIC)
-                || startsWithMagic(start, CPIO7_MAGIC)) {
-            return new ArchiveContainer(entry, " >> cpio:", configuration) {
+        if (scanConf.getBoolean("vfs.archive.cpio")
+                && (startsWithMagic(start, CPIO_MAGIC)
+                    || startsWithMagic(start, CPIOS_MAGIC)
+                    || startsWithMagic(start, CPIO1_MAGIC)
+                    || startsWithMagic(start, CPIO2_MAGIC)
+                    || startsWithMagic(start, CPIO7_MAGIC))) {
+            return new ArchiveContainer(entry, " >> cpio:", scanConf) {
                 public void extractArchive(VfsEntry entry, File tempDir)
                 throws IOException {
                     runCommand(new String[] {
@@ -303,8 +323,9 @@
         }
         
         // TNEF
-        if (startsWithMagic(start, TNEF_MAGIC)) {
-            return new ArchiveContainer(entry, " >> tnef:", configuration) {
+        if (scanConf.getBoolean("vfs.archive.tnef")
+                && startsWithMagic(start, TNEF_MAGIC)) {
+            return new ArchiveContainer(entry, " >> tnef:", scanConf) {
                 public void extractArchive(VfsEntry entry, File tempDir)
                 throws IOException {
                     runCommand(new String[] {
@@ -318,8 +339,9 @@
         }
         
         // SHAR
-        if (containsMagic(start, SHAR_MAGIC, 10)) {
-            return new ArchiveContainer(entry, " >> shar:", configuration) {
+        if (scanConf.getBoolean("vfs.archive.shar")
+                && containsMagic(start, SHAR_MAGIC, 10)) {
+            return new ArchiveContainer(entry, " >> shar:", scanConf) {
                 public void extractArchive(VfsEntry entry, File tempDir)
                 throws IOException {
                     runCommand(new String[] {
@@ -332,8 +354,9 @@
         }
         
         // UUENCODE
-        if (startsWithMagic(start, UUENC_MAGIC)) {
-            return new SingleFileContainer(entry, "uuencode", configuration) {
+        if (scanConf.getBoolean("vfs.archive.uuencode")
+                && startsWithMagic(start, UUENC_MAGIC)) {
+            return new SingleFileContainer(entry, "uuencode", scanConf) {
                 public void extractFile(VfsEntry entry, File tempFile)
                 throws IOException {
                     runCommand(new String[] {
@@ -347,8 +370,9 @@
         }
         
         // COMPRESS
-        if (startsWithMagic(start, COMPR_MAGIC)) {
-            return new SingleFileContainer(entry, "compress", configuration) {
+        if (scanConf.getBoolean("vfs.archive.compress")
+                && startsWithMagic(start, COMPR_MAGIC)) {
+            return new SingleFileContainer(entry, "compress", scanConf) {
                 public void extractFile(VfsEntry entry, File tempFile)
                 throws IOException {
                     runCommand(new String[] {
@@ -362,8 +386,9 @@
         }
         
         // RPM
-        if (startsWithMagic(start, RPM_MAGIC)) {
-            return new ArchiveContainer(entry, " >> rpm:", configuration) {
+        if (scanConf.getBoolean("vfs.archive.rpm")
+                && startsWithMagic(start, RPM_MAGIC)) {
+            return new ArchiveContainer(entry, " >> rpm:", scanConf) {
                 public void extractArchive(VfsEntry entry, File tempDir)
                 throws IOException {
                     runCommand(new String[] {
@@ -378,13 +403,14 @@
         }
         
         // ARC
-        if (startsWithMagic(start, ARC2_MAGIC)
-                || startsWithMagic(start, ARC3_MAGIC)
-                || startsWithMagic(start, ARC4_MAGIC)
-                || startsWithMagic(start, ARC6_MAGIC)
-                || startsWithMagic(start, ARC8_MAGIC)
-                || startsWithMagic(start, ARC9_MAGIC)) {
-            return new ArchiveContainer(entry, " >> arc:", configuration) {
+        if (scanConf.getBoolean("vfs.archive.arc")
+                && (startsWithMagic(start, ARC2_MAGIC)
+                    || startsWithMagic(start, ARC3_MAGIC)
+                    || startsWithMagic(start, ARC4_MAGIC)
+                    || startsWithMagic(start, ARC6_MAGIC)
+                    || startsWithMagic(start, ARC8_MAGIC)
+                    || startsWithMagic(start, ARC9_MAGIC))) {
+            return new ArchiveContainer(entry, " >> arc:", scanConf) {
                 public void extractArchive(VfsEntry entry, File tempDir)
                 throws IOException {
                     runCommand(new String[] {
@@ -397,8 +423,9 @@
         }
         
         // LZO
-        if (startsWithMagic(start, LZO_MAGIC)) {
-            return new SingleFileContainer(entry, "lzop", configuration) {
+        if (scanConf.getBoolean("vfs.archive.lzo")
+                && startsWithMagic(start, LZO_MAGIC)) {
+            return new SingleFileContainer(entry, "lzop", scanConf) {
                 public void extractFile(VfsEntry entry, File tempFile)
                 throws IOException {
                     runCommand(new String[] {
@@ -412,8 +439,9 @@
         }
         
         // PPMd
-        if (startsWithMagic(start, PPMD_MAGIC)) {
-            return new ArchiveContainer(entry, " >> ppmd:", configuration) {
+        if (scanConf.getBoolean("vfs.archive.ppmd")
+                && startsWithMagic(start, PPMD_MAGIC)) {
+            return new ArchiveContainer(entry, " >> ppmd:", scanConf) {
                 public void extractArchive(VfsEntry entry, File tempDir)
                 throws IOException {
                     final String tempFilename =
@@ -433,8 +461,9 @@
         }
         
         // DACT
-        if (startsWithMagic(start, DACT_MAGIC)) {
-            return new SingleFileContainer(entry, "dact", configuration) {
+        if (scanConf.getBoolean("vfs.archive.dact")
+                && startsWithMagic(start, DACT_MAGIC)) {
+            return new SingleFileContainer(entry, "dact", scanConf) {
                 public void extractFile(VfsEntry entry, File tempFile)
                 throws IOException {
                     runCommand(new String[] {
@@ -448,8 +477,9 @@
         }
         
         // DAR
-        if (startsWithMagic(start, DAR_MAGIC)) {
-            return new ArchiveContainer(entry, " >> dar:", configuration) {
+        if (scanConf.getBoolean("vfs.archive.dar")
+                && startsWithMagic(start, DAR_MAGIC)) {
+            return new ArchiveContainer(entry, " >> dar:", scanConf) {
                 public void extractArchive(VfsEntry entry, File tempDir)
                 throws IOException {
                     final String filename = entry.getFile().getCanonicalPath();



-------------------------------------------------------
This SF.Net email is sponsored by: Oracle 10g
Get certified on the hottest thing ever to hit the market... Oracle 10g. 
Take an Oracle 10g class now, and we'll give you the exam FREE.
http://ads.osdn.com/?ad_id=3149&alloc_id=8166&op=click