- dbx folder names extractor
- dbx folder names extractor
git-svn-id: https://siedziba.pl:790/svn/repos/dbxrecover@279 455248ca-bdda-0310-9134-f4ebb693071a
diff --git a/dbxinfo b/dbxinfo
new file mode 100755
index 0000000..816bc42
--- /dev/null
+++ b/dbxinfo
@@ -0,0 +1,50 @@
+#!/usr/bin/perl
+
+# a utility for extracting folder names from dbx files
+
+use strict;
+use IO::File;
+
+my $file;
+for(@ARGV)
+{
+ my $filename = $_;
+ $file = IO::File->new("<$filename");
+ $file->binmode();
+ my $header;
+ $file->read($header, 0x24bc);
+ (my $magic, my $clsid, my $unknown, my $fileinfolen) = unpack("VVA20V", $header);
+ if ($magic != 0xfe12adcf)
+ {
+ print STDERR "$filename doesn't look like an outlook dbx file. Skipping...\n";
+ next;
+ }
+ if ($clsid != 0x6f74fdc5)
+ {
+ print STDERR "$filename doesn't look like a message database file. Skipping...\n";
+ next;
+ }
+ if (($fileinfolen < 0) || ($fileinfolen > 100000))
+ {
+ $fileinfolen = 100000;
+ print STDERR "Warning: $filename has unexpected file info object length: $fileinfolen.\n";
+ }
+
+ my $fileinfo;
+ $file->read($fileinfo, $fileinfolen);
+ (my $magic, my $srctype, my $regkey, my $foldername) = unpack("VCa256a256", $fileinfo);
+ if ($magic != 0x00000001)
+ {
+ print STDERR "$filename doesn't seem to have a valid info header. Skipping...\n";
+ next;
+ }
+ if ($srctype != 3)
+ {
+ print STDERR "$filename doesn't look like a local message store. Skipping...\n";
+ next;
+ }
+ $foldername =~ s/\0//g;
+ printf "$filename\t$foldername\n";
+} continue {
+ $file->close();
+}