diff -Nur -x '*.orig' -x '*.rej' qpsmtpd-0.32/lib/Qpsmtpd/Plugin.pm mezzanine_patched_qpsmtpd-0.32/lib/Qpsmtpd/Plugin.pm --- qpsmtpd-0.32/lib/Qpsmtpd/Plugin.pm 2006-02-26 05:22:16.000000000 -0700 +++ mezzanine_patched_qpsmtpd-0.32/lib/Qpsmtpd/Plugin.pm 2007-01-11 20:20:14.000000000 -0700 @@ -4,8 +4,8 @@ our @hooks = qw( logging config queue data data_post quit rcpt mail ehlo helo - auth auth-plain auth-login auth-cram-md5 - connect reset_transaction unrecognized_command disconnect + auth auth-plain auth-login auth-cram-md5 valid_auth + set_hooks connect reset_transaction unrecognized_command disconnect deny ok pre-connection post-connection ); our %hooks = map { $_ => 1 } @hooks; diff -Nur -x '*.orig' -x '*.rej' qpsmtpd-0.32/lib/Qpsmtpd/SMTP.pm mezzanine_patched_qpsmtpd-0.32/lib/Qpsmtpd/SMTP.pm --- qpsmtpd-0.32/lib/Qpsmtpd/SMTP.pm 2007-01-11 20:22:05.000000000 -0700 +++ mezzanine_patched_qpsmtpd-0.32/lib/Qpsmtpd/SMTP.pm 2007-01-11 20:21:14.000000000 -0700 @@ -91,6 +91,11 @@ my $self = shift; # this should maybe be called something else than "connect", see # lib/Qpsmtpd/TcpServer.pm for more confusion. + my ($rc, $msg) = $self->run_hooks("set_hooks"); + if ($rc == DENY) { + $self->respond(550, ($msg || 'Connection from you denied, bye bye.')); + return $rc; + } + ($rc, $msg) = $self->run_hooks("connect"); - my ($rc, $msg) = $self->run_hooks("connect"); if ($rc == DENY) { $self->respond(550, ($msg || 'Connection from you denied, bye bye.')); @@ -235,7 +241,9 @@ return $self->respond( 503, "AUTH not defined for HELO" ) if ( $self->connection->hello eq "helo" ); - return $self->{_auth} = Qpsmtpd::Auth::SASL( $self, $arg, @stuff ); + $self->{_auth} = Qpsmtpd::Auth::SASL( $self, $arg, @stuff ); + $self->run_hooks("valid_auth") if $self->{_auth} == OK; + return $self->{_auth}; } sub mail {