Initial checkin.
Signed-off-by: Thomas Hochstein <thh@thh.name>
This commit is contained in:
commit
30132626b8
68 changed files with 5497 additions and 0 deletions
94
bin/fremdcancel.pl
Normal file
94
bin/fremdcancel.pl
Normal file
|
|
@ -0,0 +1,94 @@
|
|||
#!/usr/bin/perl
|
||||
######################################################################
|
||||
#
|
||||
# $Id: fremdcancel.pl 302 2011-09-30 00:09:02Z alba $
|
||||
#
|
||||
# Copyright 2007 - 2009 Roman Racine
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
######################################################################
|
||||
BEGIN { push (@INC, $ENV{'HUHU_DIR'}); }
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
use Net::NNTP;
|
||||
use News::Article;
|
||||
use News::Article::Cancel;
|
||||
use MOD::Utils;
|
||||
|
||||
use constant NR_POSTS_TO_EXAMINE => 5;
|
||||
|
||||
######################################################################
|
||||
sub check_pgp($$$)
|
||||
######################################################################
|
||||
{
|
||||
my $article = shift || die;
|
||||
my $moderated_group = shift || die;
|
||||
my $pgp_keyid = shift || die;
|
||||
|
||||
my $mid = $article->header('message-id') || die 'No Message-ID';
|
||||
my $result = $article->verify_pgpmoose($moderated_group);
|
||||
|
||||
if (!$result)
|
||||
{
|
||||
printf "Checking %s, not signed.\n", $mid;
|
||||
return undef;
|
||||
}
|
||||
if ($result ne $pgp_keyid)
|
||||
{
|
||||
printf "Checking %s, signed with wrong key. Expected '%s', got '%s'.\n",
|
||||
$mid, $pgp_keyid, $result;
|
||||
return undef;
|
||||
}
|
||||
printf "Checking %s, ok\n", $mid;
|
||||
return 1;
|
||||
}
|
||||
|
||||
######################################################################
|
||||
# MAIN
|
||||
######################################################################
|
||||
|
||||
my %config = MOD::Utils::read_private_config($ARGV[0]);
|
||||
|
||||
my $moderated_group = $config{'moderated_group'};
|
||||
if (!$moderated_group)
|
||||
{
|
||||
printf "Missing configuration item 'moderated_group'.\n";
|
||||
exit(1);
|
||||
}
|
||||
|
||||
my $pgp_keyid = $config{'pgp_keyid'};
|
||||
if (!$pgp_keyid)
|
||||
{
|
||||
printf "Missing configuration item 'pgp_keyid'.\n";
|
||||
exit(1);
|
||||
}
|
||||
|
||||
my $nntp = new Net::NNTP($config{'nntp_server'}) or exit(0);
|
||||
$nntp->authinfo($config{'nntp_user'},$config{'nntp_pass'}) or exit(0);
|
||||
my ($articles,$first,$last,undef) = $nntp->group($config{'moderated_group'});
|
||||
|
||||
my $start = $last - NR_POSTS_TO_EXAMINE;
|
||||
if ($start < $first) { $start = $first; }
|
||||
|
||||
for my $id ($start .. $last)
|
||||
{
|
||||
my $articletext = $nntp->article($id);
|
||||
if (defined($articletext))
|
||||
{
|
||||
my $article = News::Article::Cancel->new($articletext);
|
||||
my $ok = check_pgp($article, $moderated_group, $pgp_keyid);
|
||||
if (!$ok)
|
||||
{
|
||||
next if ($article->header('Newsgroups') =~ /de.admin.news.announce/);
|
||||
my $cancel = $article->make_cancel($config{'approve_string'},'moderator','Gecancelt because of fake approval');
|
||||
$cancel->set_headers('Approved',$config{'approve_string'});
|
||||
$cancel->sign_pgpmoose($config{'moderated_group'},$config{'pgp_passphrase'},$config{'pgp_keyid'});
|
||||
$cancel->post($nntp);
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue