Skip to content

Commit

Permalink
check_earlytalker plugin. Deny the connection if the client talks
Browse files Browse the repository at this point in the history
  before we show our SMTP banner.  (From Devin Carraway)


git-svn-id: https://svn.perl.org/qpsmtpd/trunk@135 958fd67b-6ff1-0310-b445-bb7760255be9
  • Loading branch information
abh committed Apr 15, 2003
1 parent f27b77a commit 64b9275
Showing 1 changed file with 42 additions and 0 deletions.
42 changes: 42 additions & 0 deletions plugins/check_earlytalker
@@ -0,0 +1,42 @@
=head1 NAME

check_earlytalker - Check that the client doesn't talk before we send the SMTP banner

=head1 DESCRIPTION

Hooks connect, checks to see if the remote host starts talking before
we've issued a 2xx greeting. If so, we're likely looking at a
direct-to-MX spam agent which pipelines its entire SMTP conversation,
and will happily dump an entire spam into our mail log even if later
tests deny acceptance.

Such clients gets a 450 error code.

=head1 TODO

Make how long we wait before reading from the socket configurable
(currently 1 second)

Make the soft/hard response code configurable (currently DENYSOFT)

=cut

use IO::Select;

sub register {
my ($self, $qp) = @_;
$self->register_hook('connect', 'connect_handler');
}

sub connect_handler {
my ($self, $transaction) = @_;
my $in = new IO::Select;

$in->add(\*STDIN) || return DECLINED;
if ($in->can_read(1)) {
$self->log(1, "remote host started talking before we said hello");
return (DENYSOFT, "Don't be rude and talk before I say hello!");
}
$self->log(10,"remote host said nothing spontaneous, proceeding");
return DECLINED;
}

0 comments on commit 64b9275

Please sign in to comment.