#-*- perl -*-
#
# Copyright (C) 2006,2008 Ken'ichi Fukamachi
# All rights reserved. This program is free software; you can
# redistribute it and/or modify it under the same terms as Perl itself.
#
# $FML: CreateOnPost.pm,v 1.4 2008/06/28 21:05:47 fukachan Exp $
#
package FML::Restriction::CreateOnPost;
use strict;
use vars qw(@ISA @EXPORT @EXPORT_OK $AUTOLOAD);
use Carp;
use FML::Restriction::Post;
push(@ISA, qw(FML::Restriction::Post));
=head1 NAME
FML::Restriction::CreateOnPost - restrictions on craete-on-post.
=head1 SYNOPSIS
=head1 DESCRIPTION
=head1 METHODS
=cut
# Descriptions: constructor.
# Arguments: OBJ($self) OBJ($curproc)
# Side Effects: none
# Return Value: OBJ
sub new
{
my ($self, $curproc) = @_;
my ($type) = ref($self) || $self;
my $me = { _curproc => $curproc };
return bless $me, $type;
}
# Descriptions:
# Arguments: OBJ($self) STR($rule) STR($sender)
# Side Effects: none
# Return Value: ARRAY(STR, STR)
sub reject_errormail
{
my ($self, $rule, $sender) = @_;
if ($sender eq '<>') {
return("matched", "deny");
}
return(0, undef);
}
# Descriptions:
# Arguments: OBJ($self) STR($rule) STR($sender)
# Side Effects: none
# Return Value: ARRAY(STR, STR)
sub reject_fml8_managed_address
{
my ($self, $rule, $sender) = @_;
my $curproc = $self->{ _curproc };
if ($curproc->is_fml8_managed_address($sender)) {
return("matched", "deny");
}
return(0, undef);
}
# Descriptions:
# Arguments: OBJ($self) STR($rule) STR($sender)
# Side Effects: none
# Return Value: ARRAY(STR, STR)
sub reject_createonpost_domain
{
my ($self, $rule, $sender) = @_;
my $curproc = $self->{ _curproc };
my $ml_domain = $curproc->ml_domain();
if ($sender =~ /\@$ml_domain$/i) {
return("matched", "deny");
}
return(0, undef);
}
# Descriptions:
# Arguments: OBJ($self) STR($rule) STR($sender)
# Side Effects: none
# Return Value: ARRAY(STR, STR)
sub reject_list_header_field
{
my ($self, $rule, $sender) = @_;
my $curproc = $self->{ _curproc };
my $header = $curproc->incoming_message_header();
my $list_help = $header->get("List-Help") || '';
if ($list_help) {
return("matched", "deny");
}
return(0, undef);
}
# Descriptions: permit if the sender is contained in $createonpost_newml_maps.
# Arguments: OBJ($self) STR($rule) STR($sender)
# Side Effects: none
# Return Value: ARRAY(STR, STR)
sub permit_createonpost_newml_maps
{
my ($self, $rule, $sender) = @_;
my $curproc = $self->{ _curproc };
my $config = $curproc->config();
my $header = $curproc->incoming_message_header();
my $cred = $curproc->credential();
my $from = $header->address_cleanup( $header->get('from') );
my $maps = 'createonpost_newml_maps';
my $map_list = $config->get_as_array_ref($maps) || [];
# check if from: address is contained in either map.
my $status = 0;
MAP:
for my $map (@$map_list) {
if (defined $map) {
my $is_valid = $cred->is_valid_map($map, $config);
if ($is_valid) {
$status = $cred->has_address_in_map($map, $config, $from);
last MAP if $status;
}
else {
$curproc->logdebug("invalid map: $map");
}
}
}
if ($status) {
return("matched", "permit");
}
return(0, undef);
}
=head1 CODING STYLE
See C on fml coding style guide.
=head1 AUTHOR
Ken'ichi Fukamachi
=head1 COPYRIGHT
Copyright (C) 2006,2008 Ken'ichi Fukamachi
All rights reserved. This program is free software; you can
redistribute it and/or modify it under the same terms as Perl itself.
=head1 HISTORY
FML::Restriction::CreateOnPost first appeared in fml8 mailing list driver package.
See C for more details.
=cut
1;