- dbx folder names extractor

pp [2007-04-04 16:53:41]
- dbx folder names extractor


git-svn-id: https://siedziba.pl:790/svn/repos/dbxrecover@279 455248ca-bdda-0310-9134-f4ebb693071a
Filename
dbxinfo
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();
+}
ViewGit