[interchange-cvs] interchange - ramoore modified code/Filter/decrypt.filter
interchange-core@icdevgroup.org
interchange-core@icdevgroup.org
Sat Apr 5 00:46:01 2003
User: ramoore
Date: 2003-04-05 05:45:11 GMT
Added: code/Filter decrypt.filter
Log:
Add new decrypt filter to compliment encrypt filter.
Decrypts the value against the standard GPG/PGP key
using the standard EncryptProgram.
[filter op=decrypt] String [/filter]
You can decrypt against other keys by passing the ID as an argument:
[filter op=decrypt.23883AEE]
String, to decrypt against different key.
[/filter]
You can even specify a different EncryptProgram decrypt by passing an ID
and the program to use as arguments:
[filter op=decrypt.23883AEE.pgp]
String, to decrypt against different key using pgp
rather than the default
[/filter]
Revision Changes Path
1.1 interchange/code/Filter/decrypt.filter
rev 1.1, prev_rev 1.0
Index: decrypt.filter
===================================================================
CodeDef decrypt Filter
CodeDef decrypt Routine <<EOR
sub {
my ($body, $tag, $key, $cmd) = @_;
#::logDebug("called filter decrypt key=$key cmd=$cmd");
$cmd = $Vend::Cfg->{EncryptProgram} unless $cmd;
$key = $Vend::Cfg->{EncryptKey} unless $key;
if("\L$cmd" eq 'none') {
return ::errmsg("NEED ENCRYPTION ENABLED.");
}
elsif($cmd =~ m{^(?:/\S+/)?\bgpg$}) {
$cmd .= " -q --batch --always-trust -d -r '%s'";
}
elsif($cmd =~ m{^(?:/\S+/)?pgpe$}) {
$cmd .= " -fat -r '%s'";
}
elsif($cmd =~ m{^(?:/\S+/)?\bpgp$}) {
$cmd .= " -fat - '%s'";
}
if($cmd =~ /[;|]/) {
die ::errmsg("Illegal character in encryption command: %s", $cmd);
}
if($key) {
$cmd =~ s/%%/:~PERCENT~:/g;
$key =~ s/'/\\'/g;
$cmd =~ s/%s/$key/g;
$cmd =~ s/:~PERCENT~:/%/g;
}
#::logDebug("filter decrypt after key=$key cmd=$cmd");
my $fpre = $Vend::Cfg->{ScratchDir} . "/pgp.$Vend::Session->{id}.$$";
open(ENC, "> $fpre.in");
print ENC $body;
close(ENC);
$cmd .= "<$fpre.in";
$cmd .= " 2>$fpre.err" unless $cmd =~ /2>/;
open(PGP, "$cmd |")
or die "Couldn't fork: $!";
my @results = <PGP>;
close PGP;
if($?) {
my $errno = $?;
my $status = $errno;
if($status > 255) {
$status = $status >> 8;
$! = $status;
}
logError("PGP failed with error level %s, status %s: $!", $?, $status);
if($status) {
logError("PGP hard failure, command that failed: %s", $cmd);
return;
}
}
$body = join "\n", @results;
unlink "$fpre.in";
unlink "$fpre.err";
return $body;
}
EOR