Cancel-Lock

Aus OpenNewsNetwork

Wechseln zu: Navigation, Suche

Inhaltsverzeichnis

Verbergen


Cancelock und Cancelkey

#!/usr/bin/perl
# 
# Benötigte Module
use MIME::Base64;
use Digest::HMAC_SHA1;
use Digest::SHA1;
 
# Beispieldaten
$user = 'meinbenutzername@invalid.invalid';
$CANCELLOCK = 'Supergrossesgeheimnis';
$hdr{'Message-ID'} = '<diezukancelndemessid@newserver.invalid>';
$hdr{'Control'} = "cancel ".$hdr{'Message-ID'};
 
# Eigentlicher Code der auch in der filter_nnrpd.pl funktioniert
# wie bei X-Trace
 
 
if($hdr{'Control'}){
                # Vielleicht nicht ganz sauber denn..
                @control = split(/ /, $hdr{"Control"});
 
                foreach(@control) {
                     if (/^cancel/i) {
                        $cancel++;
                      }
                #hier wird der control one cancel gespeichert
                #und wenn das nicht die zu cancelnde Message-ID
                #ist gehts schief. 
                      $CancelID = $_;
                }
}
 
# Wenn der User keinen Cancellock stellt, dann stellen wir einen.
if(!$hdr{'Cancel-Lock'}) {
                    $hmac = Digest::HMAC_SHA1->new("$user");
                    $data = $hdr{'Message-ID'}."$CANCELLOCK";
                    $hmac->add("$data");
                    $digest = $hmac->b64digest;
                    $lock =  encode_base64(Digest::SHA1::sha1($digest),"");
                    $hdr{'Cancel-Lock'} =  "sha1:".$lock."";
}
 
# Mift, wenn der User doch eine CancelID stellt, dann überschreiben
# wir dessen Cancel-Key, wenn es ein cancel ist.
# das muss vielleicht noch verbessert werden.
if($cancel) {
                    $hmac = Digest::HMAC_SHA1->new("$user");
                    $data = $CancelID."$CANCELLOCK";
                    $hmac->add($data);
                    $digest = $hmac->b64digest;
                    $schluessel = $digest;
                    $hdr{'Cancel-key'} = "sha1:".$schluessel;
}
Persönliche Werkzeuge