-# vim: set syntax=perl ts=4 ai si:
+# vim: set tabstop=4 shiftwidth=4 expandtab syntax=perl:
use MIME::Base64();
use Digest::SHA();
+use Digest::MD5();
#
# local_filter_cancel
for my $line(split(/\s*\n/, $headers)) {
if ($line =~ m/^([[:alnum:]-]+):\s+(.*)/) {
$headers{$1} = $2;
+ $lastkey = $1;
+ } elsif ($line =~ m/^\s+(.*)/ and defined($lastkey)) {
+ $headers{$lastkey} .= ' ' . $1;
}
}
-
my $lock = $headers{'Cancel-Lock'};
+
if (defined($lock)) {
my $key = $r_hdr->{'Cancel-Key'} || return "$descr of $target without Cancel-Key";
#return verify_cancel_key($key, $lock, ' target=' . $target);
my %lock;
for my $l(split(/\s+/, $cancel_lock)) {
- next unless($l =~ m/^(sha1|md5):(\S+)/);
+ next unless($l =~ m/^(sha512|sha256|sha1|md5):(\S+)/);
$lock{$2} = $1;
}
for my $k(split(/\s+/, $cancel_key)) {
- unless($k =~ m/^(sha1|md5):(\S+)/) {
+ unless($k =~ m/^(sha512|sha256|sha1|md5):(\S+)/) {
INN::syslog('notice', "Invalid Cancel-Key syntax '$k'.$msg");
next;
}
my $key;
- if ($1 eq 'sha1') {
- $key = Digest::SHA::sha1($2); }
- elsif ($1 eq 'md5') {
+ if ($1 eq 'sha512') {
+ $key = Digest::SHA::sha512($2);
+ } elsif ($1 eq 'sha256') {
+ $key = Digest::SHA::sha256($2);
+ } elsif($1 eq 'sha1') {
+ $key = Digest::SHA::sha1($2);
+ } elsif ($1 eq 'md5') {
$key = Digest::MD5::md5($2);
}
$key = MIME::Base64::encode_base64($key, '');