cvs commit: qpsmtpd/plugins check_earlytalker

[email protected] (Ask Bjoern Hansen)
Newsgroups perl.cvs.qpsmtpd
Message-ID <[email protected]>
cvsuser     03/04/15 10:39:27

  Added:       plugins  check_earlytalker
  Log:
  check_earlytalker plugin.  Deny the connection if the client talks
    before we show our SMTP banner.  (From Devin Carraway)
  
  Revision  Changes    Path
  1.1                  qpsmtpd/plugins/check_earlytalker
  
  Index: check_earlytalker
  ===================================================================
  =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;
  }
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.