mirror of
https://github.com/berkeleydb/libdb.git
synced 2024-11-17 09:36:24 +00:00
636 lines
16 KiB
Perl
636 lines
16 KiB
Perl
#!./perl -w
|
|
|
|
# ID: %I%, %G%
|
|
|
|
use strict ;
|
|
|
|
use lib 't' ;
|
|
use BerkeleyDB;
|
|
use util ;
|
|
use Test::More;
|
|
|
|
BEGIN {
|
|
plan(skip_all => "this needs BerkeleyDB 4.1.x or better" )
|
|
if $BerkeleyDB::db_version < 4.1;
|
|
|
|
# Is encryption available?
|
|
my $env = new BerkeleyDB::Env @StdErrFile,
|
|
-Encrypt => {Password => "abc",
|
|
Flags => DB_ENCRYPT_AES
|
|
};
|
|
|
|
plan skip_all => "encryption support not present"
|
|
if $BerkeleyDB::Error =~ /Operation not supported/;
|
|
|
|
plan tests => 80;
|
|
}
|
|
|
|
|
|
umask(0);
|
|
|
|
{
|
|
eval
|
|
{
|
|
my $env = new BerkeleyDB::Env @StdErrFile,
|
|
-Encrypt => 1,
|
|
-Flags => DB_CREATE ;
|
|
};
|
|
ok $@ =~ /^Encrypt parameter must be a hash reference at/;
|
|
|
|
eval
|
|
{
|
|
my $env = new BerkeleyDB::Env @StdErrFile,
|
|
-Encrypt => {},
|
|
-Flags => DB_CREATE ;
|
|
};
|
|
ok $@ =~ /^Must specify Password and Flags with Encrypt parameter at/;
|
|
|
|
eval
|
|
{
|
|
my $env = new BerkeleyDB::Env @StdErrFile,
|
|
-Encrypt => {Password => "fred"},
|
|
-Flags => DB_CREATE ;
|
|
};
|
|
ok $@ =~ /^Must specify Password and Flags with Encrypt parameter at/;
|
|
|
|
eval
|
|
{
|
|
my $env = new BerkeleyDB::Env @StdErrFile,
|
|
-Encrypt => {Flags => 1},
|
|
-Flags => DB_CREATE ;
|
|
};
|
|
ok $@ =~ /^Must specify Password and Flags with Encrypt parameter at/;
|
|
|
|
eval
|
|
{
|
|
my $env = new BerkeleyDB::Env @StdErrFile,
|
|
-Encrypt => {Fred => 1},
|
|
-Flags => DB_CREATE ;
|
|
};
|
|
ok $@ =~ /^\Qunknown key value(s) Fred at/;
|
|
|
|
}
|
|
|
|
{
|
|
# new BerkeleyDB::Env -Encrypt =>
|
|
|
|
# create an environment with a Home
|
|
my $home = "./fred" ;
|
|
#mkdir $home;
|
|
ok my $lexD = new LexDir($home) ;
|
|
ok 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 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 $ret == 0 ;
|
|
|
|
# check there are three records
|
|
ok countRecords($db) == 3 ;
|
|
|
|
undef $db;
|
|
|
|
# once the database is created, do not need to specify DB_ENCRYPT
|
|
ok my $db1 = new BerkeleyDB::Hash -Filename => $Dfile,
|
|
-Env => $env,
|
|
-Flags => DB_CREATE ;
|
|
$v = '';
|
|
ok ! $db1->db_get("red", $v) ;
|
|
ok $v eq $data{"red"},
|
|
undef $db1;
|
|
undef $env;
|
|
|
|
# open a database without specifying encryption
|
|
ok ! new BerkeleyDB::Hash -Filename => "$home/$Dfile";
|
|
|
|
ok ! 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 $@ =~ /^Encrypt parameter must be a hash reference at/;
|
|
|
|
eval
|
|
{
|
|
my $env = new BerkeleyDB::Hash
|
|
-Encrypt => {},
|
|
-Flags => DB_CREATE ;
|
|
};
|
|
ok $@ =~ /^Must specify Password and Flags with Encrypt parameter at/;
|
|
|
|
eval
|
|
{
|
|
my $env = new BerkeleyDB::Hash
|
|
-Encrypt => {Password => "fred"},
|
|
-Flags => DB_CREATE ;
|
|
};
|
|
ok $@ =~ /^Must specify Password and Flags with Encrypt parameter at/;
|
|
|
|
eval
|
|
{
|
|
my $env = new BerkeleyDB::Hash
|
|
-Encrypt => {Flags => 1},
|
|
-Flags => DB_CREATE ;
|
|
};
|
|
ok $@ =~ /^Must specify Password and Flags with Encrypt parameter at/;
|
|
|
|
eval
|
|
{
|
|
my $env = new BerkeleyDB::Hash
|
|
-Encrypt => {Fred => 1},
|
|
-Flags => DB_CREATE ;
|
|
};
|
|
ok $@ =~ /^\Qunknown key value(s) Fred at/;
|
|
|
|
}
|
|
|
|
{
|
|
eval
|
|
{
|
|
my $env = new BerkeleyDB::Btree
|
|
-Encrypt => 1,
|
|
-Flags => DB_CREATE ;
|
|
};
|
|
ok $@ =~ /^Encrypt parameter must be a hash reference at/;
|
|
|
|
eval
|
|
{
|
|
my $env = new BerkeleyDB::Btree
|
|
-Encrypt => {},
|
|
-Flags => DB_CREATE ;
|
|
};
|
|
ok $@ =~ /^Must specify Password and Flags with Encrypt parameter at/;
|
|
|
|
eval
|
|
{
|
|
my $env = new BerkeleyDB::Btree
|
|
-Encrypt => {Password => "fred"},
|
|
-Flags => DB_CREATE ;
|
|
};
|
|
ok $@ =~ /^Must specify Password and Flags with Encrypt parameter at/;
|
|
|
|
eval
|
|
{
|
|
my $env = new BerkeleyDB::Btree
|
|
-Encrypt => {Flags => 1},
|
|
-Flags => DB_CREATE ;
|
|
};
|
|
ok $@ =~ /^Must specify Password and Flags with Encrypt parameter at/;
|
|
|
|
eval
|
|
{
|
|
my $env = new BerkeleyDB::Btree
|
|
-Encrypt => {Fred => 1},
|
|
-Flags => DB_CREATE ;
|
|
};
|
|
ok $@ =~ /^\Qunknown key value(s) Fred at/;
|
|
|
|
}
|
|
|
|
{
|
|
eval
|
|
{
|
|
my $env = new BerkeleyDB::Queue
|
|
-Encrypt => 1,
|
|
-Flags => DB_CREATE ;
|
|
};
|
|
ok $@ =~ /^Encrypt parameter must be a hash reference at/;
|
|
|
|
eval
|
|
{
|
|
my $env = new BerkeleyDB::Queue
|
|
-Encrypt => {},
|
|
-Flags => DB_CREATE ;
|
|
};
|
|
ok $@ =~ /^Must specify Password and Flags with Encrypt parameter at/;
|
|
|
|
eval
|
|
{
|
|
my $env = new BerkeleyDB::Queue
|
|
-Encrypt => {Password => "fred"},
|
|
-Flags => DB_CREATE ;
|
|
};
|
|
ok $@ =~ /^Must specify Password and Flags with Encrypt parameter at/;
|
|
|
|
eval
|
|
{
|
|
my $env = new BerkeleyDB::Queue
|
|
-Encrypt => {Flags => 1},
|
|
-Flags => DB_CREATE ;
|
|
};
|
|
ok $@ =~ /^Must specify Password and Flags with Encrypt parameter at/;
|
|
|
|
eval
|
|
{
|
|
my $env = new BerkeleyDB::Queue
|
|
-Encrypt => {Fred => 1},
|
|
-Flags => DB_CREATE ;
|
|
};
|
|
ok $@ =~ /^\Qunknown key value(s) Fred at/;
|
|
|
|
}
|
|
|
|
{
|
|
eval
|
|
{
|
|
my $env = new BerkeleyDB::Recno
|
|
-Encrypt => 1,
|
|
-Flags => DB_CREATE ;
|
|
};
|
|
ok $@ =~ /^Encrypt parameter must be a hash reference at/;
|
|
|
|
eval
|
|
{
|
|
my $env = new BerkeleyDB::Recno
|
|
-Encrypt => {},
|
|
-Flags => DB_CREATE ;
|
|
};
|
|
ok $@ =~ /^Must specify Password and Flags with Encrypt parameter at/;
|
|
|
|
eval
|
|
{
|
|
my $env = new BerkeleyDB::Recno
|
|
-Encrypt => {Password => "fred"},
|
|
-Flags => DB_CREATE ;
|
|
};
|
|
ok $@ =~ /^Must specify Password and Flags with Encrypt parameter at/;
|
|
|
|
eval
|
|
{
|
|
my $env = new BerkeleyDB::Recno
|
|
-Encrypt => {Flags => 1},
|
|
-Flags => DB_CREATE ;
|
|
};
|
|
ok $@ =~ /^Must specify Password and Flags with Encrypt parameter at/;
|
|
|
|
eval
|
|
{
|
|
my $env = new BerkeleyDB::Recno
|
|
-Encrypt => {Fred => 1},
|
|
-Flags => DB_CREATE ;
|
|
};
|
|
ok $@ =~ /^\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 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 $ret == 0 ;
|
|
|
|
# check there are three records
|
|
ok countRecords($db) == 3 ;
|
|
|
|
undef $db;
|
|
|
|
# attempt to open a database without specifying encryption
|
|
ok ! new BerkeleyDB::Hash -Filename => $Dfile,
|
|
-Flags => DB_CREATE ;
|
|
|
|
|
|
# try opening with the wrong password
|
|
ok ! new BerkeleyDB::Hash -Filename => $Dfile,
|
|
-Filename => $Dfile,
|
|
-Encrypt => {Password => "def",
|
|
Flags => DB_ENCRYPT_AES
|
|
},
|
|
-Property => DB_ENCRYPT ;
|
|
|
|
|
|
# read the encrypted data
|
|
ok my $db1 = new BerkeleyDB::Hash -Filename => $Dfile,
|
|
-Filename => $Dfile,
|
|
-Encrypt => {Password => "beta",
|
|
Flags => DB_ENCRYPT_AES
|
|
},
|
|
-Property => DB_ENCRYPT ;
|
|
|
|
|
|
$v = '';
|
|
ok ! $db1->db_get("red", $v) ;
|
|
ok $v eq $data{"red"};
|
|
# check there are three records
|
|
ok countRecords($db1) == 3 ;
|
|
undef $db1;
|
|
}
|
|
|
|
{
|
|
# new BerkeleyDB::Btree -Encrypt =>
|
|
|
|
my $Dfile = "abcd.enc";
|
|
my $lex = new LexFile $Dfile ;
|
|
my %hash ;
|
|
my ($k, $v) ;
|
|
ok 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 $ret == 0 ;
|
|
|
|
# check there are three records
|
|
ok countRecords($db) == 3 ;
|
|
|
|
undef $db;
|
|
|
|
# attempt to open a database without specifying encryption
|
|
ok ! new BerkeleyDB::Btree -Filename => $Dfile,
|
|
-Flags => DB_CREATE ;
|
|
|
|
|
|
# try opening with the wrong password
|
|
ok ! new BerkeleyDB::Btree -Filename => $Dfile,
|
|
-Filename => $Dfile,
|
|
-Encrypt => {Password => "def",
|
|
Flags => DB_ENCRYPT_AES
|
|
},
|
|
-Property => DB_ENCRYPT ;
|
|
|
|
|
|
# read the encrypted data
|
|
ok my $db1 = new BerkeleyDB::Btree -Filename => $Dfile,
|
|
-Filename => $Dfile,
|
|
-Encrypt => {Password => "beta",
|
|
Flags => DB_ENCRYPT_AES
|
|
},
|
|
-Property => DB_ENCRYPT ;
|
|
|
|
|
|
$v = '';
|
|
ok ! $db1->db_get("red", $v) ;
|
|
ok $v eq $data{"red"};
|
|
# check there are three records
|
|
ok countRecords($db1) == 3 ;
|
|
undef $db1;
|
|
}
|
|
|
|
{
|
|
# new BerkeleyDB::Queue -Encrypt =>
|
|
|
|
my $Dfile = "abcd.enc";
|
|
my $lex = new LexFile $Dfile ;
|
|
my %hash ;
|
|
my ($k, $v) ;
|
|
ok 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 $ret == 0 ;
|
|
|
|
# check there are three records
|
|
ok countRecords($db) == 3 ;
|
|
|
|
undef $db;
|
|
|
|
# attempt to open a database without specifying encryption
|
|
ok ! new BerkeleyDB::Queue -Filename => $Dfile,
|
|
-Len => 5,
|
|
-Pad => "x",
|
|
-Flags => DB_CREATE ;
|
|
|
|
|
|
# try opening with the wrong password
|
|
ok ! new BerkeleyDB::Queue -Filename => $Dfile,
|
|
-Len => 5,
|
|
-Pad => "x",
|
|
-Encrypt => {Password => "def",
|
|
Flags => DB_ENCRYPT_AES
|
|
},
|
|
-Property => DB_ENCRYPT ;
|
|
|
|
|
|
# read the encrypted data
|
|
ok my $db1 = new BerkeleyDB::Queue -Filename => $Dfile,
|
|
-Len => 5,
|
|
-Pad => "x",
|
|
-Encrypt => {Password => "beta",
|
|
Flags => DB_ENCRYPT_AES
|
|
},
|
|
-Property => DB_ENCRYPT ;
|
|
|
|
|
|
$v = '';
|
|
ok ! $db1->db_get(3, $v) ;
|
|
ok $v eq fillout($data{3}, 5, 'x');
|
|
# check there are three records
|
|
ok countRecords($db1) == 3 ;
|
|
undef $db1;
|
|
}
|
|
|
|
{
|
|
# new BerkeleyDB::Recno -Encrypt =>
|
|
|
|
my $Dfile = "abcd.enc";
|
|
my $lex = new LexFile $Dfile ;
|
|
my %hash ;
|
|
my ($k, $v) ;
|
|
ok 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 $ret == 0 ;
|
|
|
|
# check there are three records
|
|
ok countRecords($db) == 3 ;
|
|
|
|
undef $db;
|
|
|
|
# attempt to open a database without specifying encryption
|
|
ok ! new BerkeleyDB::Recno -Filename => $Dfile,
|
|
-Flags => DB_CREATE ;
|
|
|
|
|
|
# try opening with the wrong password
|
|
ok ! new BerkeleyDB::Recno -Filename => $Dfile,
|
|
-Filename => $Dfile,
|
|
-Encrypt => {Password => "def",
|
|
Flags => DB_ENCRYPT_AES
|
|
},
|
|
-Property => DB_ENCRYPT ;
|
|
|
|
|
|
# read the encrypted data
|
|
ok my $db1 = new BerkeleyDB::Recno -Filename => $Dfile,
|
|
-Filename => $Dfile,
|
|
-Encrypt => {Password => "beta",
|
|
Flags => DB_ENCRYPT_AES
|
|
},
|
|
-Property => DB_ENCRYPT ;
|
|
|
|
|
|
$v = '';
|
|
ok ! $db1->db_get(3, $v) ;
|
|
ok $v eq $data{3};
|
|
# check there are three records
|
|
ok countRecords($db1) == 3 ;
|
|
undef $db1;
|
|
}
|
|
|
|
{
|
|
# new BerkeleyDB::Unknown -Encrypt =>
|
|
|
|
my $Dfile = "abcd.enc";
|
|
my $lex = new LexFile $Dfile ;
|
|
my %hash ;
|
|
my ($k, $v) ;
|
|
ok 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 $ret == 0 ;
|
|
|
|
# check there are three records
|
|
ok countRecords($db) == 3 ;
|
|
|
|
undef $db;
|
|
|
|
# attempt to open a database without specifying encryption
|
|
ok ! new BerkeleyDB::Unknown -Filename => $Dfile,
|
|
-Flags => DB_CREATE ;
|
|
|
|
|
|
# try opening with the wrong password
|
|
ok ! new BerkeleyDB::Unknown -Filename => $Dfile,
|
|
-Filename => $Dfile,
|
|
-Encrypt => {Password => "def",
|
|
Flags => DB_ENCRYPT_AES
|
|
},
|
|
-Property => DB_ENCRYPT ;
|
|
|
|
|
|
# read the encrypted data
|
|
ok my $db1 = new BerkeleyDB::Unknown -Filename => $Dfile,
|
|
-Filename => $Dfile,
|
|
-Encrypt => {Password => "beta",
|
|
Flags => DB_ENCRYPT_AES
|
|
},
|
|
-Property => DB_ENCRYPT ;
|
|
|
|
|
|
$v = '';
|
|
ok ! $db1->db_get("red", $v) ;
|
|
ok $v eq $data{"red"};
|
|
# check there are three records
|
|
ok countRecords($db1) == 3 ;
|
|
undef $db1;
|
|
}
|
|
|