filter_innd: Add missing module.
[usenet/INN.git] / filter / filter_nnrpd.pl
1 #
2 # Do any initialization steps.
3 #
4 use Digest::MD5  qw(md5_base64);
5 use Digest::SHA();
6 use Digest::HMAC_SHA1();
7 use MIME::Base64();
8
9 $CANCEL_LOCK = 'secretword';
10
11 #
12 # Filter
13 #
14 sub filter_post {
15    my $rval = "" ;             # assume we'll accept.
16    $modify_headers = 1;
17
18    # Cancel-Lock / Cancel-Key
19    add_cancel_lock(\%hdr, $user);
20      
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);
24    }
25    elsif (exists( $hdr{"Supersedes"} )) {
26       my $key = calc_cancel_key($user, $hdr{"Supersedes"});
27       add_cancel_item(\%hdr, 'Cancel-Key', $key);
28    }                     
29      
30    return $rval;
31 }
32
33 #
34 # Cancel-Lock / Cancel-Key
35 #
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;
41 }
42
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), '');
46 }
47
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);
53 }
This page took 0.010892 seconds and 3 git commands to generate.