2 # Do any initialization steps.
4 use Digest::MD5 qw(md5_base64);
6 use Digest::HMAC_SHA1();
9 $CANCEL_LOCK = 'secretword';
15 my $rval = "" ; # assume we'll accept.
18 # Cancel-Lock / Cancel-Key
19 add_cancel_lock(\%hdr, $user);
21 if (exists( $hdr{"Control"} ) && $hdr{"Control"} =~ m/^cancel\s+(<[^>]+>)/i) {
22 my $key = calc_cancel_key($user, $1);
23 add_cancel_item(\%hdr, 'Cancel-Key', $key);
25 elsif (exists( $hdr{"Supersedes"} )) {
26 my $key = calc_cancel_key($user, $hdr{"Supersedes"});
27 add_cancel_item(\%hdr, 'Cancel-Key', $key);
34 # Cancel-Lock / Cancel-Key
36 sub add_cancel_item($$$) {
37 my ( $r_hdr, $name, $value ) = @_;
38 my $prefix = $r_hdr->{$name};
39 $prefix = defined($prefix) ? $prefix . ' sha1:' : 'sha1:';
40 $r_hdr->{$name} = $prefix . $value;
43 sub calc_cancel_key($$) {
44 my ( $user, $message_id ) = @_;
45 return MIME::Base64::encode(Digest::HMAC_SHA1::hmac_sha1($message_id, $user . $CANCEL_LOCK), '');
48 sub add_cancel_lock($$) {
49 my ( $r_hdr, $user ) = @_;
50 my $key = calc_cancel_key($user, $r_hdr->{'Message-ID'});
51 my $lock = MIME::Base64::encode(Digest::SHA::sha1($key), '');
52 add_cancel_item($r_hdr, 'Cancel-Lock', $lock);