194 lines
6.2 KiB
Diff
194 lines
6.2 KiB
Diff
diff --git a/MANIFEST b/MANIFEST
|
|
index e16e0da..601f886 100644
|
|
--- a/MANIFEST
|
|
+++ b/MANIFEST
|
|
@@ -101,7 +101,6 @@ lib/Mail/SpamAssassin/Plugin/Pyzor.pm
|
|
lib/Mail/SpamAssassin/Plugin/Razor2.pm
|
|
lib/Mail/SpamAssassin/Plugin/RelayCountry.pm
|
|
lib/Mail/SpamAssassin/Plugin/RelayEval.pm
|
|
-lib/Mail/SpamAssassin/Plugin/ResourceLimits.pm
|
|
lib/Mail/SpamAssassin/Plugin/ReplaceTags.pm
|
|
lib/Mail/SpamAssassin/Plugin/Reuse.pm
|
|
lib/Mail/SpamAssassin/Plugin/Rule2XSBody.pm
|
|
diff --git a/lib/Mail/SpamAssassin/Plugin/ResourceLimits.pm b/lib/Mail/SpamAssassin/Plugin/ResourceLimits.pm
|
|
deleted file mode 100644
|
|
index 9179b93..0000000
|
|
--- a/lib/Mail/SpamAssassin/Plugin/ResourceLimits.pm
|
|
+++ /dev/null
|
|
@@ -1,143 +0,0 @@
|
|
-# <@LICENSE>
|
|
-# Licensed to the Apache Software Foundation (ASF) under one or more
|
|
-# contributor license agreements. See the NOTICE file distributed with
|
|
-# this work for additional information regarding copyright ownership.
|
|
-# The ASF licenses this file to you under the Apache License, Version 2.0
|
|
-# (the "License"); you may not use this file except in compliance with
|
|
-# the License. You may obtain a copy of the License at:
|
|
-#
|
|
-# http://www.apache.org/licenses/LICENSE-2.0
|
|
-#
|
|
-# Unless required by applicable law or agreed to in writing, software
|
|
-# distributed under the License is distributed on an "AS IS" BASIS,
|
|
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
-# See the License for the specific language governing permissions and
|
|
-# limitations under the License.
|
|
-# </@LICENSE>
|
|
-
|
|
-=head1 NAME
|
|
-
|
|
-Mail::SpamAssassin::Plugin::ResourceLimits - Limit the memory and/or CPU of child spamd processes
|
|
-
|
|
-=head1 SYNOPSIS
|
|
-
|
|
- # This plugin is for admin only and cannot be specified in user config.
|
|
- loadplugin Mail::SpamAssassin::Plugin::ResourceLimits
|
|
-
|
|
- # Sets to RLIMIT_CPU from BSD::Resource. The quota is based on max CPU Time seconds.
|
|
- resource_limit_cpu 120
|
|
-
|
|
- # Sets to RLIMIT_RSS and RLIMIT_AS via BSD::Resource.
|
|
- resource_limit_cpu 536870912
|
|
-
|
|
-=head1 DESCRIPTION
|
|
-
|
|
-This module leverages BSD::Resource to assure your spamd child processes do not exceed
|
|
-specified CPU or memory limit. If this happens, the child process will die.
|
|
-See the L<BSD::Resource> for more details.
|
|
-
|
|
-NOTE: Because this plugin uses BSD::Resource, it will not function on Windows.
|
|
-
|
|
-=head1 ADMINISTRATOR SETTINGS
|
|
-
|
|
-=over 4
|
|
-
|
|
-=item resource_limit_cpu 120 (default: 0 or no limit)
|
|
-
|
|
-How many cpu cycles are allowed on this process before it dies.
|
|
-
|
|
-=item resource_limit_mem 536870912 (default: 0 or no limit)
|
|
-
|
|
-The maximum number of bytes of memory allowed both for:
|
|
-
|
|
-=over
|
|
-
|
|
-=item *
|
|
-
|
|
-(virtual) address space bytes
|
|
-
|
|
-=item *
|
|
-
|
|
-resident set size
|
|
-
|
|
-=back
|
|
-
|
|
-=back
|
|
-
|
|
-=cut
|
|
-
|
|
-package Mail::SpamAssassin::Plugin::ResourceLimits;
|
|
-
|
|
-use Mail::SpamAssassin::Plugin ();
|
|
-use Mail::SpamAssassin::Logger ();
|
|
-use Mail::SpamAssassin::Util ();
|
|
-use Mail::SpamAssassin::Constants qw(:sa);
|
|
-
|
|
-use strict;
|
|
-use warnings;
|
|
-
|
|
-use BSD::Resource qw(RLIMIT_RSS RLIMIT_AS RLIMIT_CPU);
|
|
-
|
|
-our @ISA = qw(Mail::SpamAssassin::Plugin);
|
|
-
|
|
-sub new {
|
|
- my $class = shift;
|
|
- my $mailsaobject = shift;
|
|
-
|
|
- $class = ref($class) || $class;
|
|
- my $self = $class->SUPER::new($mailsaobject);
|
|
- bless( $self, $class );
|
|
-
|
|
- $self->set_config( $mailsaobject->{conf} );
|
|
- return $self;
|
|
-}
|
|
-
|
|
-sub set_config {
|
|
- my ( $self, $conf ) = @_;
|
|
- my @cmds = ();
|
|
-
|
|
- push(
|
|
- @cmds,
|
|
- {
|
|
- setting => 'resource_limit_mem',
|
|
- is_admin => 1,
|
|
- default => '0',
|
|
- type => $Mail::SpamAssassin::Conf::CONF_TYPE_NUMERIC
|
|
- }
|
|
- );
|
|
-
|
|
- push(
|
|
- @cmds,
|
|
- {
|
|
- setting => 'resource_limit_cpu',
|
|
- is_admin => 1,
|
|
- default => '0',
|
|
- type => $Mail::SpamAssassin::Conf::CONF_TYPE_NUMERIC
|
|
- }
|
|
- );
|
|
-
|
|
- $conf->{parser}->register_commands( \@cmds );
|
|
-}
|
|
-
|
|
-sub spamd_child_init {
|
|
- my ($self) = @_;
|
|
-
|
|
- # Set CPU Resource limits if they were specified.
|
|
- Mail::SpamAssassin::Util::dbg("resourcelimitplugin: In spamd_child_init");
|
|
- Mail::SpamAssassin::Util::dbg( "resourcelimitplugin: cpu limit: " . $self->{main}->{conf}->{resource_limit_cpu} );
|
|
- if ( $self->{main}->{conf}->{resource_limit_cpu} ) {
|
|
- BSD::Resource::setrlimit( RLIMIT_CPU, $self->{main}->{conf}->{resource_limit_cpu}, $self->{main}->{conf}->{resource_limit_cpu} )
|
|
- || info("resourcelimitplugin: Unable to set RLIMIT_CPU");
|
|
- }
|
|
-
|
|
- # Set Resource limits if they were specified.
|
|
- Mail::SpamAssassin::Util::dbg( "resourcelimitplugin: mem limit: " . $self->{main}->{conf}->{resource_limit_mem} );
|
|
- if ( $self->{main}->{conf}->{resource_limit_mem} ) {
|
|
- BSD::Resource::setrlimit( RLIMIT_RSS, $self->{main}->{conf}->{resource_limit_mem}, $self->{main}->{conf}->{resource_limit_mem} )
|
|
- || info("resourcelimitplugin: Unable to set RLIMIT_RSS");
|
|
- BSD::Resource::setrlimit( RLIMIT_AS, $self->{main}->{conf}->{resource_limit_mem}, $self->{main}->{conf}->{resource_limit_mem} )
|
|
- || info("resourcelimitplugin: Unable to set RLIMIT_AS");
|
|
- }
|
|
-}
|
|
-
|
|
-1;
|
|
diff --git a/lib/Mail/SpamAssassin/Util/DependencyInfo.pm b/lib/Mail/SpamAssassin/Util/DependencyInfo.pm
|
|
index b5b05cf..8223b26 100644
|
|
--- a/lib/Mail/SpamAssassin/Util/DependencyInfo.pm
|
|
+++ b/lib/Mail/SpamAssassin/Util/DependencyInfo.pm
|
|
@@ -234,12 +234,6 @@ our @OPTIONAL_MODULES = (
|
|
check for both Net::DNS and Net::DNS::Nameserver. However,
|
|
Net::DNS::Nameserver is only used in make test as of June 2014.',
|
|
},
|
|
-{
|
|
- module => 'BSD::Resource',
|
|
- version => 0,
|
|
- desc => 'BSD::Resource provides BSD process resource limit and priority
|
|
- functions. It is used by the optional ResourceLimits Plugin.',
|
|
-},
|
|
{
|
|
module => 'Archive::Zip',
|
|
version => 0,
|
|
diff --git a/rules/v342.pre b/rules/v342.pre
|
|
index 8e0fb07..c4758e9 100644
|
|
--- a/rules/v342.pre
|
|
+++ b/rules/v342.pre
|
|
@@ -19,10 +19,6 @@
|
|
# HashBL - Query hashed/unhashed strings, emails, uris etc from DNS lists
|
|
# loadplugin Mail::SpamAssassin::Plugin::HashBL
|
|
|
|
-# ResourceLimits - assure your spamd child processes
|
|
-# do not exceed specified CPU or memory limit
|
|
-# loadplugin Mail::SpamAssassin::Plugin::ResourceLimits
|
|
-
|
|
# FromNameSpoof - help stop spam that tries to spoof other domains using
|
|
# the from name
|
|
# loadplugin Mail::SpamAssassin::Plugin::FromNameSpoof
|