summaryrefslogtreecommitdiff
path: root/mail/dbmail20/files/patch-2.0.4_bug145_lmtp.c
diff options
context:
space:
mode:
authorPav Lucistnik <pav@FreeBSD.org>2005-07-18 16:04:16 +0000
committerPav Lucistnik <pav@FreeBSD.org>2005-07-18 16:04:16 +0000
commit05065d99c78a53f6ab97086574a01d75be79decc (patch)
tree2f9f09b2b30cc41ccd58808030a38660205a46fb /mail/dbmail20/files/patch-2.0.4_bug145_lmtp.c
parent- Update to 1.3.2 (diff)
- Patch nine bugs:
#79 - INTERNALDATE reponses do not conform to RFC #145 - LMTP loses return-path #177 - Compile Fails on FreeBSD (fixes compilation on FreeBSD 4.X) #184 - socklen_t issue #190 - huge load if database crash #198 - DBMail processes killing each other #199 - spare child creates zombie #214 - dbmail-smtp dumps core with double free #216 - malformed header prevents delivery - Fix RC_SUBR usage PR: ports/83437, also ports/80736, ports/82437, ports/83575 Submitted by: Mark Starovoytov <mark@kikg.ifmo.ru>, parts also by: Radim Kolar <hsn@netmag.cz>, thompsa, Marcus Grando <marcus@corp.grupos.com.br> Approved by: maintainer timeout (2 months on oldest PR)
Diffstat (limited to 'mail/dbmail20/files/patch-2.0.4_bug145_lmtp.c')
-rw-r--r--mail/dbmail20/files/patch-2.0.4_bug145_lmtp.c66
1 files changed, 66 insertions, 0 deletions
diff --git a/mail/dbmail20/files/patch-2.0.4_bug145_lmtp.c b/mail/dbmail20/files/patch-2.0.4_bug145_lmtp.c
new file mode 100644
index 000000000000..8e355487776c
--- /dev/null
+++ b/mail/dbmail20/files/patch-2.0.4_bug145_lmtp.c
@@ -0,0 +1,66 @@
+Index: lmtp.c
+===================================================================
+--- lmtp.c (revision 1559)
++++ lmtp.c (revision 1700)
+@@ -77,8 +77,9 @@
+ * - -1 on error
+ * - 1 on success
+ */
+-static int read_whole_message_network(FILE *instream, char **whole_message,
+- u64_t *whole_message_size);
++static int read_whole_message_network(FILE *instream,
++ char **whole_message, u64_t *whole_message_size,
++ const char *prepend_format, ...) PRINTF_ARGS(4, 5);
+
+ /**
+ * \function lmtp_error
+@@ -624,7 +625,9 @@
+ if (read_whole_message_network(
+ (FILE *) instream,
+ &whole_message,
+- &whole_message_size) < 0) {
++ &whole_message_size,
++ "Return-Path: %s\r\n",
++ (char *)(list_getstart(&from)->data)) < 0) {
+ trace(TRACE_ERROR,
+ "%s,%s: read_whole_message_network() failed",
+ __FILE__, __func__);
+@@ -755,8 +758,9 @@
+ return 1;
+ }
+
+-int read_whole_message_network(FILE *instream, char **whole_message,
+- u64_t *whole_message_size)
++int read_whole_message_network(FILE *instream,
++ char **whole_message, u64_t *whole_message_size,
++ const char *prepend_format, ...)
+ {
+ char *tmpmessage = NULL;
+ char tmpline[MESSAGE_MAX_LINE_SIZE + 1];
+@@ -765,9 +769,17 @@
+ size_t total_size = 0;
+ size_t current_pos = 0;
+ int error = 0;
++ va_list argp;
+
+ memset(tmpline, '\0', MESSAGE_MAX_LINE_SIZE + 1);
+- while (fgets(tmpline, MESSAGE_MAX_LINE_SIZE, instream) != NULL) {
++
++ /* This adds the Return-Path header and any other
++ * important headers we might need; see RFC 2076. */
++ va_start(argp, prepend_format);
++ line_size = vsnprintf(tmpline, MESSAGE_MAX_LINE_SIZE, prepend_format, argp);
++ va_end(argp);
++
++ do {
+ line_size = strlen(tmpline);
+
+ /* It sometimes happens that we read a line of size 0,
+@@ -798,6 +810,7 @@
+
+ memset(tmpline, '\0', MESSAGE_MAX_LINE_SIZE + 1);
+ }
++ while (fgets(tmpline, MESSAGE_MAX_LINE_SIZE, instream) != NULL);
+
+ if (ferror(instream)) {
+ trace(TRACE_ERROR, "%s,%s: error reading instream",