We will also be using the RECIPIENT env in the future, since
that takes aliases into account.
Reducing the possible callsites to check ENV means we can more
easily update the code in the future.
-# do not allow Bcc, only Cc and To if ORIGINAL_RECIPIENT (postfix) env is set
+# do not allow Bcc, only Cc and To if recipient is set
- my ($klass, $filter) = @_;
+ my ($klass, $filter, $recipient) = @_;
my $simple = $filter->simple;
return 0 unless $simple->header("Message-ID");
return 0 unless defined($filter->from);
return 0 if length($simple->as_string) > MAX_SIZE;
my $simple = $filter->simple;
return 0 unless $simple->header("Message-ID");
return 0 unless defined($filter->from);
return 0 if length($simple->as_string) > MAX_SIZE;
- recipient_specified($filter);
+ recipient_specified($filter, $recipient);
}
sub recipient_specified {
}
sub recipient_specified {
- my ($filter) = @_;
- my $or = $ENV{ORIGINAL_RECIPIENT};
- defined($or) or return 1; # for imports
- my @or = Email::Address->parse($or);
- my $oaddr = __drop_plus($or[0]->address);
+ my ($filter, $recipient) = @_;
+ defined($recipient) or return 1; # for mass imports
+ my @recip = Email::Address->parse($recipient);
+ my $oaddr = __drop_plus($recip[0]->address);
$oaddr = qr/\b\Q$oaddr\E\b/i;
my @to = Email::Address->parse($filter->to);
my @cc = Email::Address->parse($filter->cc);
$oaddr = qr/\b\Q$oaddr\E\b/i;
my @to = Email::Address->parse($filter->to);
my @cc = Email::Address->parse($filter->cc);
my ($s) = @_;
my $f = Email::Filter->new(data => $s->as_string);
my ($s) = @_;
my $f = Email::Filter->new(data => $s->as_string);
- local %ENV;
- delete $ENV{ORIGINAL_RECIPIENT};
- ok(PublicInbox->precheck($f),
- "ORIGINAL_RECIPIENT unset is OK");
+ ok(PublicInbox->precheck($f, undef),
+ "RECIPIENT unset is OK");
- $ENV{ORIGINAL_RECIPIENT} = 'foo@example.com';
- ok(!PublicInbox->precheck($f),
- "wrong ORIGINAL_RECIPIENT rejected");
+ my $recipient = 'foo@example.com';
+ ok(!PublicInbox->precheck($f, $recipient),
+ "wrong RECIPIENT rejected");
- $ENV{ORIGINAL_RECIPIENT} = 'b@example.com';
- ok(PublicInbox->precheck($f),
- "ORIGINAL_RECIPIENT in To: is OK");
+ $recipient = 'b@example.com';
+ ok(PublicInbox->precheck($f, $recipient),
+ "RECIPIENT in To: is OK");
- $ENV{ORIGINAL_RECIPIENT} = 'c@example.com';
- ok(PublicInbox->precheck($f),
- "ORIGINAL_RECIPIENT in Cc: is OK");
+ $recipient = 'c@example.com';
+ ok(PublicInbox->precheck($f, $recipient),
+ "RECIPIENT in Cc: is OK");
- $ENV{ORIGINAL_RECIPIENT} = 'b@example.com';
+ my $recipient = 'b@example.com';
my $s = Email::Simple->create(
header => [
To => 'b@example.com',
my $s = Email::Simple->create(
header => [
To => 'b@example.com',
body => "hello world\n",
);
my $f = Email::Filter->new(data => $s->as_string);
body => "hello world\n",
);
my $f = Email::Filter->new(data => $s->as_string);
- ok(!PublicInbox->precheck($f), "missing From: is rejected");
+ ok(!PublicInbox->precheck($f, $recipient), "missing From: is rejected");