PMG/RuleDB/IPNet.pm \
PMG/RuleDB/ModField.pm \
PMG/RuleDB/MatchFilename.pm \
+ PMG/RuleDB/MatchArchiveFilename.pm \
PMG/RuleDB/ReceiverRegex.pm \
PMG/RuleDB/EMail.pm \
PMG/RuleDB/Receiver.pm \
{ subdir => 'archivefilter' },
{ subdir => 'filenamefilter' },
{ subdir => 'virusfilter' },
+ { subdir => 'archivefilenamefilter' },
];
}});
PMG::RuleDB::ArchiveFilter->register_api(__PACKAGE__, 'archivefilter');
PMG::RuleDB::MatchFilename->register_api(__PACKAGE__, 'filenamefilter');
PMG::RuleDB::Virus->register_api(__PACKAGE__, 'virusfilter');
+PMG::RuleDB::MatchArchiveFilename->register_api(__PACKAGE__, 'archivefilenamefilter');
1;
push @$when, $obj;
} elsif ($gtype == 3) { # what
push @$what, $obj;
- if ($obj->otype == PMG::RuleDB::ArchiveFilter->otype) {
+ if ($obj->otype == PMG::RuleDB::ArchiveFilter->otype ||
+ $obj->otype == PMG::RuleDB::MatchArchiveFilename->otype)
+ {
if ($rule->{direction} == 0) {
$self->{archivefilter_in} = 1;
} elsif ($rule->{direction} == 1) {
use PMG::RuleDB::ModField;
use PMG::RuleDB::MatchField;
use PMG::RuleDB::MatchFilename;
+use PMG::RuleDB::MatchArchiveFilename;
use PMG::RuleDB::Attach;
use PMG::RuleDB::Disclaimer;
use PMG::RuleDB::BCC;
elsif ($otype == PMG::RuleDB::MatchFilename::otype) {
$obj = PMG::RuleDB::MatchFilename->new();
}
+ elsif ($otype == PMG::RuleDB::MatchArchiveFilename::otype) {
+ $obj = PMG::RuleDB::MatchArchiveFilename->new();
+ }
elsif ($otype == PMG::RuleDB::ContentTypeFilter::otype) {
$obj = PMG::RuleDB::ContentTypeFilter->new();
}
--- /dev/null
+package PMG::RuleDB::MatchArchiveFilename;
+
+use strict;
+use warnings;
+
+use PMG::Utils;
+use PMG::RuleDB::MatchFilename;
+
+use base qw(PMG::RuleDB::MatchFilename);
+
+sub otype {
+ return 3006;
+}
+
+sub oclass {
+ return 'what';
+}
+
+sub otype_text {
+ return 'Match Archive Filename';
+}
+
+sub parse_entity {
+ my ($self, $entity) = @_;
+
+ my $res;
+
+ if (my $id = $entity->head->mime_attr('x-proxmox-tmp-aid')) {
+ chomp $id;
+
+ my $fn = PMG::Utils::extract_filename($entity->head);
+ if (defined($fn) && $fn =~ m|^$self->{fname}$|i) {
+ push @$res, $id;
+ } elsif (my $filenames = $entity->{PMX_filenames}) {
+ # Match inside archives
+ for my $fn (keys %$filenames) {
+ if ($fn =~ m|^$self->{fname}$|i) {
+ push @$res, $id;
+ last;
+ }
+ }
+ }
+ }
+
+ foreach my $part ($entity->parts) {
+ if (my $match = $self->parse_entity ($part)) {
+ push @$res, @$match;
+ }
+ }
+
+ return $res;
+}
+
+1;
+__END__
+
+=head1 PMG::RuleDB::MatchArchiveFilename
+
+Match Archive Filename