diff options
author | Eric Faurot <eric@faurot.net> | 2012-11-30 11:49:47 +0100 |
---|---|---|
committer | Eric Faurot <eric@faurot.net> | 2012-11-30 11:49:47 +0100 |
commit | d846dad90de7fae3313d3440a1f913b29c6a9459 (patch) | |
tree | 1b59d4d1ba4298ff8160358e6408a921bb39fc06 | |
parent | - parse MAIL FROM args before checking the address (diff) | |
download | OpenSMTPD-d846dad90de7fae3313d3440a1f913b29c6a9459.tar.xz OpenSMTPD-d846dad90de7fae3313d3440a1f913b29c6a9459.zip |
fix args parsing loop
-rwxr-xr-x | regress/smtp/test.smtp4 | 8 | ||||
-rw-r--r-- | smtpd/smtp_session.c | 9 |
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; |