The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
# File:     $Source: /Users/clajac/cvsroot//Scripting/Scripting/Security.pm,v $
# Author:   $Author: clajac $
# Date:     $Date: 2003/07/21 10:10:05 $
# Revision: $Revision: 1.3 $

package Scripting::Security;

use DB_File;
use strict;

my %Signed;
my $use_signing = 0;

my $current;

sub open {
  my ($pkg, $file) = @_;
 
  warn "Signature database not found\n" unless(-e $file && -f $file);
  if(tie(%Signed, 'DB_File', $file, O_RDONLY, 0666, $DB_HASH)) {
    $use_signing = 1;
  } else {
    warn "Failed to open signature database\n";
  }

  1;
}

sub executing {
  my ($pkg, $path) = @_;

  $current = $path;
}

sub match {
  my ($pkg, $path, $digest) = @_;
  return 1 unless($use_signing);
  return 0 unless(exists $Signed{$path});
  return 0 unless($Signed{$path} eq $digest);
  return 1;
}

sub secure {
  return 1 unless($use_signing);
  if(exists $Signed{$current}) {
    return 1;
  }
}

1;