1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141
|
#!/usr/bin/perl
# Name: dbinfo -- identify berkeley DB version used to create
# a database file
#
# Author: Paul Marquess <pmqs@cpan.org>
# Version: 1.07
# Date 2nd April 2011
#
# Copyright (c) 1998-2020 Paul Marquess. All rights reserved.
# This program is free software; you can redistribute it and/or
# modify it under the same terms as Perl itself.
# Todo: Print more stats on a db file, e.g. no of records
# add log/txn/lock files
use strict ;
my %Data =
(
0x053162 => # DB_BTREEMAGIC
{
Type => "Btree",
Versions => # DB_BTREEVERSION
{
1 => [0, "Unknown (older than 1.71)"],
2 => [0, "Unknown (older than 1.71)"],
3 => [0, "1.71 -> 1.85, 1.86"],
4 => [0, "Unknown"],
5 => [0, "2.0.0 -> 2.3.0"],
6 => [0, "2.3.1 -> 2.7.7"],
7 => [0, "3.0.x"],
8 => [0, "3.1.x -> 4.0.x"],
9 => [1, "4.1.x or greater"],
}
},
0x061561 => # DB_HASHMAGIC
{
Type => "Hash",
Versions => # DB_HASHVERSION
{
1 => [0, "Unknown (older than 1.71)"],
2 => [0, "1.71 -> 1.85"],
3 => [0, "1.86"],
4 => [0, "2.0.0 -> 2.1.0"],
5 => [0, "2.2.6 -> 2.7.7"],
6 => [0, "3.0.x"],
7 => [0, "3.1.x -> 4.0.x"],
8 => [1, "4.1.x or greater"],
9 => [1, "4.6.x or greater"],
}
},
0x042253 => # DB_QAMMAGIC
{
Type => "Queue",
Versions => # DB_QAMVERSION
{
1 => [0, "3.0.x"],
2 => [0, "3.1.x"],
3 => [0, "3.2.x -> 4.0.x"],
4 => [1, "4.1.x or greater"],
}
},
0x074582 => # DB_HEAPMAGIC
{
Type => "Heap",
Versions => # DB_HEAPVERSION
{
1 => [1, "5.2.x"],
}
},
) ;
die "Usage: dbinfo file\n" unless @ARGV == 1 ;
print "testing file $ARGV[0]...\n\n" ;
open (F, "<$ARGV[0]") or die "Cannot open file $ARGV[0]: $!\n" ;
my $buff ;
read F, $buff, 30 ;
my (@info) = unpack("NNNNNNC", $buff) ;
my (@info1) = unpack("VVVVVVC", $buff) ;
my ($magic, $version, $endian, $encrypt) ;
if ($Data{$info[0]}) # first try DB 1.x format, big endian
{
$magic = $info[0] ;
$version = $info[1] ;
$endian = "Big Endian" ;
$encrypt = "Not Supported";
}
elsif ($Data{$info1[0]}) # first try DB 1.x format, little endian
{
$magic = $info1[0] ;
$version = $info1[1] ;
$endian = "Little Endian" ;
$encrypt = "Not Supported";
}
elsif ($Data{$info[3]}) # next DB 2.x big endian
{
$magic = $info[3] ;
$version = $info[4] ;
$endian = "Big Endian" ;
}
elsif ($Data{$info1[3]}) # next DB 2.x little endian
{
$magic = $info1[3] ;
$version = $info1[4] ;
$endian = "Little Endian" ;
}
else
{ die "not a Berkeley DB database file.\n" }
my $type = $Data{$magic} ;
$magic = sprintf "%06X", $magic ;
my $ver_string = "Unknown" ;
if ( defined $type->{Versions}{$version} )
{
$ver_string = $type->{Versions}{$version}[1];
if ($type->{Versions}{$version}[0] )
{ $encrypt = $info[6] ? "Enabled" : "Disabled" }
else
{ $encrypt = "Not Supported" }
}
print <<EOM ;
File Type: Berkeley DB $type->{Type} file.
File Version ID: $version
Built with Berkeley DB: $ver_string
Byte Order: $endian
Magic: $magic
Encryption: $encrypt
EOM
close F ;
exit ;
|