# New Ticket Created by Hanno Hecker # Please include the string: [perl #38747] # in the subject line of all future correspondence about this issue. # <URL: https://rt.perl.org/rt3/Ticket/Display.html?id=38747 >
This patch adjusts the parsing of the RCPT TO command to the same behaviour as the MAIL FROM. There's one issue, which is also present in the mail from parser: mails without surrounding <> are not parsed correctly if it contains spaces. Suggestion is not to accept addresses without <> in mail() and rcpt(). Hanno
--- lib/Qpsmtpd/SMTP.pm.orig 2006-03-04 08:36:21.000000000 +0100 +++ lib/Qpsmtpd/SMTP.pm 2006-03-04 09:21:46.000000000 +0100 @@ -335,14 +335,22 @@ my $self = shift; return $self->respond(501, "syntax error in parameters") unless $_[0] and $_[0] =~ m/^to:/i; return $self->respond(503, "Use MAIL before RCPT") unless $self->transaction->sender; + my $rcpt_parameter = join " ", @_; + my ($rcpt) = ($rcpt_parameter =~ m/^to:\s*(<[^>]*>)/i)[0]; + # support addresses without <> ... maybe we shouldn't? + ($rcpt) = "<" . ($rcpt_parameter =~ m/^to:\s*(\S+)/i)[0] . ">" + unless $rcpt; - my ($rcpt) = ($_[0] =~ m/to:(.*)/i)[0]; - $rcpt = $_[1] unless $rcpt; $self->log(LOGALERT, "to email address : [$rcpt]"); - $rcpt = (Qpsmtpd::Address->parse($rcpt))[0]; + + $rcpt = (Qpsmtpd::Address->parse($rcpt))[0]; + ### does this one ever happen? return $self->respond(501, "could not parse recipient") unless $rcpt; + return $self->respond(501, "cound not parse recipient") + if $rcpt->format eq '<>'; + my ($rc, $msg) = $self->run_hooks("rcpt", $rcpt); if ($rc == DONE) { return 1;