qpsmtpd/plugins/random_error

71 lines
1.2 KiB
Plaintext
Raw Normal View History

=head1 NAME
random_error
=head1 DESCRIPTION
This plugin randomly disconnects and issues DENYSOFTs.
=head1 CONFIG
one parameter is allowed, which is how often to error, as a percentage
of messages. The default is 1. Use a negative number to disable.
2/5 of failures are DENYSOFT_DISOCNNECT, 3/5 simply DENYSOFT.
For use with other plugins, scribble the revised failure rate to
$self->qp->connection->notes('random_fail_%');
=cut
sub register {
my ($self, $qp, @args) = @_;
die "Invalid args: '@args'" unless @args < 2;
($self->{__PACKAGE__.'_how'}) = $args[0] || 1;
}
sub NEXT() { DECLINED }
sub random_fail {
my $self = shift;
my $fpct = $self->qp->connection->notes('random_fail_%');
rand(100) > ($fpct / 6) and return NEXT;
rand(5) < 2 and return (DENYSOFT_DISCONNECT, "random failure");
return (DENYSOFT, "random failure");
}
sub hook_connect {
$self->qp->connection->notes('random_fail_%', $self->{__PACKAGE__.'_how'});
goto &random_fail
}
sub hook_helo {
goto &random_fail
}
sub hook_ehlo {
goto &random_fail
}
sub hook_mail {
goto &random_fail
}
sub hook_rcpt {
goto &random_fail
}
sub hook_data {
goto &random_fail
}
sub hook_data_post {
goto &random_fail
}