]> granicus.if.org Git - neomutt/commitdiff
SMTP: don't block but print CRLF for last line if it's not terminated
authorRocco Rutte <pdmef@gmx.net>
Fri, 12 Jun 2009 13:21:55 +0000 (15:21 +0200)
committerRocco Rutte <pdmef@gmx.net>
Fri, 12 Jun 2009 13:21:55 +0000 (15:21 +0200)
ChangeLog
smtp.c

index 4453038d68403c3d0c426618e074f9973ee595e0..cc9cbfc02c8591792aa6021c14a1c51c2c964aab 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,15 @@
+2009-06-11 18:34 +0200  Rocco Rutte  <pdmef@gmx.net>  (f60eb41ef63c)
+
+       * UPDATING: Mention maildir mtime use in browser
+
+2009-06-11 18:31 +0200  Rocco Rutte  <pdmef@gmx.net>  (fc60d44a5b22)
+
+       * ChangeLog, send.c: Don't allow setting Return-Path: header via
+       my_hdr
+
+       Mutt has use_envelope_from/envelope_from_address for that purpose.
+       Closes #1840.
+
 2009-06-11 18:17 +0200  Rocco Rutte  <pdmef@gmx.net>  (8efc1cd0b8c0)
 
        * browser.c: Use only latest mtime of new/cur for browser, not whole
diff --git a/smtp.c b/smtp.c
index 3c9df528d28450937d863bb874ec187a353ed397..9d096a392d2e1542a3f96f713b66fbcb34776870 100644 (file)
--- a/smtp.c
+++ b/smtp.c
@@ -171,7 +171,7 @@ smtp_data (CONNECTION * conn, const char *msgfile)
   FILE *fp = 0;
   progress_t progress;
   struct stat st;
-  int r;
+  int r, term = 0;
   size_t buflen;
 
   fp = fopen (msgfile, "r");
@@ -200,6 +200,7 @@ smtp_data (CONNECTION * conn, const char *msgfile)
   while (fgets (buf, sizeof (buf) - 1, fp))
   {
     buflen = mutt_strlen (buf);
+    term = buf[buflen-1] == '\n';
     if (buflen && buf[buflen-1] == '\n'
        && (buflen == 1 || buf[buflen - 2] != '\r'))
       snprintf (buf + buflen - 1, sizeof (buf) - buflen + 1, "\r\n");
@@ -216,9 +217,14 @@ smtp_data (CONNECTION * conn, const char *msgfile)
       safe_fclose (&fp);
       return smtp_err_write;
     }
-
     mutt_progress_update (&progress, ftell (fp), -1);
   }
+  if (!term && buflen &&
+      mutt_socket_write_d (conn, "\r\n", -1, M_SOCK_LOG_FULL) == -1)
+  {
+    safe_fclose (&fp);
+    return smtp_err_write;
+  }
   safe_fclose (&fp);
 
   /* terminate the message body */