This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Upgrade to Devel::PPPort 3.06_01
[perl5.git] / ext / DB_File / dbinfo
CommitLineData
a9fd575d
PM
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
PM
7# Version: 1.05
8# Date 1sh November 2003
a9fd575d 9#
6d02d21f 10# Copyright (c) 1998-2003 Paul Marquess. All rights reserved.
a9fd575d
PM
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
17use strict ;
18
19my %Data =
20 (
21 0x053162 => {
039d031f 22 Type => "Btree",
a9fd575d
PM
23 Versions =>
24 {
6d02d21f
PM
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
PM
34 }
35 },
36 0x061561 => {
039d031f 37 Type => "Hash",
a9fd575d
PM
38 Versions =>
39 {
6d02d21f
PM
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
PM
48 }
49 },
50 0x042253 => {
51 Type => "Queue",
52 Versions =>
53 {
6d02d21f
PM
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
PM
58 }
59 },
60 ) ;
61
62die "Usage: dbinfo file\n" unless @ARGV == 1 ;
63
64print "testing file $ARGV[0]...\n\n" ;
65open (F, "<$ARGV[0]") or die "Cannot open file $ARGV[0]: $!\n" ;
66
67my $buff ;
6d02d21f 68read F, $buff, 30 ;
a9fd575d 69
a9fd575d 70
6d02d21f
PM
71my (@info) = unpack("NNNNNNC", $buff) ;
72my (@info1) = unpack("VVVVVVC", $buff) ;
73my ($magic, $version, $endian, $encrypt) ;
74
75if ($Data{$info[0]}) # first try DB 1.x format, big endian
a9fd575d
PM
76{
77 $magic = $info[0] ;
78 $version = $info[1] ;
6d02d21f
PM
79 $endian = "Big Endian" ;
80 $encrypt = "Not Supported";
81}
82elsif ($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
PM
88}
89elsif ($Data{$info[3]}) # next DB 2.x big endian
90{
91 $magic = $info[3] ;
92 $version = $info[4] ;
93 $endian = "Big Endian" ;
94}
95elsif ($Data{$info1[3]}) # next DB 2.x little endian
96{
97 $magic = $info1[3] ;
98 $version = $info1[4] ;
99 $endian = "Little Endian" ;
100}
101else
102 { die "not a Berkeley DB database file.\n" }
103
104my $type = $Data{$magic} ;
73969f8f 105$magic = sprintf "%06X", $magic ;
a9fd575d
PM
106
107my $ver_string = "Unknown" ;
6d02d21f
PM
108
109if ( 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
PM
117
118print <<EOM ;
119File Type: Berkeley DB $type->{Type} file.
120File Version ID: $version
121Built with Berkeley DB: $ver_string
122Byte Order: $endian
123Magic: $magic
6d02d21f 124Encryption: $encrypt
a9fd575d
PM
125EOM
126
127close F ;
128
129exit ;