aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xtests/ftpserver.pl51
1 files changed, 50 insertions, 1 deletions
diff --git a/tests/ftpserver.pl b/tests/ftpserver.pl
index c647982b4..65e522312 100755
--- a/tests/ftpserver.pl
+++ b/tests/ftpserver.pl
@@ -739,7 +739,56 @@ sub EHLO_smtp {
}
sub MAIL_smtp {
- sendcontrol "250 Sender OK\r\n";
+ my ($args) = @_;
+
+ logmsg "MAIL_smtp got $args\n";
+
+ if (!$args) {
+ sendcontrol "501 Unrecognized parameter\r\n";
+ }
+ else {
+ my $from;
+ my $size;
+ my @elements = split(/ /, $args);
+
+ # Get the FROM and SIZE parameters
+ for my $e (@elements) {
+ if($e =~ /^FROM:(.*)$/) {
+ $from = $1;
+ }
+ elsif($e =~ /^SIZE=(\d+)$/) {
+ $size = $1;
+ }
+ }
+
+ # Validate the from address (only <> and a valid email address inside
+ # <> are allowed, such as <user@example.com>)
+ if ((!$from) || (($from ne "<>") && ($from !~
+ /^<([a-zA-Z][\w_.]+)\@([a-zA-Z0-9.-]+).([a-zA-Z]{2,4})>$/))) {
+ sendcontrol "501 Invalid address\r\n";
+ }
+ else {
+ my @found;
+ my $valid = 1;
+
+ # Check the capabilities for SIZE and if the specified size is
+ # greater than the message size then reject it
+ if (@found = grep /^SIZE (\d+)$/, @capabilities) {
+ if ($found[0] =~ /^SIZE (\d+)$/) {
+ if ($size > $1) {
+ valid = 0;
+ }
+ }
+ }
+
+ if(!$valid) {
+ sendcontrol "552 Message size too large\r\n";
+ }
+ else {
+ sendcontrol "250 Sender OK\r\n";
+ }
+ }
+ }
return 0;
}