Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

r483@dog: rspier | 2005-07-06 21:17:00 -0700

 The great plugin renaming in the name of inheritance and standardization commit.
 
 1. new concept of standard hook_ names.
 2. Plugin::init
 3. renamed many subroutines in plugins (and cleaned up register subs)
 4. updated README.plugins
 


git-svn-id: https://svn.perl.org/qpsmtpd/trunk@479 958fd67b-6ff1-0310-b445-bb7760255be9
  • Loading branch information...
commit 90daeb3786d9bb16ec5aec88378b070b4a0e3a1e 1 parent 254b4fd
@rspier rspier authored
Showing with 169 additions and 223 deletions.
  1. +79 −0 README.plugins
  2. +28 −6 lib/Qpsmtpd/Plugin.pm
  3. +1 −6 plugins/auth/authdeny
  4. +1 −11 plugins/auth/authnull
  5. +2 −8 plugins/check_badmailfrom
  6. +2 −8 plugins/check_badmailfromto
  7. +1 −6 plugins/check_badrcptto
  8. +1 −7 plugins/check_badrcptto_patterns
  9. +1 −2  plugins/check_basicheaders
  10. +1 −2  plugins/check_loop
  11. +1 −6 plugins/check_norelay
  12. +1 −6 plugins/check_relay
  13. +3 −7 plugins/check_spamhelo
  14. +1 −6 plugins/content_log
  15. +1 −2  plugins/count_unrecognized_commands
  16. +2 −18 plugins/dns_whitelist_soft
  17. +4 −7 plugins/dnsbl
  18. +1 −2  plugins/greylisting
  19. +1 −2  plugins/http_config
  20. +1 −7 plugins/ident/geoip
  21. +1 −2  plugins/ident/p0f
  22. +3 −7 plugins/logging/adaptive
  23. +1 −7 plugins/logging/devnull
  24. +1 −2  plugins/logging/warn
  25. +6 −12 plugins/milter
  26. +1 −3 plugins/queue/maildir
  27. +1 −2  plugins/queue/postfix-queue
  28. +1 −2  plugins/queue/qmail-queue
  29. +1 −2  plugins/queue/smtp-forward
  30. +1 −5 plugins/quit_fortune
  31. +1 −6 plugins/rcpt_ok
  32. +1 −6 plugins/require_resolvable_fromhost
  33. +3 −10 plugins/rhsbl
  34. +3 −6 plugins/sender_permitted_from
  35. +1 −2  plugins/spamassassin
  36. +1 −4 plugins/virus/aveclient
  37. +1 −2  plugins/virus/bitdefender
  38. +1 −6 plugins/virus/check_for_hi_virus
  39. +1 −3 plugins/virus/clamav
  40. +1 −2  plugins/virus/clamdscan
  41. +1 −2  plugins/virus/hbedv
  42. +1 −2  plugins/virus/kavscanner
  43. +1 −5 plugins/virus/klez_filter
  44. +1 −2  plugins/virus/sophie
  45. +1 −2  plugins/virus/uvscan
