summaryrefslogtreecommitdiff
path: root/fml/lib
diff options
context:
space:
mode:
authortmu <tmu>2002-05-09 15:42:15 +0000
committertmu <tmu>2002-05-09 15:42:15 +0000
commit0b242929feff278d528744690800f230ff381a95 (patch)
tree9c7449dcb291b44beb50de32bb41dbb9f69d5e52 /fml/lib
parent447aaa3e12889e6f7c828b0667e2970bef7256c8 (diff)
downloadfml8-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.pm110
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;
}