#!./perl -w
# ID: %I%, %G%
use strict ;
use lib 't' ;
use BerkeleyDB;
use util ;
BEGIN
{
if ($BerkeleyDB::db_version < 4.1) {
print "1..0 # Skip: this needs Berkeley DB 4.1.x or better\n" ;
exit 0 ;
}
# Is encryption available?
my $env = new BerkeleyDB::Env @StdErrFile,
-Encrypt => {Password => "abc",
Flags => DB_ENCRYPT_AES
};
if ($BerkeleyDB::Error =~ /Operation not supported/)
{
print "1..0 # Skip: encryption support not present\n" ;
exit 0 ;
}
}
umask(0);
print "1..80\n";
{
eval
{
my $env = new BerkeleyDB::Env @StdErrFile,
-Encrypt => 1,
-Flags => DB_CREATE ;
};
ok 1, $@ =~ /^Encrypt parameter must be a hash reference at/;
eval
{
my $env = new BerkeleyDB::Env @StdErrFile,
-Encrypt => {},
-Flags => DB_CREATE ;
};
ok 2, $@ =~ /^Must specify Password and Flags with Encrypt parameter at/;
eval
{
my $env = new BerkeleyDB::Env @StdErrFile,
-Encrypt => {Password => "fred"},
-Flags => DB_CREATE ;
};
ok 3, $@ =~ /^Must specify Password and Flags with Encrypt parameter at/;
eval
{
my $env = new BerkeleyDB::Env @StdErrFile,
-Encrypt => {Flags => 1},
-Flags => DB_CREATE ;
};
ok 4, $@ =~ /^Must specify Password and Flags with Encrypt parameter at/;
eval
{
my $env = new BerkeleyDB::Env @StdErrFile,
-Encrypt => {Fred => 1},
-Flags => DB_CREATE ;
};
ok 5, $@ =~ /^\Qunknown key value(s) Fred at/;
}
{
# new BerkeleyDB::Env -Encrypt =>
# create an environment with a Home
my $home = "./fred" ;
#mkdir $home;
ok 6, my $lexD = new LexDir($home) ;
ok 7, my $env = new BerkeleyDB::Env @StdErrFile,
-Home => $home,
-Encrypt => {Password => "abc",
Flags => DB_ENCRYPT_AES
},
-Flags => DB_CREATE | DB_INIT_MPOOL ;
my $Dfile = "abc.enc";
my $lex = new LexFile $Dfile ;
my %hash ;
my ($k, $v) ;
ok 8, my $db = new BerkeleyDB::Hash -Filename => $Dfile,
-Env => $env,
-Flags => DB_CREATE,
-Property => DB_ENCRYPT ;
# create some data
my %data = (
"red" => 2,
"green" => "house",
"blue" => "sea",
) ;
my $ret = 0 ;
while (($k, $v) = each %data) {
$ret += $db->db_put($k, $v) ;
}
ok 9, $ret == 0 ;
# check there are three records
ok 10, countRecords($db) == 3 ;
undef $db;
# once the database is created, do not need to specify DB_ENCRYPT
ok 11, my $db1 = new BerkeleyDB::Hash -Filename => $Dfile,
-Env => $env,
-Flags => DB_CREATE ;
$v = '';
ok 12, ! $db1->db_get("red", $v) ;
ok 13, $v eq $data{"red"},
undef $db1;
undef $env;
# open a database without specifying encryption
ok 14, ! new BerkeleyDB::Hash -Filename => "$home/$Dfile";
ok 15, ! new BerkeleyDB::Env
-Home => $home,
-Encrypt => {Password => "def",
Flags => DB_ENCRYPT_AES
},
-Flags => DB_CREATE | DB_INIT_MPOOL ;
}
{
eval
{
my $env = new BerkeleyDB::Hash
-Encrypt => 1,
-Flags => DB_CREATE ;
};
ok 16, $@ =~ /^Encrypt parameter must be a hash reference at/;
eval
{
my $env = new BerkeleyDB::Hash
-Encrypt => {},
-Flags => DB_CREATE ;
};
ok 17, $@ =~ /^Must specify Password and Flags with Encrypt parameter at/;
eval
{
my $env = new BerkeleyDB::Hash
-Encrypt => {Password => "fred"},
-Flags => DB_CREATE ;
};
ok 18, $@ =~ /^Must specify Password and Flags with Encrypt parameter at/;
eval
{
my $env = new BerkeleyDB::Hash
-Encrypt => {Flags => 1},
-Flags => DB_CREATE ;
};
ok 19, $@ =~ /^Must specify Password and Flags with Encrypt parameter at/;
eval
{
my $env = new BerkeleyDB::Hash
-Encrypt => {Fred => 1},
-Flags => DB_CREATE ;
};
ok 20, $@ =~ /^\Qunknown key value(s) Fred at/;
}
{
eval
{
my $env = new BerkeleyDB::Btree
-Encrypt => 1,
-Flags => DB_CREATE ;
};
ok 21, $@ =~ /^Encrypt parameter must be a hash reference at/;
eval
{
my $env = new BerkeleyDB::Btree
-Encrypt => {},
-Flags => DB_CREATE ;
};
ok 22, $@ =~ /^Must specify Password and Flags with Encrypt parameter at/;
eval
{
my $env = new BerkeleyDB::Btree
-Encrypt => {Password => "fred"},
-Flags => DB_CREATE ;
};
ok 23, $@ =~ /^Must specify Password and Flags with Encrypt parameter at/;
eval
{
my $env = new BerkeleyDB::Btree
-Encrypt => {Flags => 1},
-Flags => DB_CREATE ;
};
ok 24, $@ =~ /^Must specify Password and Flags with Encrypt parameter at/;
eval
{
my $env = new BerkeleyDB::Btree
-Encrypt => {Fred => 1},
-Flags => DB_CREATE ;
};
ok 25, $@ =~ /^\Qunknown key value(s) Fred at/;
}
{
eval
{
my $env = new BerkeleyDB::Queue
-Encrypt => 1,
-Flags => DB_CREATE ;
};
ok 26, $@ =~ /^Encrypt parameter must be a hash reference at/;
eval
{
my $env = new BerkeleyDB::Queue
-Encrypt => {},
-Flags => DB_CREATE ;
};
ok 27, $@ =~ /^Must specify Password and Flags with Encrypt parameter at/;
eval
{
my $env = new BerkeleyDB::Queue
-Encrypt => {Password => "fred"},
-Flags => DB_CREATE ;
};
ok 28, $@ =~ /^Must specify Password and Flags with Encrypt parameter at/;
eval
{
my $env = new BerkeleyDB::Queue
-Encrypt => {Flags => 1},
-Flags => DB_CREATE ;
};
ok 29, $@ =~ /^Must specify Password and Flags with Encrypt parameter at/;
eval
{
my $env = new BerkeleyDB::Queue
-Encrypt => {Fred => 1},
-Flags => DB_CREATE ;
};
ok 30, $@ =~ /^\Qunknown key value(s) Fred at/;
}
{
eval
{
my $env = new BerkeleyDB::Recno
-Encrypt => 1,
-Flags => DB_CREATE ;
};
ok 31, $@ =~ /^Encrypt parameter must be a hash reference at/;
eval
{
my $env = new BerkeleyDB::Recno
-Encrypt => {},
-Flags => DB_CREATE ;
};
ok 32, $@ =~ /^Must specify Password and Flags with Encrypt parameter at/;
eval
{
my $env = new BerkeleyDB::Recno
-Encrypt => {Password => "fred"},
-Flags => DB_CREATE ;
};
ok 33, $@ =~ /^Must specify Password and Flags with Encrypt parameter at/;
eval
{
my $env = new BerkeleyDB::Recno
-Encrypt => {Flags => 1},
-Flags => DB_CREATE ;
};
ok 34, $@ =~ /^Must specify Password and Flags with Encrypt parameter at/;
eval
{
my $env = new BerkeleyDB::Recno
-Encrypt => {Fred => 1},
-Flags => DB_CREATE ;
};
ok 35, $@ =~ /^\Qunknown key value(s) Fred at/;
}
{
# new BerkeleyDB::Hash -Encrypt =>
my $Dfile = "abcd.enc";
my $lex = new LexFile $Dfile ;
my %hash ;
my ($k, $v) ;
ok 36, my $db = new BerkeleyDB::Hash
-Filename => $Dfile,
-Flags => DB_CREATE,
-Encrypt => {Password => "beta",
Flags => DB_ENCRYPT_AES
},
-Property => DB_ENCRYPT ;
# create some data
my %data = (
"red" => 2,
"green" => "house",
"blue" => "sea",
) ;
my $ret = 0 ;
while (($k, $v) = each %data) {
$ret += $db->db_put($k, $v) ;
}
ok 37, $ret == 0 ;
# check there are three records
ok 38, countRecords($db) == 3 ;
undef $db;
# attempt to open a database without specifying encryption
ok 39, ! new BerkeleyDB::Hash -Filename => $Dfile,
-Flags => DB_CREATE ;
# try opening with the wrong password
ok 40, ! new BerkeleyDB::Hash -Filename => $Dfile,
-Filename => $Dfile,
-Encrypt => {Password => "def",
Flags => DB_ENCRYPT_AES
},
-Property => DB_ENCRYPT ;
# read the encrypted data
ok 41, my $db1 = new BerkeleyDB::Hash -Filename => $Dfile,
-Filename => $Dfile,
-Encrypt => {Password => "beta",
Flags => DB_ENCRYPT_AES
},
-Property => DB_ENCRYPT ;
$v = '';
ok 42, ! $db1->db_get("red", $v) ;
ok 43, $v eq $data{"red"};
# check there are three records
ok 44, countRecords($db1) == 3 ;
undef $db1;
}
{
# new BerkeleyDB::Btree -Encrypt =>
my $Dfile = "abcd.enc";
my $lex = new LexFile $Dfile ;
my %hash ;
my ($k, $v) ;
ok 45, my $db = new BerkeleyDB::Btree
-Filename => $Dfile,
-Flags => DB_CREATE,
-Encrypt => {Password => "beta",
Flags => DB_ENCRYPT_AES
},
-Property => DB_ENCRYPT ;
# create some data
my %data = (
"red" => 2,
"green" => "house",
"blue" => "sea",
) ;
my $ret = 0 ;
while (($k, $v) = each %data) {
$ret += $db->db_put($k, $v) ;
}
ok 46, $ret == 0 ;
# check there are three records
ok 47, countRecords($db) == 3 ;
undef $db;
# attempt to open a database without specifying encryption
ok 48, ! new BerkeleyDB::Btree -Filename => $Dfile,
-Flags => DB_CREATE ;
# try opening with the wrong password
ok 49, ! new BerkeleyDB::Btree -Filename => $Dfile,
-Filename => $Dfile,
-Encrypt => {Password => "def",
Flags => DB_ENCRYPT_AES
},
-Property => DB_ENCRYPT ;
# read the encrypted data
ok 50, my $db1 = new BerkeleyDB::Btree -Filename => $Dfile,
-Filename => $Dfile,
-Encrypt => {Password => "beta",
Flags => DB_ENCRYPT_AES
},
-Property => DB_ENCRYPT ;
$v = '';
ok 51, ! $db1->db_get("red", $v) ;
ok 52, $v eq $data{"red"};
# check there are three records
ok 53, countRecords($db1) == 3 ;
undef $db1;
}
{
# new BerkeleyDB::Queue -Encrypt =>
my $Dfile = "abcd.enc";
my $lex = new LexFile $Dfile ;
my %hash ;
my ($k, $v) ;
ok 54, my $db = new BerkeleyDB::Queue
-Filename => $Dfile,
-Len => 5,
-Pad => "x",
-Flags => DB_CREATE,
-Encrypt => {Password => "beta",
Flags => DB_ENCRYPT_AES
},
-Property => DB_ENCRYPT ;
# create some data
my %data = (
1 => 2,
2 => "house",
3 => "sea",
) ;
my $ret = 0 ;
while (($k, $v) = each %data) {
$ret += $db->db_put($k, $v) ;
}
ok 55, $ret == 0 ;
# check there are three records
ok 56, countRecords($db) == 3 ;
undef $db;
# attempt to open a database without specifying encryption
ok 57, ! new BerkeleyDB::Queue -Filename => $Dfile,
-Len => 5,
-Pad => "x",
-Flags => DB_CREATE ;
# try opening with the wrong password
ok 58, ! new BerkeleyDB::Queue -Filename => $Dfile,
-Len => 5,
-Pad => "x",
-Encrypt => {Password => "def",
Flags => DB_ENCRYPT_AES
},
-Property => DB_ENCRYPT ;
# read the encrypted data
ok 59, my $db1 = new BerkeleyDB::Queue -Filename => $Dfile,
-Len => 5,
-Pad => "x",
-Encrypt => {Password => "beta",
Flags => DB_ENCRYPT_AES
},
-Property => DB_ENCRYPT ;
$v = '';
ok 60, ! $db1->db_get(3, $v) ;
ok 61, $v eq fillout($data{3}, 5, 'x');
# check there are three records
ok 62, countRecords($db1) == 3 ;
undef $db1;
}
{
# new BerkeleyDB::Recno -Encrypt =>
my $Dfile = "abcd.enc";
my $lex = new LexFile $Dfile ;
my %hash ;
my ($k, $v) ;
ok 63, my $db = new BerkeleyDB::Recno
-Filename => $Dfile,
-Flags => DB_CREATE,
-Encrypt => {Password => "beta",
Flags => DB_ENCRYPT_AES
},
-Property => DB_ENCRYPT ;
# create some data
my %data = (
1 => 2,
2 => "house",
3 => "sea",
) ;
my $ret = 0 ;
while (($k, $v) = each %data) {
$ret += $db->db_put($k, $v) ;
}
ok 64, $ret == 0 ;
# check there are three records
ok 65, countRecords($db) == 3 ;
undef $db;
# attempt to open a database without specifying encryption
ok 66, ! new BerkeleyDB::Recno -Filename => $Dfile,
-Flags => DB_CREATE ;
# try opening with the wrong password
ok 67, ! new BerkeleyDB::Recno -Filename => $Dfile,
-Filename => $Dfile,
-Encrypt => {Password => "def",
Flags => DB_ENCRYPT_AES
},
-Property => DB_ENCRYPT ;
# read the encrypted data
ok 68, my $db1 = new BerkeleyDB::Recno -Filename => $Dfile,
-Filename => $Dfile,
-Encrypt => {Password => "beta",
Flags => DB_ENCRYPT_AES
},
-Property => DB_ENCRYPT ;
$v = '';
ok 69, ! $db1->db_get(3, $v) ;
ok 70, $v eq $data{3};
# check there are three records
ok 71, countRecords($db1) == 3 ;
undef $db1;
}
{
# new BerkeleyDB::Unknown -Encrypt =>
my $Dfile = "abcd.enc";
my $lex = new LexFile $Dfile ;
my %hash ;
my ($k, $v) ;
ok 72, my $db = new BerkeleyDB::Hash
-Filename => $Dfile,
-Flags => DB_CREATE,
-Encrypt => {Password => "beta",
Flags => DB_ENCRYPT_AES
},
-Property => DB_ENCRYPT ;
# create some data
my %data = (
"red" => 2,
"green" => "house",
"blue" => "sea",
) ;
my $ret = 0 ;
while (($k, $v) = each %data) {
$ret += $db->db_put($k, $v) ;
}
ok 73, $ret == 0 ;
# check there are three records
ok 74, countRecords($db) == 3 ;
undef $db;
# attempt to open a database without specifying encryption
ok 75, ! new BerkeleyDB::Unknown -Filename => $Dfile,
-Flags => DB_CREATE ;
# try opening with the wrong password
ok 76, ! new BerkeleyDB::Unknown -Filename => $Dfile,
-Filename => $Dfile,
-Encrypt => {Password => "def",
Flags => DB_ENCRYPT_AES
},
-Property => DB_ENCRYPT ;
# read the encrypted data
ok 77, my $db1 = new BerkeleyDB::Unknown -Filename => $Dfile,
-Filename => $Dfile,
-Encrypt => {Password => "beta",
Flags => DB_ENCRYPT_AES
},
-Property => DB_ENCRYPT ;
$v = '';
ok 78, ! $db1->db_get("red", $v) ;
ok 79, $v eq $data{"red"};
# check there are three records
ok 80, countRecords($db1) == 3 ;
undef $db1;
}