in lib/Mail/SpamAssassin/Plugin/URIDNSBL.pm [559:838]
sub set_config {
my($self, $conf) = @_;
my @cmds;
push(@cmds, {
setting => 'skip_uribl_checks',
default => 0,
type => $Mail::SpamAssassin::Conf::CONF_TYPE_BOOL,
});
push(@cmds, {
setting => 'uridnsbl_skip_mailto',
is_admin => 1,
default => 1,
type => $Mail::SpamAssassin::Conf::CONF_TYPE_BOOL,
});
push(@cmds, {
setting => 'uridnsbl_max_domains',
is_admin => 1,
default => 20,
type => $Mail::SpamAssassin::Conf::CONF_TYPE_NUMERIC,
});
push (@cmds, {
setting => 'uridnsbl',
is_priv => 1,
code => sub {
my ($self, $key, $value, $line) = @_;
local($1,$2,$3);
if ($value =~ /^(\w+)\s+(\S+)\s+(\S+)$/) {
my $rulename = $1;
my $zone = $2;
my $type = $3;
$zone =~ s/\.\z//; # strip a redundant trailing dot
$self->{uridnsbls}->{$rulename} = {
zone => $zone, type => $type,
is_rhsbl => 0
};
}
elsif ($value =~ /^$/) {
return $Mail::SpamAssassin::Conf::MISSING_REQUIRED_VALUE;
}
else {
return $Mail::SpamAssassin::Conf::INVALID_VALUE;
}
}
});
push (@cmds, {
setting => 'uridnssub',
is_priv => 1,
code => sub {
my ($self, $key, $value, $line) = @_;
local($1,$2,$3,$4);
if ($value =~ /^(\w+)\s+(\S+)\s+(\S+)\s+(.*?)\s*$/) {
my $rulename = $1;
my $zone = $2;
my $type = $3;
my $subrule = $4;
$zone =~ s/\.\z//; # strip a redundant trailing dot
$subrule = parse_and_canonicalize_subtest($subrule);
defined $subrule or return $Mail::SpamAssassin::Conf::INVALID_VALUE;
$self->{uridnsbls}->{$rulename} = {
zone => $zone, type => $type,
is_rhsbl => 0, subtest => $subrule,
};
}
elsif ($value =~ /^$/) {
return $Mail::SpamAssassin::Conf::MISSING_REQUIRED_VALUE;
}
else {
return $Mail::SpamAssassin::Conf::INVALID_VALUE;
}
}
});
push (@cmds, {
setting => 'urirhsbl',
is_priv => 1,
code => sub {
my ($self, $key, $value, $line) = @_;
local($1,$2,$3);
if ($value =~ /^(\w+)\s+(\S+)\s+(\S+)$/) {
my $rulename = $1;
my $zone = $2;
my $type = $3;
$zone =~ s/\.\z//; # strip a redundant trailing dot
$self->{uridnsbls}->{$rulename} = {
zone => $zone, type => $type,
is_rhsbl => 1
};
}
elsif ($value =~ /^$/) {
return $Mail::SpamAssassin::Conf::MISSING_REQUIRED_VALUE;
}
else {
return $Mail::SpamAssassin::Conf::INVALID_VALUE;
}
}
});
push (@cmds, {
setting => 'urirhssub',
is_priv => 1,
code => sub {
my ($self, $key, $value, $line) = @_;
local($1,$2,$3,$4);
if ($value =~ /^(\w+)\s+(\S+)\s+(\S+)\s+(.*?)\s*$/) {
my $rulename = $1;
my $zone = $2;
my $type = $3;
my $subrule = $4;
$zone =~ s/\.\z//; # strip a redundant trailing dot
$subrule = parse_and_canonicalize_subtest($subrule);
defined $subrule or return $Mail::SpamAssassin::Conf::INVALID_VALUE;
$self->{uridnsbls}->{$rulename} = {
zone => $zone, type => $type,
is_rhsbl => 1, subtest => $subrule,
};
}
elsif ($value =~ /^$/) {
return $Mail::SpamAssassin::Conf::MISSING_REQUIRED_VALUE;
}
else {
return $Mail::SpamAssassin::Conf::INVALID_VALUE;
}
}
});
push (@cmds, {
setting => 'urinsrhsbl',
is_priv => 1,
code => sub {
my ($self, $key, $value, $line) = @_;
local($1,$2,$3);
if ($value =~ /^(\w+)\s+(\S+)\s+(\S+)$/) {
my $rulename = $1;
my $zone = $2;
my $type = $3;
$zone =~ s/\.\z//; # strip a redundant trailing dot
$self->{uridnsbls}->{$rulename} = {
zone => $zone, type => $type,
is_nsrhsbl => 1
};
}
elsif ($value =~ /^$/) {
return $Mail::SpamAssassin::Conf::MISSING_REQUIRED_VALUE;
}
else {
return $Mail::SpamAssassin::Conf::INVALID_VALUE;
}
}
});
push (@cmds, {
setting => 'urinsrhssub',
is_priv => 1,
code => sub {
my ($self, $key, $value, $line) = @_;
local($1,$2,$3,$4);
if ($value =~ /^(\w+)\s+(\S+)\s+(\S+)\s+(.*?)\s*$/) {
my $rulename = $1;
my $zone = $2;
my $type = $3;
my $subrule = $4;
$zone =~ s/\.\z//; # strip a redundant trailing dot
$subrule = parse_and_canonicalize_subtest($subrule);
defined $subrule or return $Mail::SpamAssassin::Conf::INVALID_VALUE;
$self->{uridnsbls}->{$rulename} = {
zone => $zone, type => $type,
is_nsrhsbl => 1, subtest => $subrule,
};
}
elsif ($value =~ /^$/) {
return $Mail::SpamAssassin::Conf::MISSING_REQUIRED_VALUE;
}
else {
return $Mail::SpamAssassin::Conf::INVALID_VALUE;
}
}
});
push (@cmds, {
setting => 'urifullnsrhsbl',
is_priv => 1,
code => sub {
my ($self, $key, $value, $line) = @_;
local($1,$2,$3);
if ($value =~ /^(\w+)\s+(\S+)\s+(\S+)$/) {
my $rulename = $1;
my $zone = $2;
my $type = $3;
$zone =~ s/\.\z//; # strip a redundant trailing dot
$self->{uridnsbls}->{$rulename} = {
zone => $zone, type => $type,
is_fullnsrhsbl => 1
};
}
elsif ($value =~ /^$/) {
return $Mail::SpamAssassin::Conf::MISSING_REQUIRED_VALUE;
}
else {
return $Mail::SpamAssassin::Conf::INVALID_VALUE;
}
}
});
push (@cmds, {
setting => 'urifullnsrhssub',
is_priv => 1,
code => sub {
my ($self, $key, $value, $line) = @_;
local($1,$2,$3,$4);
if ($value =~ /^(\w+)\s+(\S+)\s+(\S+)\s+(.*?)\s*$/) {
my $rulename = $1;
my $zone = $2;
my $type = $3;
my $subrule = $4;
$zone =~ s/\.\z//; # strip a redundant trailing dot
$subrule = parse_and_canonicalize_subtest($subrule);
defined $subrule or return $Mail::SpamAssassin::Conf::INVALID_VALUE;
$self->{uridnsbls}->{$rulename} = {
zone => $zone, type => $type,
is_fullnsrhsbl => 1, subtest => $subrule,
};
}
elsif ($value =~ /^$/) {
return $Mail::SpamAssassin::Conf::MISSING_REQUIRED_VALUE;
}
else {
return $Mail::SpamAssassin::Conf::INVALID_VALUE;
}
}
});
push (@cmds, {
setting => 'uridnsbl_skip_domain',
default => {},
type => $Mail::SpamAssassin::Conf::CONF_TYPE_HASH_KEY_VALUE,
code => sub {
my ($self, $key, $value, $line) = @_;
if ($value =~ /^$/) {
return $Mail::SpamAssassin::Conf::MISSING_REQUIRED_VALUE;
}
foreach my $domain (split(/\s+/, $value)) {
$self->{uridnsbl_skip_domains}->{lc $domain} = 1;
}
}
});
push (@cmds, {
setting => 'clear_uridnsbl_skip_domain',
type => $Mail::SpamAssassin::Conf::CONF_TYPE_HASH_KEY_VALUE,
code => sub {
my ($self, $key, $value, $line) = @_;
if (!defined $value || $value eq '') {
# clear the entire list
$self->{uridnsbl_skip_domains} = {};
} else {
foreach my $domain (split(/\s+/, $value)) {
delete $self->{uridnsbl_skip_domains}->{lc $domain};
}
}
}
});
# obsolete
push(@cmds, {
setting => 'uridnsbl_timeout',
code => sub {
# not a lint_warn(), since it's pretty harmless and we don't want
# to break stuff like sa-update
warn("config: 'uridnsbl_timeout' is obsolete, use 'rbl_timeout' instead");
return 0;
}
});
$conf->{parser}->register_commands(\@cmds);
}