diff options
| author | tmu <tmu> | 2002-05-09 15:42:15 +0000 |
|---|---|---|
| committer | tmu <tmu> | 2002-05-09 15:42:15 +0000 |
| commit | 0b242929feff278d528744690800f230ff381a95 (patch) | |
| tree | 9c7449dcb291b44beb50de32bb41dbb9f69d5e52 /fml/lib | |
| parent | 447aaa3e12889e6f7c828b0667e2970bef7256c8 (diff) | |
| download | fml8-0b242929feff278d528744690800f230ff381a95.tar.gz fml8-0b242929feff278d528744690800f230ff381a95.tar.bz2 fml8-0b242929feff278d528744690800f230ff381a95.zip | |
add function permit_mimetype() and reject_mimetype()
add function permit_rules() and reject_rules()
Diffstat (limited to 'fml/lib')
| -rw-r--r-- | fml/lib/FML/Filter/ContentCheck.pm | 110 |
1 files changed, 109 insertions, 1 deletions
diff --git a/fml/lib/FML/Filter/ContentCheck.pm b/fml/lib/FML/Filter/ContentCheck.pm index 3e82c660..61199c6e 100644 --- a/fml/lib/FML/Filter/ContentCheck.pm +++ b/fml/lib/FML/Filter/ContentCheck.pm @@ -4,7 +4,7 @@ # All rights reserved. This program is free software; you can # redistribute it and/or modify it under the same terms as Perl itself. # -# $FML: ContentCheck.pm,v 1.4 2002/04/23 23:52:50 tmu Exp $ +# $FML: ContentCheck.pm,v 1.5 2002/04/24 03:16:06 fukachan Exp $ # package FML::Filter::ContentCheck; @@ -12,6 +12,7 @@ use strict; use vars qw(@ISA @EXPORT @EXPORT_OK $AUTOLOAD); use Carp; use ErrorStatus qw(error_set error error_clear); +use FML::Log qw(Log LogWarn LogError); =head1 NAME @@ -35,6 +36,8 @@ usual constructor. my $debug = 0; my (@default_rules) = qw(only_plaintext); +my (@default_permit_rules) = qw(text/plain); +my (@default_reject_rules) = qw(); # Descriptions: constructor. # Arguments: OBJ($self) @@ -48,6 +51,8 @@ sub new # apply default rules $me->{ _rules } = \@default_rules; + $me->{ _permit_rules } = \@default_permit_rules; + $me->{ _reject_rules } = \@default_reject_rules; return bless $me, $type; } @@ -71,6 +76,40 @@ sub rules $self->{ _rules } = $rarray; } +=head2 C<permit_rules( $rules )> + +overwrite rules by specified C<@$rules> ($rules is HASH ARRAY). + +=cut + + +# Descriptions: access method to overwrite rule +# Arguments: OBJ($self) ARRAY_REF($rarray) +# Side Effects: overwrite info in object +# Return Value: none +sub permit_rules +{ + my ($self, $rarray) = @_; + $self->{ _permit_rules } = $rarray; +} + +=head2 C<reject_rules( $rules )> + +overwrite rules by specified C<@$rules> ($rules is HASH ARRAY). + +=cut + + +# Descriptions: access method to overwrite rule +# Arguments: OBJ($self) ARRAY_REF($rarray) +# Side Effects: overwrite info in object +# Return Value: none +sub reject_rules +{ + my ($self, $rarray) = @_; + $self->{ _reject_rules } = $rarray; +} + =head2 C<content_check($msg, $args)> @@ -132,9 +171,78 @@ sub only_plaintext my $prev_type = $prevmp->data_type(); if ($prev_type eq "multipart.delimiter") { $prevmp->delete_message_part_link(); + Log("only_plaintext delete multipart delimiter"); } } $mp->delete_message_part_link(); + Log("only_plaintext delete not plain"); + } + return 0; +} + +# Descriptions: permit mimetype +# Arguments: OBJ($self) OBJ($msg) HASH_REF($args) +# Side Effects: croak() +# Return Value: none +sub permit_mimetype +{ + my ($self, $msg, $args) = @_; + my $mp = $msg; + my ($data_type,$prevmp,$nextmp); + my $permits = $self->{ _permit_rules }; + + for ( ; $mp; $mp = $mp->{ next }) { + LOOPSTART: + $data_type = $mp->data_type(); + next if($data_type eq "text/rfc822-headers"); + + foreach my $permit_type (@$permits) { + next LOOPSTART if($data_type =~ $permit_type); + } + + $prevmp = $mp->{ prev }; + if($prevmp) { + my $prev_type = $prevmp->data_type(); + if ($prev_type eq "multipart.delimiter") { + $prevmp->delete_message_part_link(); + Log("permit_mimetype delete multipart delimiter"); + } + } + $mp->delete_message_part_link(); + Log("permit_mimetype delete $reject_type"); + } + return 0; +} + +# Descriptions: reject mimetype +# Arguments: OBJ($self) OBJ($msg) HASH_REF($args) +# Side Effects: croak() +# Return Value: none +sub reject_mimetype +{ + my ($self, $msg, $args) = @_; + my $mp = $msg; + my ($data_type,$prevmp,$nextmp); + my $rejects = $self->{ _reject_rules }; + + for ( ; $mp; $mp = $mp->{ next }) { + $data_type = $mp->data_type(); + next if($data_type eq "text/rfc822-headers"); + + foreach my $reject_type (@$rejects) { + next if($data_type ne $reject_type); + + $prevmp = $mp->{ prev }; + if($prevmp) { + my $prev_type = $prevmp->data_type(); + if ($prev_type eq "multipart.delimiter") { + $prevmp->delete_message_part_link(); + Log("reject_mimetype delete multipart delimiter"); + } + } + $mp->delete_message_part_link(); + Log("reject_mimetype delete $reject_type"); + } } return 0; } |
