strip trailing CRs at smtp level rather than io level
authoreric <eric@openbsd.org>
Fri, 24 Apr 2020 11:34:07 +0000 (11:34 +0000)
committereric <eric@openbsd.org>
Fri, 24 Apr 2020 11:34:07 +0000 (11:34 +0000)
ok millert@

usr.sbin/smtpd/bounce.c
usr.sbin/smtpd/iobuf.c
usr.sbin/smtpd/lka_filter.c
usr.sbin/smtpd/mta_session.c
usr.sbin/smtpd/smtp_client.c
usr.sbin/smtpd/smtp_session.c

index 4ce0ff7..e6fc557 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: bounce.c,v 1.81 2019/11/25 12:11:26 eric Exp $        */
+/*     $OpenBSD: bounce.c,v 1.82 2020/04/24 11:34:07 eric Exp $        */
 
 /*
  * Copyright (c) 2009 Gilles Chehade <gilles@poolp.org>
@@ -728,6 +728,10 @@ bounce_io(struct io *io, int evt, void *arg)
                if (line == NULL)
                        break;
 
+               /* Strip trailing '\r' */
+               if (len && line[len - 1] == '\r')
+                       line[--len] = '\0';
+
                log_trace(TRACE_BOUNCE, "bounce: %p: <<< %s", s, line);
 
                if ((error = parse_smtp_response(line, len, &msg, &cont))) {
index f5d8b20..e8a178a 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: iobuf.c,v 1.12 2019/10/03 07:03:23 gilles Exp $       */
+/*     $OpenBSD: iobuf.c,v 1.13 2020/04/24 11:34:07 eric Exp $ */
 /*
  * Copyright (c) 2012 Eric Faurot <eric@openbsd.org>
  *
@@ -174,10 +174,9 @@ iobuf_getline(struct iobuf *iobuf, size_t *rlen)
                         * the next call to iobuf_normalize() or iobuf_extend().
                         */
                        iobuf_drop(iobuf, i + 1);
-                       len = (i && buf[i - 1] == '\r') ? i - 1 : i;
-                       buf[len] = '\0';
+                       buf[i] = '\0';
                        if (rlen)
-                               *rlen = len;
+                               *rlen = i;
                        return (buf);
                }
 
index 715ab83..bcb76f8 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: lka_filter.c,v 1.61 2020/04/17 14:20:13 eric Exp $    */
+/*     $OpenBSD: lka_filter.c,v 1.62 2020/04/24 11:34:07 eric Exp $    */
 
 /*
  * Copyright (c) 2018 Gilles Chehade <gilles@poolp.org>
@@ -851,7 +851,7 @@ filter_data_internal(struct filter_session *fs, uint64_t token, uint64_t reqid,
 
        /* no filter_entry, we either had none or reached end of chain */
        if (filter_entry == NULL) {
-               io_printf(fs->io, "%s\r\n", line);
+               io_printf(fs->io, "%s\n", line);
                return;
        }
 
index 8710d37..fa7c7e1 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: mta_session.c,v 1.134 2020/04/10 19:28:57 beck Exp $  */
+/*     $OpenBSD: mta_session.c,v 1.135 2020/04/24 11:34:07 eric Exp $  */
 
 /*
  * Copyright (c) 2008 Pierre-Yves Ritschard <pyr@openbsd.org>
@@ -1257,6 +1257,10 @@ mta_io(struct io *io, int evt, void *arg)
                        return;
                }
 
+               /* Strip trailing '\r' */
+               if (len && line[len - 1] == '\r')
+                       line[--len] = '\0';
+
                log_trace(TRACE_MTA, "mta: %p: <<< %s", s, line);
                mta_report_protocol_server(s, line);
 
index 528f48b..8e146e1 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: smtp_client.c,v 1.13 2020/02/24 23:54:27 millert Exp $        */
+/*     $OpenBSD: smtp_client.c,v 1.14 2020/04/24 11:34:07 eric Exp $   */
 
 /*
  * Copyright (c) 2018 Eric Faurot <eric@openbsd.org>
@@ -680,6 +680,10 @@ smtp_client_readline(struct smtp_client *proto)
                return 0;
        }
 
+       /* Strip trailing '\r' */
+       if (len && line[len - 1] == '\r')
+               line[--len] = '\0';
+
        log_trace(TRACE_SMTPCLT, "%p: <<< %s", proto, line);
 
        /* Validate SMTP  */
index d6c45b9..5ea9f89 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: smtp_session.c,v 1.425 2020/03/15 16:34:57 millert Exp $      */
+/*     $OpenBSD: smtp_session.c,v 1.426 2020/04/24 11:34:07 eric Exp $ */
 
 /*
  * Copyright (c) 2008 Gilles Chehade <gilles@poolp.org>
@@ -1132,6 +1132,10 @@ smtp_io(struct io *io, int evt, void *arg)
                if (line == NULL)
                        return;
 
+               /* Strip trailing '\r' */
+               if (len && line[len - 1] == '\r')
+                       line[--len] = '\0';
+
                /* Message body */
                eom = 0;
                if (s->state == STATE_BODY) {