aboutsummaryrefslogtreecommitdiffstats
path: root/driver.c
diff options
context:
space:
mode:
Diffstat (limited to 'driver.c')
-rw-r--r--driver.c25
1 files changed, 25 insertions, 0 deletions
diff --git a/driver.c b/driver.c
index 753b90ec..701224f0 100644
--- a/driver.c
+++ b/driver.c
@@ -466,6 +466,19 @@ char *realname; /* real name of host */
do {
if (!SockGets(buf, sizeof(buf)-1, sockfp))
return(PS_SOCKET);
+
+ /* lines may not be properly CRLF terminated; fix this for qmail */
+ if (ctl->forcecr)
+ {
+ cp = buf + strlen(buf) - 1;
+ if (cp > buf && *cp == '\n' && cp[-1] != '\r')
+ {
+ *cp++ = '\r';
+ *cp++ = '\n';
+ *cp++ = '\0';
+ }
+ }
+
set_timeout(ctl->server.timeout);
/* leave extra room for reply_hack to play with */
line = realloc(line, strlen(line) + strlen(buf) + HOSTLEN + 1);
@@ -1008,6 +1021,18 @@ char *realname; /* real name of host */
}
remaining -= n;
+ /* fix messages that have only \n line-termination (for qmail) */
+ if (ctl->forcecr)
+ {
+ cp = buf + strlen(buf) - 1;
+ if (cp > buf && *cp == '\n' && cp[-1] != '\r')
+ {
+ *cp++ = '\r';
+ *cp++ = '\n';
+ *cp++ = '\0';
+ }
+ }
+
/* check for end of message */
if (delimited && *buf == '.')
if (buf[1] == '\r' && buf[2] == '\n')