aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEric Faurot <eric@faurot.net>2012-11-30 11:49:47 +0100
committerEric Faurot <eric@faurot.net>2012-11-30 11:49:47 +0100
commitd846dad90de7fae3313d3440a1f913b29c6a9459 (patch)
tree1b59d4d1ba4298ff8160358e6408a921bb39fc06
parent- parse MAIL FROM args before checking the address (diff)
downloadOpenSMTPD-d846dad90de7fae3313d3440a1f913b29c6a9459.tar.xz
OpenSMTPD-d846dad90de7fae3313d3440a1f913b29c6a9459.zip
fix args parsing loop
-rwxr-xr-xregress/smtp/test.smtp48
-rw-r--r--smtpd/smtp_session.c9
2 files changed, 14 insertions, 3 deletions
diff --git a/regress/smtp/test.smtp4 b/regress/smtp/test.smtp4
index 9d25137e..a2c5299e 100755
--- a/regress/smtp/test.smtp4
+++ b/regress/smtp/test.smtp4
@@ -145,3 +145,11 @@ test-case {
writeln "MAIL FROM:<opensmtpd@opensmtpd.org> SIZE=1000"
expect smtp ok
}
+
+test-case {
+ expect smtp ok
+ writeln "HELO l"
+ expect smtp ok
+ writeln "MAIL FROM:<opensmtpd@opensmtpd.org> SIZE=1000"
+ expect smtp ok
+}
diff --git a/smtpd/smtp_session.c b/smtpd/smtp_session.c
index da4ecca4..94fbc0b9 100644
--- a/smtpd/smtp_session.c
+++ b/smtpd/smtp_session.c
@@ -899,7 +899,7 @@ smtp_command(struct smtp_session *s, char *line)
break;
}
- if (s->flags & SF_EHLO && smtp_parse_mail_args(s, args) == -1)
+ if (smtp_parse_mail_args(s, args) == -1)
break;
if (smtp_mailaddr(&s->evp.sender, args, 1) == 0) {
@@ -1114,10 +1114,13 @@ smtp_parse_mail_args(struct smtp_session *s, char *args)
{
char *b;
- for (b = strrchr(args, ' '); b != NULL; b = strrchr(args, ' ')) {
- *b++ = '\0';
+ for (; (b = strsep(&args, " ")) != NULL; ) {
+ if (*b == '\0')
+ continue;
if (strncasecmp(b, "AUTH=", 5) == 0)
log_debug("debug: smtp: AUTH in MAIL FROM command");
+ else if (strncasecmp(b, "SIZE=", 5) == 0)
+ log_debug("debug: smtp: SIZE in MAIL FROM command");
else if (!strcasecmp(b, "BODY=7BIT"))
/* XXX only for this transaction */
s->flags &= ~SF_8BITMIME;