View
79 README.plugins
@@ -270,3 +270,82 @@ ended.
Returns the configured system-wide spool directory.
=back
+
+=head1 Naming Conventions
+
+Plugins should be written using standard named hook subroutines. This
+allows them to be overloaded and extended easily.
+
+Because some of our callback names have characters invalid in
+subroutine names, they must be translated. The current translation
+routine is: C< s/\W/_/g; >
+
+=head2 Naming Map
+
+ hook method
+ ---------- ------------
+ config hook_config
+ queue hook_queue
+ data hook_data
+ data_post hook_data_post
+ quit hook_quit
+ rcpt hook_rcpt
+ mail hook_mail
+ ehlo hook_ehlo
+ helo hook_helo
+ auth hook_auth
+ auth-plain hook_auth_plain
+ auth-login hook_auth_login
+ auth-cram-md5 hook_auth_cram_md5
+ connect hook_connect
+ reset_transaction hook_reset_transaction
+ unrecognized_command hook_unrecognized_command
+
+=head1 Register
+
+If you choose not to use the default naming convention, you need to
+register the hooks in your plugin. You do this with the C< register >
+method call on the plugin object.
+
+ sub register {
+ my ($self, $qp) = @_;
+
+ $self->register_hook('mail', 'mail_handler');
+ $self->register_hook('rcpt', 'rcpt_handler');
+ $self->register_hook('disconnect', 'disconnect_handler');
+ }
+
+ sub mail_handler { ... }
+ sub rcpt_handler { ... }
+ sub disconnect_handler { ... }
+
+A single plugin can register as many hooks as it wants, and can
+register a hook multiple times.
+
+The C< register > method is also often used for initialization and
+reading configuration.
+
+=head1 Init
+
+The 'init' method is the first method called after a plugin is
+loaded. It's mostly for inheritance, below.
+
+=head1 Inheritance
+
+Instead of modifying @ISA directly in your plugin, use the
+C< plugin_isa > method from the init subroutine.
+
+ # rcpt_ok_child
+ sub init {
+ my ($self, $qp) = @_;
+ $self->isa_plugin('rcpt_ok');
+ }
+
+ sub hook_rcpt {
+ my ($self, $transaction, $recipient) = @_;
+ # do something special here...
+ $self->SUPER::hook_rcpt( $transaction, $recipient );
+ }
+
+
+
View
34 lib/Qpsmtpd/Plugin.pm
@@ -1,4 +1,5 @@
package Qpsmtpd::Plugin;
+use Qpsmtpd::Constants;
use strict;
our %hooks = map { $_ => 1 } qw(
@@ -16,9 +17,11 @@ sub new {
sub register_hook {
my ($plugin, $hook, $method, $unshift) = @_;
-
+
die $plugin->plugin_name . " : Invalid hook: $hook" unless $hooks{$hook};
+ $plugin->{_qp}->varlog(LOGDEBUG, $plugin->plugin_name, " hooking ", $hook);
+
# I can't quite decide if it's better to parse this code ref or if
# we should pass the plugin object and method name ... hmn.
$plugin->qp->_register_hook($hook, { code => sub { local $plugin->{_qp} = shift; local $plugin->{_hook} = $hook; $plugin->$method(@_) },
@@ -32,7 +35,9 @@ sub _register {
my $self = shift;
my $qp = shift;
local $self->{_qp} = $qp;
- $self->register($qp, @_);
+ $self->init($qp, @_) if $self->can('init');
+ $self->_register_standard_hooks($qp, @_);
+ $self->register($qp, @_) if $self->can('register');
}
sub qp {
@@ -74,7 +79,7 @@ sub temp_dir {
# plugin inheritance:
# usage:
-# sub register {
+# sub init {
# my $self = shift;
# $self->isa_plugin("rhsbl");
# $self->SUPER::register(@_);
@@ -82,18 +87,23 @@ sub temp_dir {
sub isa_plugin {
my ($self, $parent) = @_;
my ($currentPackage) = caller;
- my $newPackage = $currentPackage."::_isa_";
+
+ my $cleanParent = $parent;
+ $cleanParent =~ s/\W/_/g;
+ my $newPackage = $currentPackage."::_isa_$cleanParent";
+
return if defined &{"${newPackage}::register"};
- Qpsmtpd::_compile($self->plugin_name . "_isa",
+ $self->compile($self->plugin_name . "_isa_$cleanParent",
$newPackage,
"plugins/$parent"); # assumes Cwd is qpsmtpd root
-
+ warn "---- $newPackage\n";
no strict 'refs';
push @{"${currentPackage}::ISA"}, $newPackage;
}
+# why isn't compile private? it's only called from Plugin and Qpsmtpd.
sub compile {
my ($class, $plugin, $package, $file, $test_mode) = @_;
@@ -141,4 +151,16 @@ sub compile {
die "eval $@" if $@;
}
+sub _register_standard_hooks {
+ my ($plugin, $qp) = @_;
+
+ for my $hook (keys %hooks) {
+ my $hooksub = "hook_$hook";
+ $hooksub =~ s/\W/_/g;
+ $plugin->register_hook( $hook, $hooksub )
+ if ($plugin->can($hooksub));
+ }
+}
+
+
1;
View
7 plugins/auth/authdeny
@@ -5,12 +5,7 @@
# the Qpsmtpd::Auth module. Don't run this in production!!!
#
-sub register {
- my ( $self, $qp ) = @_;
- $self->register_hook( "auth", "authdeny" );
-}
-
-sub authdeny {
+sub hook_auth {
my ( $self, $transaction, $method, $user, $passClear, $passHash, $ticket ) =
@_;
View
12 plugins/auth/authnull
@@ -5,17 +5,7 @@
# the Qpsmtpd::Auth module. Don't run this in production!!!
#
-sub register {
- my ( $self, $qp ) = @_;
-
- # $self->register_hook("auth-plain", "authnull");
- # $self->register_hook("auth-login", "authnull");
- # $self->register_hook("auth-cram-md5", "authnull");
-
- $self->register_hook( "auth", "authnull" );
-}
-
-sub authnull {
+sub hook_auth {
my ( $self, $transaction, $method, $user, $passClear, $passHash, $ticket ) =
@_;
View
10 plugins/check_badmailfrom
@@ -20,13 +20,7 @@ stage, so store it until later.
=cut
-sub register {
- my ($self, $qp) = @_;
- $self->register_hook("mail", "mail_handler");
- $self->register_hook("rcpt", "rcpt_handler");
-}
-
-sub mail_handler {
+sub hook_mail {
my ($self, $transaction, $sender) = @_;
my @badmailfrom = $self->qp->config("badmailfrom")
@@ -49,7 +43,7 @@ sub mail_handler {
return (DECLINED);
}
-sub rcpt_handler {
+sub hook_rcpt {
my ($self, $transaction, $rcpt) = @_;
my $note = $transaction->notes('badmailfrom');
if ($note) {
View
10 plugins/check_badmailfromto
@@ -16,13 +16,7 @@ Based heavily on check_badmailfrom.
=cut
-sub register {
- my ($self, $qp) = @_;
- $self->register_hook("mail", "mail_handler");
- $self->register_hook("rcpt", "rcpt_handler");
-}
-
-sub mail_handler {
+sub hook_mail {
my ($self, $transaction, $sender) = @_;
my @badmailfromto = $self->qp->config("badmailfromto")
@@ -46,7 +40,7 @@ sub mail_handler {
return (DECLINED);
}
-sub rcpt_handler {
+sub hook_rcpt {
my ($self, $transaction, $rcpt) = @_;
my $recipient = lc($rcpt->user) . '@' . lc($rcpt->host);
my $sender = $transaction->notes('badmailfromto');
View
7 plugins/check_badrcptto
@@ -1,11 +1,6 @@
# this plugin checks the badrcptto config (like badmailfrom for rcpt address)
-sub register {
- my ($self, $qp) = @_;
- $self->register_hook("rcpt", "check_for_badrcptto");
-}
-
-sub check_for_badrcptto {
+sub hook_rcpt {
my ($self, $transaction, $recipient) = @_;
my @badrcptto = $self->qp->config("badrcptto") or return (DECLINED);
return (DECLINED) unless $recipient->host && $recipient->user;
View
8 plugins/check_badrcptto_patterns
@@ -26,13 +26,7 @@ terms as Perl itself.
=cut
-sub register
-{
- my ($self, $qp) = @_;
- $self->register_hook("rcpt", "check_for_badrcptto_patterns");
-}
-
-sub check_for_badrcptto_patterns
+sub hook_rcpt
{
my ($self, $transaction, $recipient) = @_;
View
3  plugins/check_basicheaders
@@ -33,7 +33,6 @@ use Date::Parse qw(str2time);
sub register {
my ($self, $qp, @args) = @_;
- $self->register_hook("data_post", "check_basic_headers");
if (@args > 0) {
$self->{_days} = $args[0];
@@ -41,7 +40,7 @@ sub register {
}
}
-sub check_basic_headers {
+sub hook_data_post {
my ($self, $transaction) = @_;
return (DENY, "You have to send some data first")
View
3  plugins/check_loop
@@ -28,7 +28,6 @@ Released to the public domain, 17 June 2005.
sub register {
my ($self, $qp, @args) = @_;
- $self->register_hook("data_post", "check_loop");
$self->{_max_hops} = $args[0] || 100;
@@ -38,7 +37,7 @@ sub register {
$self->log(LOGWARN, "Ignoring additional arguments") if @args > 1;
}
-sub check_loop {
+sub hook_data_post {
my ($self, $transaction) = @_;
my $hops = 0;
View
7 plugins/check_norelay
@@ -34,12 +34,7 @@ terms as Perl itself.
=cut
-sub register {
- my ($self, $qp) = @_;
- $self->register_hook("connect", "check_norelay");
-}
-
-sub check_norelay {
+sub hook_connect {
my ($self, $transaction) = @_;
my $connection = $self->qp->connection;
View
7 plugins/check_relay
@@ -2,12 +2,7 @@
# $ENV{RELAYCLIENT} to see if relaying is allowed.
#
-sub register {
- my ($self, $qp) = @_;
- $self->register_hook("connect", "check_relay");
-}
-
-sub check_relay {
+sub hook_connect {
my ($self, $transaction) = @_;
my $connection = $self->qp->connection;
View
10 plugins/check_spamhelo
@@ -16,13 +16,7 @@ per line.
=cut
-sub register {
- my ($self, $qp) = @_;
- $self->register_hook("helo", "check_helo");
- $self->register_hook("ehlo", "check_helo");
-}
-
-sub check_helo {
+sub hook_helo {
my ($self, $transaction, $host) = @_;
($host = lc $host) or return DECLINED;
@@ -35,3 +29,5 @@ sub check_helo {
return DECLINED;
}
+# also support EHLO
+*hook_ehlo = \&hook_helo;
View
7 plugins/content_log
@@ -6,12 +6,7 @@
use POSIX qw:strftime:;
-sub register {
- my ($self, $qp) = @_;
- $self->register_hook("data_post", "mail_handler");
-}
-
-sub mail_handler {
+sub hook_data_post {
my ($self, $transaction) = @_;
# as a decent default, log on a per-day-basis
View
3  plugins/count_unrecognized_commands
@@ -17,7 +17,6 @@ before we disconnect the client. Defaults to 4.
sub register {
my ($self, $qp, @args) = @_;
- $self->register_hook("unrecognized_command", "check_unrec_cmd");
if (@args > 0) {
$self->{_unrec_cmd_max} = $args[0];
@@ -30,7 +29,7 @@ sub register {
}
-sub check_unrec_cmd {
+sub hook_unrecognized_command {
my ($self, $cmd) = @_[0,2];
$self->log(LOGINFO, "Unrecognized command '$cmd'");
View
20 plugins/dns_whitelist_soft
@@ -41,14 +41,7 @@ based on the 'whitelist' plugin by Devin Carraway <qpsmtpd@devin.com>.
=cut
-sub register {
- my ($self, $qp) = @_;
-
- $self->register_hook("connect", "connect_handler");
- $self->register_hook("rcpt", "rcpt_handler");
-}
-
-sub connect_handler {
+sub hook_connect {
my ($self, $transaction) = @_;
my $remote_ip = $self->qp->connection->remote_ip;
@@ -145,7 +138,7 @@ sub process_sockets {
}
-sub rcpt_handler {
+sub hook_rcpt {
my ($self, $transaction, $rcpt) = @_;
my $ip = $self->qp->connection->remote_ip || return (DECLINED);
my $note = $self->process_sockets;
@@ -155,13 +148,4 @@ sub rcpt_handler {
return DECLINED;
}
-sub disconnect_handler {
- my ($self, $transaction) = @_;
-
- $self->qp->connection->notes('whitelist_sockets', undef);
-
- return DECLINED;
-}
-
-
1;
View
11 plugins/dnsbl
@@ -8,13 +8,10 @@ sub register {
else {
$self->{_dnsbl}->{DENY} = DENY;
}
-
- $self->register_hook("connect", "connect_handler");
- $self->register_hook("rcpt", "rcpt_handler");
- $self->register_hook("disconnect", "disconnect_handler");
+
}
-sub connect_handler {
+sub hook_connect {
my ($self, $transaction) = @_;
my $remote_ip = $self->qp->connection->remote_ip;
@@ -151,7 +148,7 @@ sub process_sockets {
}
-sub rcpt_handler {
+sub hook_rcpt {
my ($self, $transaction, $rcpt) = @_;
my $connection = $self->qp->connection;
@@ -184,7 +181,7 @@ sub rcpt_handler {
}
-sub disconnect_handler {
+sub hook_disconnect {
my ($self, $transaction) = @_;
$self->qp->connection->notes('dnsbl_sockets', undef);
View
3  plugins/greylisting
@@ -137,7 +137,6 @@ sub register {
} else {
$self->register_hook("rcpt", "rcpt_handler");
}
- $self->register_hook("data_post", "data_handler");
}
sub mail_handler {
@@ -167,7 +166,7 @@ sub rcpt_handler {
return DECLINED;
}
-sub data_handler {
+sub hook_data {
my ($self, $transaction) = @_;
my $note = $transaction->notes('denysoft_greylist');
return DECLINED unless $note;
View
3  plugins/http_config
@@ -31,10 +31,9 @@ my @urls;
sub register {
my ($self, $qp, @args) = @_;
@urls = @args;
- $self->register_hook("config", "http_config");
}
-sub http_config {
+sub hook_config {
my ($self, $transaction, $config) = @_;
$self->log(LOGNOTICE, "http_config called with $config");
for my $url (@urls) {
View
8 plugins/ident/geoip
@@ -17,13 +17,7 @@ use Geo::IP;
my $geoip = Geo::IP->new(GEOIP_STANDARD);
-
-sub register {
- my ($self, $qp) = @_;
- $self->register_hook("connect", "lookup_geoip");
-}
-
-sub lookup_geoip {
+sub hook_connect {
my ($self) = @_;
my $country =
View
3  plugins/ident/p0f
@@ -23,13 +23,12 @@ use Net::IP;
sub register {
my ($self, $qp, $p0f_socket) = @_;
- $self->register_hook("connect", "lookup_p0f");
$p0f_socket =~ /(.*)/; # untaint
$self->{_args}->{p0f_socket} = $1;
}
-sub lookup_p0f {
+sub hook_connect {
my($self, $qp) = @_;
eval {
View
10 plugins/logging/adaptive
@@ -30,16 +30,12 @@ sub register {
$self->{_prefix} = $1;
}
- $self->register_hook( 'logging', 'wlog' );
- $self->register_hook( 'deny', 'dlog' );
- $self->register_hook( 'reset_transaction', 'slog' );
-
# If you want to capture this log entry with this plugin, you need to
# wait until after you register the plugin
$self->log( LOGINFO, 'Initializing logging::adaptive plugin' );
}
-sub wlog {
+sub hook_logging { # wlog
my ( $self, $transaction, $trace, $hook, $plugin, @log ) = @_;
# Don't log your own log entries! If this is the only logging plugin
@@ -66,12 +62,12 @@ sub wlog {
return DECLINED;
}
-sub dlog {
+sub hook_deny { # dlog
my ( $self, $transaction, $prev_hook, $return, $return_text ) = @_;
$self->{_denied} = 1;
}
-sub slog {
+sub hook_reset_transaction { # slog
# fires when a message is accepted
my ( $self, $transaction, @args ) = @_;
View
8 plugins/logging/devnull
@@ -1,13 +1,7 @@
#!/usr/bin/perl
# this is a simple 'drop packets on the floor' plugin
-sub register {
- my $self = shift;
-
- $self->register_hook('logging', 'wlog');
-}
-
-sub wlog {
+sub hook_logging {
return DECLINED;
}
View
3  plugins/logging/warn
@@ -16,14 +16,13 @@ sub register {
$self->{_level} = log_level($loglevel);
}
}
- $self->register_hook('logging', 'wlog');
# If you want to capture this log entry with this plugin, you need to
# wait until after you register the plugin
$self->log(LOGINFO,'Initializing logging::warn plugin');
}
-sub wlog {
+sub hook_logging {
my ($self, $transaction, $trace, $hook, $plugin, @log) = @_;
# Don't log your own log entries! If this is the only logging plugin
View
18 plugins/milter
@@ -42,15 +42,9 @@ sub register {
$self->{host} = $host;
$self->{port} = $port;
- $self->register_hook("connect", "connect_handler");
- $self->register_hook("helo", "helo_handler");
- $self->register_hook("mail", "mail_handler");
- $self->register_hook("rcpt", "rcpt_handler");
- $self->register_hook("data_post", "data_handler");
- $self->register_hook("disconnect", "disconnect_handler");
}
-sub disconnect_handler {
+sub hook_disconnect {
my ($self) = @_;
my $milter = $self->qp->connection->notes('milter') || return DECLINED;
@@ -93,7 +87,7 @@ sub check_results {
}
}
-sub connect_handler {
+sub hook_connect {
my ($self, $transaction) = @_;
$self->log(LOGDEBUG, "milter $self->{name} opening connection to milter backend");
@@ -119,7 +113,7 @@ sub connect_handler {
return DECLINED;
}
-sub helo_handler {
+sub hook_helo {
my ($self, $transaction) = @_;
if (my $txt = $self->qp->connection->notes('spam')) {
@@ -140,7 +134,7 @@ sub helo_handler {
return DECLINED;
}
-sub mail_handler {
+sub hook_mail {
my ($self, $transaction, $address) = @_;
my $milter = $self->qp->connection->notes('milter');
@@ -153,7 +147,7 @@ sub mail_handler {
return DECLINED;
}
-sub rcpt_handler {
+sub hook_rcpt {
my ($self, $transaction, $address) = @_;
my $milter = $self->qp->connection->notes('milter');
@@ -167,7 +161,7 @@ sub rcpt_handler {
return DECLINED;
}
-sub data_handler {
+sub hook_data {
my ($self, $transaction) = @_;
my $milter = $self->qp->connection->notes('milter');
View
4 plugins/queue/maildir
@@ -35,13 +35,11 @@ sub register {
my $hostname = (hostname =~ m/([\w\._\-]+)/)[0];
$self->{_hostname} = $hostname;
- $self->register_hook("queue", "queue_handler");
-
}
my $maildir_counter = 0;
-sub queue_handler {
+sub hook_queue {
my ($self, $transaction) = @_;
my ($time, $microseconds) = gettimeofday;
View
3  plugins/queue/postfix-queue
@@ -18,7 +18,6 @@ use Qpsmtpd::Postfix;
sub register {
my ($self, $qp, @args) = @_;
- $self->register_hook("queue", "queue_handler");
if (@args > 0) {
$self->{_queue_socket} = $args[0];
@@ -31,7 +30,7 @@ sub register {
}
-sub queue_handler {
+sub hook_queue {
my ($self, $transaction) = @_;
my ($status, $qid, $reason) = Qpsmtpd::Postfix->inject_mail($transaction);
View
3  plugins/queue/qmail-queue
@@ -23,7 +23,6 @@ use POSIX ();
sub register {
my ($self, $qp, @args) = @_;
- $self->register_hook("queue", "queue_handler");
if (@args > 0) {
$self->{_queue_exec} = $args[0];
@@ -36,7 +35,7 @@ sub register {
$self->{_queue_exec} = $ENV{QMAILQUEUE} if $ENV{QMAILQUEUE};
}
-sub queue_handler {
+sub hook_queue {
my ($self, $transaction) = @_;
# these bits inspired by Peter Samuels "qmail-queue wrapper"
View
3  plugins/queue/smtp-forward
@@ -23,7 +23,6 @@ use Net::SMTP;
sub register {
my ($self, $qp, @args) = @_;
- $self->register_hook("queue", "queue_handler");
if (@args > 0) {
if ($args[0] =~ /^([\.\w_-]+)$/) {
@@ -43,7 +42,7 @@ sub register {
}
-sub queue_handler {
+sub hook_queue {
my ($self, $transaction) = @_;
$self->log(LOGINFO, "forwarding to $self->{_smtp_server}:$self->{_smtp_port}");
View
6 plugins/quit_fortune
@@ -1,9 +1,5 @@
-sub register {
- shift->register_hook("quit", "quit_handler");
-}
-
-sub quit_handler {
+sub hook_quit {
my $qp = shift->qp;
# if she talks EHLO she is probably too sophisticated to enjoy the
View
7 plugins/rcpt_ok
@@ -3,12 +3,7 @@
# It should be configured to be run _LAST_!
#
-sub register {
- my ($self, $qp) = @_;
- $self->register_hook("rcpt", "rcpt_ok");
-}
-
-sub rcpt_ok {
+sub hook_rcpt {
my ($self, $transaction, $recipient) = @_;
my $host = lc $recipient->host;
View
7 plugins/require_resolvable_fromhost
@@ -1,11 +1,6 @@
use Net::DNS qw(mx);
-sub register {
- my ($self, $qp) = @_;
- $self->register_hook("mail", "mail_handler");
-}
-
-sub mail_handler {
+sub hook_mail {
my ($self, $transaction, $sender) = @_;
return DECLINED
View
13 plugins/rhsbl
@@ -1,12 +1,5 @@
-sub register {
- my ($self, $qp) = @_;
- $self->register_hook('mail', 'mail_handler');
- $self->register_hook('rcpt', 'rcpt_handler');
- $self->register_hook('disconnect', 'disconnect_handler');
-}
-
-sub mail_handler {
+sub hook_mail {
my ($self, $transaction, $sender) = @_;
my $res = new Net::DNS::Resolver;
@@ -40,7 +33,7 @@ sub mail_handler {
return DECLINED;
}
-sub rcpt_handler {
+sub hook_rcpt {
my ($self, $transaction, $rcpt) = @_;
my $host = $transaction->sender->host;
my $hello = $self->qp->connection->hello_host;
@@ -111,7 +104,7 @@ sub process_sockets {
return $trans->notes('rhsbl', $result);
}
-sub disconnect_handler {
+sub hook_disconnect {
my ($self, $transaction) = @_;
$transaction->notes('rhsbl_sockets', undef);
View
9 plugins/sender_permitted_from
@@ -31,12 +31,9 @@ use Mail::SPF::Query 1.991;
sub register {
my ($self, $qp, @args) = @_;
%{$self->{_args}} = @args;
- $self->register_hook("mail", "mail_handler");
- $self->register_hook("rcpt", "rcpt_handler");
- $self->register_hook("data_post", "data_handler");
}
-sub mail_handler {
+sub hook_mail {
my ($self, $transaction, $sender) = @_;
return (DECLINED) unless ($sender->format ne "<>"
@@ -73,7 +70,7 @@ sub mail_handler {
return (DECLINED);
}
-sub rcpt_handler {
+sub hook_rcpt {
my ($self, $transaction, $rcpt) = @_;
# special addresses don't get SPF-tested.
@@ -109,7 +106,7 @@ sub _uri_escape {
return $str;
}
-sub data_handler {
+sub hook_data {
my ($self, $transaction) = @_;
my $query = $transaction->notes('spfquery');
View
3  plugins/spamassassin
@@ -76,7 +76,6 @@ use IO::Handle;
sub register {
my ($self, $qp, @args) = @_;
- $self->register_hook("data_post", "check_spam");
$self->log(LOGERROR, "Bad parameters for the spamassassin plugin")
if @_ % 2;
@@ -91,7 +90,7 @@ sub register {
}
-sub check_spam {
+sub hook_data_post { # check_spam
my ($self, $transaction) = @_;
$self->log(LOGDEBUG, "check_spam");
View
5 plugins/virus/aveclient
@@ -96,9 +96,6 @@ use Mail::Address;
sub register {
my ($self, $qp, @args) = @_;
- # where to be called
- $self->register_hook("data_post", "avscan");
-
# defaults to be used
$self->{_avclient_bin} = "/opt/kav/bin/aveclient";
$self->{_avdaemon_sock} = "/var/run/aveserver";
@@ -122,7 +119,7 @@ sub register {
}
}
-sub avscan {
+sub hook_data_post {
my ($self, $transaction) = @_;
my ($temp_fh, $filename) = tempfile();
my $description = 'clean';
View
3  plugins/virus/bitdefender
@@ -67,7 +67,6 @@ use warnings;
sub register {
my ( $self, $qp, @args ) = @_;
- $self->register_hook( "data_post", "bdc_scan" );
while (@args) {
$self->{"_bitd"}->{ pop @args } = pop @args;
@@ -78,7 +77,7 @@ sub register {
$self->{"_bitd"}->{"max_size"} *= 1024;
}
-sub bdc_scan {
+sub hook_data_post {
my ( $self, $transaction ) = @_;
if ( $transaction->body_size > $self->{"_bitd"}->{"max_size"} ) {
View
7 plugins/virus/check_for_hi_virus
@@ -1,11 +1,6 @@
#!/usr/bin/perl -w
-sub register {
- my $self = shift;
- $self->register_hook('data_post', 'check_for_hi_virus');
-}
-
-sub check_for_hi_virus {
+sub hook_data_post {
my ($self, $transaction) = @_;
# make sure we read from the beginning;
View
4 plugins/virus/clamav
@@ -148,11 +148,9 @@ sub register {
return undef;
}
- $self->register_hook("data_post", "clam_scan");
- 1;
}
-sub clam_scan {
+sub hook_data_post {
my ($self, $transaction) = @_;
if ($transaction->body_size > $self->{_max_size}) {
View
3  plugins/virus/clamdscan
@@ -94,7 +94,6 @@ use Clamd;
sub register {
my ( $self, $qp, @args ) = @_;
- $self->register_hook( "data_post", "clamdscan" );
%{ $self->{"_clamd"} } = @args;
@@ -104,7 +103,7 @@ sub register {
$self->{"_clamd"}->{"max_size"} ||= 128;
}
-sub clamdscan {
+sub hook_data_post {
my ( $self, $transaction ) = @_;
$DB::single = 1;
View
3  plugins/virus/hbedv
@@ -53,7 +53,6 @@ The B<hbedv> plugin is published under the same licence as qpsmtpd itself.
sub register {
my ($self, $qp, @args) = @_;
- $self->register_hook("data_post", "hbedv_scan");
if (@args % 2) {
$self->log(LOGERROR, "FATAL ERROR: odd number of arguments");
@@ -72,7 +71,7 @@ sub register {
}
}
-sub hbedv_scan {
+sub hook_data_post {
my ($self, $transaction) = @_;
my $filename = $transaction->body_filename;
View
3  plugins/virus/kavscanner
@@ -57,7 +57,6 @@ use Mail::Address;
sub register {
my ($self, $qp, @args) = @_;
- $self->register_hook("data_post", "kav_scan");
if (@args % 2) {
$self->log(LOGWARN, "kavscanner: Wrong number of arguments");
@@ -80,7 +79,7 @@ sub register {
}
}
-sub kav_scan {
+sub hook_data_post {
my ($self, $transaction) = @_;
my ($temp_fh, $filename) = tempfile();
View
6 plugins/virus/klez_filter
@@ -1,9 +1,5 @@
-sub register {
- my ($self, $qp) = @_;
- $self->register_hook("data_post", "check_klez");
-}
-sub check_klez {
+sub hook_data_post {
my ($self, $transaction) = @_;
# klez files are always sorta big .. how big? Dunno.
View
3  plugins/virus/sophie
@@ -3,7 +3,6 @@ use IO::Socket;
sub register {
my ( $self, $qp, @args ) = @_;
- $self->register_hook( "data_post", "sophiescan" );
%{ $self->{"_sophie"} } = @args;
@@ -13,7 +12,7 @@ sub register {
$self->{"_sophie"}->{"max_size"} ||= 128;
}
-sub sophiescan {
+sub hook_data_post {
my ( $self, $transaction ) = @_;
$DB::single = 1;
View
3  plugins/virus/uvscan
@@ -44,7 +44,6 @@ Please see the LICENSE file included with qpsmtpd for details.
sub register {
my ($self, $qp, @args) = @_;
- $self->register_hook("data_post", "uvscan");
while (@args) {
$self->{"_uvscan"}->{pop @args}=pop @args;
@@ -52,7 +51,7 @@ sub register {
$self->{"_uvscan"}->{"uvscan_location"}||="/usr/local/bin/uvscan";
}
-sub uvscan {
+sub hook_data_post {
my ($self, $transaction) = @_;
return (DECLINED)
Please sign in to comment.
Something went wrong with that request. Please try again.