#!/usr/bin/perl -w =head1 $Id$ =cut use strict; use warnings; sub register { my ($self, $qp, %args) = @_; $self->register_hook('rcpt', 'rcpt_handler'); $self->{action} = $args{action} || 'denysoft'; $self->{rcpt_limit} = $args{limit} || $self->qp->config('rcpt_limit') || 16; } sub rcpt_handler { my ($self, $txn, $rcpt) = @_; my $cur = $txn->notes('rcpt_count') || 0; $self->log(LOGDEBUG, "RCPT count at ".($cur+1)); if (++$cur >= $self->{rcpt_limit}) { $self->log(LOGWARN, "RCPT count has reached limit"); return (DENYSOFT, "Too many RCPTs for one message") if $self->{action} eq 'denysoft'; return (DENY, "Too many RCPTs for one message") if $self->{action} eq 'deny'; } $txn->notes('rcpt_count', $cur); return (DECLINED); }