1#!./perl -w 2 3# ID: %I%, %G% 4 5use strict ; 6 7use lib 't' ; 8use BerkeleyDB; 9use util ; 10 11BEGIN 12{ 13 if ($BerkeleyDB::db_version < 4.1) { 14 print "1..0 # Skip: this needs Berkeley DB 4.1.x or better\n" ; 15 exit 0 ; 16 } 17 18 # Is encryption available? 19 my $env = new BerkeleyDB::Env @StdErrFile, 20 -Encrypt => {Password => "abc", 21 Flags => DB_ENCRYPT_AES 22 }; 23 24 if ($BerkeleyDB::Error =~ /Operation not supported/) 25 { 26 print "1..0 # Skip: encryption support not present\n" ; 27 exit 0 ; 28 } 29} 30 31umask(0); 32 33print "1..80\n"; 34 35{ 36 eval 37 { 38 my $env = new BerkeleyDB::Env @StdErrFile, 39 -Encrypt => 1, 40 -Flags => DB_CREATE ; 41 }; 42 ok 1, $@ =~ /^Encrypt parameter must be a hash reference at/; 43 44 eval 45 { 46 my $env = new BerkeleyDB::Env @StdErrFile, 47 -Encrypt => {}, 48 -Flags => DB_CREATE ; 49 }; 50 ok 2, $@ =~ /^Must specify Password and Flags with Encrypt parameter at/; 51 52 eval 53 { 54 my $env = new BerkeleyDB::Env @StdErrFile, 55 -Encrypt => {Password => "fred"}, 56 -Flags => DB_CREATE ; 57 }; 58 ok 3, $@ =~ /^Must specify Password and Flags with Encrypt parameter at/; 59 60 eval 61 { 62 my $env = new BerkeleyDB::Env @StdErrFile, 63 -Encrypt => {Flags => 1}, 64 -Flags => DB_CREATE ; 65 }; 66 ok 4, $@ =~ /^Must specify Password and Flags with Encrypt parameter at/; 67 68 eval 69 { 70 my $env = new BerkeleyDB::Env @StdErrFile, 71 -Encrypt => {Fred => 1}, 72 -Flags => DB_CREATE ; 73 }; 74 ok 5, $@ =~ /^\Qunknown key value(s) Fred at/; 75 76} 77 78{ 79 # new BerkeleyDB::Env -Encrypt => 80 81 # create an environment with a Home 82 my $home = "./fred" ; 83 #mkdir $home; 84 ok 6, my $lexD = new LexDir($home) ; 85 ok 7, my $env = new BerkeleyDB::Env @StdErrFile, 86 -Home => $home, 87 -Encrypt => {Password => "abc", 88 Flags => DB_ENCRYPT_AES 89 }, 90 -Flags => DB_CREATE | DB_INIT_MPOOL ; 91 92 93 94 my $Dfile = "abc.enc"; 95 my $lex = new LexFile $Dfile ; 96 my %hash ; 97 my ($k, $v) ; 98 ok 8, my $db = new BerkeleyDB::Hash -Filename => $Dfile, 99 -Env => $env, 100 -Flags => DB_CREATE, 101 -Property => DB_ENCRYPT ; 102 103 # create some data 104 my %data = ( 105 "red" => 2, 106 "green" => "house", 107 "blue" => "sea", 108 ) ; 109 110 my $ret = 0 ; 111 while (($k, $v) = each %data) { 112 $ret += $db->db_put($k, $v) ; 113 } 114 ok 9, $ret == 0 ; 115 116 # check there are three records 117 ok 10, countRecords($db) == 3 ; 118 119 undef $db; 120 121 # once the database is created, do not need to specify DB_ENCRYPT 122 ok 11, my $db1 = new BerkeleyDB::Hash -Filename => $Dfile, 123 -Env => $env, 124 -Flags => DB_CREATE ; 125 $v = ''; 126 ok 12, ! $db1->db_get("red", $v) ; 127 ok 13, $v eq $data{"red"}, 128 undef $db1; 129 undef $env; 130 131 # open a database without specifying encryption 132 ok 14, ! new BerkeleyDB::Hash -Filename => "$home/$Dfile"; 133 134 ok 15, ! new BerkeleyDB::Env 135 -Home => $home, 136 -Encrypt => {Password => "def", 137 Flags => DB_ENCRYPT_AES 138 }, 139 -Flags => DB_CREATE | DB_INIT_MPOOL ; 140} 141 142{ 143 eval 144 { 145 my $env = new BerkeleyDB::Hash 146 -Encrypt => 1, 147 -Flags => DB_CREATE ; 148 }; 149 ok 16, $@ =~ /^Encrypt parameter must be a hash reference at/; 150 151 eval 152 { 153 my $env = new BerkeleyDB::Hash 154 -Encrypt => {}, 155 -Flags => DB_CREATE ; 156 }; 157 ok 17, $@ =~ /^Must specify Password and Flags with Encrypt parameter at/; 158 159 eval 160 { 161 my $env = new BerkeleyDB::Hash 162 -Encrypt => {Password => "fred"}, 163 -Flags => DB_CREATE ; 164 }; 165 ok 18, $@ =~ /^Must specify Password and Flags with Encrypt parameter at/; 166 167 eval 168 { 169 my $env = new BerkeleyDB::Hash 170 -Encrypt => {Flags => 1}, 171 -Flags => DB_CREATE ; 172 }; 173 ok 19, $@ =~ /^Must specify Password and Flags with Encrypt parameter at/; 174 175 eval 176 { 177 my $env = new BerkeleyDB::Hash 178 -Encrypt => {Fred => 1}, 179 -Flags => DB_CREATE ; 180 }; 181 ok 20, $@ =~ /^\Qunknown key value(s) Fred at/; 182 183} 184 185{ 186 eval 187 { 188 my $env = new BerkeleyDB::Btree 189 -Encrypt => 1, 190 -Flags => DB_CREATE ; 191 }; 192 ok 21, $@ =~ /^Encrypt parameter must be a hash reference at/; 193 194 eval 195 { 196 my $env = new BerkeleyDB::Btree 197 -Encrypt => {}, 198 -Flags => DB_CREATE ; 199 }; 200 ok 22, $@ =~ /^Must specify Password and Flags with Encrypt parameter at/; 201 202 eval 203 { 204 my $env = new BerkeleyDB::Btree 205 -Encrypt => {Password => "fred"}, 206 -Flags => DB_CREATE ; 207 }; 208 ok 23, $@ =~ /^Must specify Password and Flags with Encrypt parameter at/; 209 210 eval 211 { 212 my $env = new BerkeleyDB::Btree 213 -Encrypt => {Flags => 1}, 214 -Flags => DB_CREATE ; 215 }; 216 ok 24, $@ =~ /^Must specify Password and Flags with Encrypt parameter at/; 217 218 eval 219 { 220 my $env = new BerkeleyDB::Btree 221 -Encrypt => {Fred => 1}, 222 -Flags => DB_CREATE ; 223 }; 224 ok 25, $@ =~ /^\Qunknown key value(s) Fred at/; 225 226} 227 228{ 229 eval 230 { 231 my $env = new BerkeleyDB::Queue 232 -Encrypt => 1, 233 -Flags => DB_CREATE ; 234 }; 235 ok 26, $@ =~ /^Encrypt parameter must be a hash reference at/; 236 237 eval 238 { 239 my $env = new BerkeleyDB::Queue 240 -Encrypt => {}, 241 -Flags => DB_CREATE ; 242 }; 243 ok 27, $@ =~ /^Must specify Password and Flags with Encrypt parameter at/; 244 245 eval 246 { 247 my $env = new BerkeleyDB::Queue 248 -Encrypt => {Password => "fred"}, 249 -Flags => DB_CREATE ; 250 }; 251 ok 28, $@ =~ /^Must specify Password and Flags with Encrypt parameter at/; 252 253 eval 254 { 255 my $env = new BerkeleyDB::Queue 256 -Encrypt => {Flags => 1}, 257 -Flags => DB_CREATE ; 258 }; 259 ok 29, $@ =~ /^Must specify Password and Flags with Encrypt parameter at/; 260 261 eval 262 { 263 my $env = new BerkeleyDB::Queue 264 -Encrypt => {Fred => 1}, 265 -Flags => DB_CREATE ; 266 }; 267 ok 30, $@ =~ /^\Qunknown key value(s) Fred at/; 268 269} 270 271{ 272 eval 273 { 274 my $env = new BerkeleyDB::Recno 275 -Encrypt => 1, 276 -Flags => DB_CREATE ; 277 }; 278 ok 31, $@ =~ /^Encrypt parameter must be a hash reference at/; 279 280 eval 281 { 282 my $env = new BerkeleyDB::Recno 283 -Encrypt => {}, 284 -Flags => DB_CREATE ; 285 }; 286 ok 32, $@ =~ /^Must specify Password and Flags with Encrypt parameter at/; 287 288 eval 289 { 290 my $env = new BerkeleyDB::Recno 291 -Encrypt => {Password => "fred"}, 292 -Flags => DB_CREATE ; 293 }; 294 ok 33, $@ =~ /^Must specify Password and Flags with Encrypt parameter at/; 295 296 eval 297 { 298 my $env = new BerkeleyDB::Recno 299 -Encrypt => {Flags => 1}, 300 -Flags => DB_CREATE ; 301 }; 302 ok 34, $@ =~ /^Must specify Password and Flags with Encrypt parameter at/; 303 304 eval 305 { 306 my $env = new BerkeleyDB::Recno 307 -Encrypt => {Fred => 1}, 308 -Flags => DB_CREATE ; 309 }; 310 ok 35, $@ =~ /^\Qunknown key value(s) Fred at/; 311 312} 313 314 315{ 316 # new BerkeleyDB::Hash -Encrypt => 317 318 my $Dfile = "abcd.enc"; 319 my $lex = new LexFile $Dfile ; 320 my %hash ; 321 my ($k, $v) ; 322 ok 36, my $db = new BerkeleyDB::Hash 323 -Filename => $Dfile, 324 -Flags => DB_CREATE, 325 -Encrypt => {Password => "beta", 326 Flags => DB_ENCRYPT_AES 327 }, 328 -Property => DB_ENCRYPT ; 329 330 # create some data 331 my %data = ( 332 "red" => 2, 333 "green" => "house", 334 "blue" => "sea", 335 ) ; 336 337 my $ret = 0 ; 338 while (($k, $v) = each %data) { 339 $ret += $db->db_put($k, $v) ; 340 } 341 ok 37, $ret == 0 ; 342 343 # check there are three records 344 ok 38, countRecords($db) == 3 ; 345 346 undef $db; 347 348 # attempt to open a database without specifying encryption 349 ok 39, ! new BerkeleyDB::Hash -Filename => $Dfile, 350 -Flags => DB_CREATE ; 351 352 353 # try opening with the wrong password 354 ok 40, ! new BerkeleyDB::Hash -Filename => $Dfile, 355 -Filename => $Dfile, 356 -Encrypt => {Password => "def", 357 Flags => DB_ENCRYPT_AES 358 }, 359 -Property => DB_ENCRYPT ; 360 361 362 # read the encrypted data 363 ok 41, my $db1 = new BerkeleyDB::Hash -Filename => $Dfile, 364 -Filename => $Dfile, 365 -Encrypt => {Password => "beta", 366 Flags => DB_ENCRYPT_AES 367 }, 368 -Property => DB_ENCRYPT ; 369 370 371 $v = ''; 372 ok 42, ! $db1->db_get("red", $v) ; 373 ok 43, $v eq $data{"red"}; 374 # check there are three records 375 ok 44, countRecords($db1) == 3 ; 376 undef $db1; 377} 378 379{ 380 # new BerkeleyDB::Btree -Encrypt => 381 382 my $Dfile = "abcd.enc"; 383 my $lex = new LexFile $Dfile ; 384 my %hash ; 385 my ($k, $v) ; 386 ok 45, my $db = new BerkeleyDB::Btree 387 -Filename => $Dfile, 388 -Flags => DB_CREATE, 389 -Encrypt => {Password => "beta", 390 Flags => DB_ENCRYPT_AES 391 }, 392 -Property => DB_ENCRYPT ; 393 394 # create some data 395 my %data = ( 396 "red" => 2, 397 "green" => "house", 398 "blue" => "sea", 399 ) ; 400 401 my $ret = 0 ; 402 while (($k, $v) = each %data) { 403 $ret += $db->db_put($k, $v) ; 404 } 405 ok 46, $ret == 0 ; 406 407 # check there are three records 408 ok 47, countRecords($db) == 3 ; 409 410 undef $db; 411 412 # attempt to open a database without specifying encryption 413 ok 48, ! new BerkeleyDB::Btree -Filename => $Dfile, 414 -Flags => DB_CREATE ; 415 416 417 # try opening with the wrong password 418 ok 49, ! new BerkeleyDB::Btree -Filename => $Dfile, 419 -Filename => $Dfile, 420 -Encrypt => {Password => "def", 421 Flags => DB_ENCRYPT_AES 422 }, 423 -Property => DB_ENCRYPT ; 424 425 426 # read the encrypted data 427 ok 50, my $db1 = new BerkeleyDB::Btree -Filename => $Dfile, 428 -Filename => $Dfile, 429 -Encrypt => {Password => "beta", 430 Flags => DB_ENCRYPT_AES 431 }, 432 -Property => DB_ENCRYPT ; 433 434 435 $v = ''; 436 ok 51, ! $db1->db_get("red", $v) ; 437 ok 52, $v eq $data{"red"}; 438 # check there are three records 439 ok 53, countRecords($db1) == 3 ; 440 undef $db1; 441} 442 443{ 444 # new BerkeleyDB::Queue -Encrypt => 445 446 my $Dfile = "abcd.enc"; 447 my $lex = new LexFile $Dfile ; 448 my %hash ; 449 my ($k, $v) ; 450 ok 54, my $db = new BerkeleyDB::Queue 451 -Filename => $Dfile, 452 -Len => 5, 453 -Pad => "x", 454 -Flags => DB_CREATE, 455 -Encrypt => {Password => "beta", 456 Flags => DB_ENCRYPT_AES 457 }, 458 -Property => DB_ENCRYPT ; 459 460 # create some data 461 my %data = ( 462 1 => 2, 463 2 => "house", 464 3 => "sea", 465 ) ; 466 467 my $ret = 0 ; 468 while (($k, $v) = each %data) { 469 $ret += $db->db_put($k, $v) ; 470 } 471 ok 55, $ret == 0 ; 472 473 # check there are three records 474 ok 56, countRecords($db) == 3 ; 475 476 undef $db; 477 478 # attempt to open a database without specifying encryption 479 ok 57, ! new BerkeleyDB::Queue -Filename => $Dfile, 480 -Len => 5, 481 -Pad => "x", 482 -Flags => DB_CREATE ; 483 484 485 # try opening with the wrong password 486 ok 58, ! new BerkeleyDB::Queue -Filename => $Dfile, 487 -Len => 5, 488 -Pad => "x", 489 -Encrypt => {Password => "def", 490 Flags => DB_ENCRYPT_AES 491 }, 492 -Property => DB_ENCRYPT ; 493 494 495 # read the encrypted data 496 ok 59, my $db1 = new BerkeleyDB::Queue -Filename => $Dfile, 497 -Len => 5, 498 -Pad => "x", 499 -Encrypt => {Password => "beta", 500 Flags => DB_ENCRYPT_AES 501 }, 502 -Property => DB_ENCRYPT ; 503 504 505 $v = ''; 506 ok 60, ! $db1->db_get(3, $v) ; 507 ok 61, $v eq fillout($data{3}, 5, 'x'); 508 # check there are three records 509 ok 62, countRecords($db1) == 3 ; 510 undef $db1; 511} 512 513{ 514 # new BerkeleyDB::Recno -Encrypt => 515 516 my $Dfile = "abcd.enc"; 517 my $lex = new LexFile $Dfile ; 518 my %hash ; 519 my ($k, $v) ; 520 ok 63, my $db = new BerkeleyDB::Recno 521 -Filename => $Dfile, 522 -Flags => DB_CREATE, 523 -Encrypt => {Password => "beta", 524 Flags => DB_ENCRYPT_AES 525 }, 526 -Property => DB_ENCRYPT ; 527 528 # create some data 529 my %data = ( 530 1 => 2, 531 2 => "house", 532 3 => "sea", 533 ) ; 534 535 my $ret = 0 ; 536 while (($k, $v) = each %data) { 537 $ret += $db->db_put($k, $v) ; 538 } 539 ok 64, $ret == 0 ; 540 541 # check there are three records 542 ok 65, countRecords($db) == 3 ; 543 544 undef $db; 545 546 # attempt to open a database without specifying encryption 547 ok 66, ! new BerkeleyDB::Recno -Filename => $Dfile, 548 -Flags => DB_CREATE ; 549 550 551 # try opening with the wrong password 552 ok 67, ! new BerkeleyDB::Recno -Filename => $Dfile, 553 -Filename => $Dfile, 554 -Encrypt => {Password => "def", 555 Flags => DB_ENCRYPT_AES 556 }, 557 -Property => DB_ENCRYPT ; 558 559 560 # read the encrypted data 561 ok 68, my $db1 = new BerkeleyDB::Recno -Filename => $Dfile, 562 -Filename => $Dfile, 563 -Encrypt => {Password => "beta", 564 Flags => DB_ENCRYPT_AES 565 }, 566 -Property => DB_ENCRYPT ; 567 568 569 $v = ''; 570 ok 69, ! $db1->db_get(3, $v) ; 571 ok 70, $v eq $data{3}; 572 # check there are three records 573 ok 71, countRecords($db1) == 3 ; 574 undef $db1; 575} 576 577{ 578 # new BerkeleyDB::Unknown -Encrypt => 579 580 my $Dfile = "abcd.enc"; 581 my $lex = new LexFile $Dfile ; 582 my %hash ; 583 my ($k, $v) ; 584 ok 72, my $db = new BerkeleyDB::Hash 585 -Filename => $Dfile, 586 -Flags => DB_CREATE, 587 -Encrypt => {Password => "beta", 588 Flags => DB_ENCRYPT_AES 589 }, 590 -Property => DB_ENCRYPT ; 591 592 # create some data 593 my %data = ( 594 "red" => 2, 595 "green" => "house", 596 "blue" => "sea", 597 ) ; 598 599 my $ret = 0 ; 600 while (($k, $v) = each %data) { 601 $ret += $db->db_put($k, $v) ; 602 } 603 ok 73, $ret == 0 ; 604 605 # check there are three records 606 ok 74, countRecords($db) == 3 ; 607 608 undef $db; 609 610 # attempt to open a database without specifying encryption 611 ok 75, ! new BerkeleyDB::Unknown -Filename => $Dfile, 612 -Flags => DB_CREATE ; 613 614 615 # try opening with the wrong password 616 ok 76, ! new BerkeleyDB::Unknown -Filename => $Dfile, 617 -Filename => $Dfile, 618 -Encrypt => {Password => "def", 619 Flags => DB_ENCRYPT_AES 620 }, 621 -Property => DB_ENCRYPT ; 622 623 624 # read the encrypted data 625 ok 77, my $db1 = new BerkeleyDB::Unknown -Filename => $Dfile, 626 -Filename => $Dfile, 627 -Encrypt => {Password => "beta", 628 Flags => DB_ENCRYPT_AES 629 }, 630 -Property => DB_ENCRYPT ; 631 632 633 $v = ''; 634 ok 78, ! $db1->db_get("red", $v) ; 635 ok 79, $v eq $data{"red"}; 636 # check there are three records 637 ok 80, countRecords($db1) == 3 ; 638 undef $db1; 639} 640 641