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