]> code.citadel.org Git - citadel.git/blobdiff - citadel/modules/smtp/serv_smtp.c
smtp_do_bounce(): don't loose msg['A'] when overwriting its content.
[citadel.git] / citadel / modules / smtp / serv_smtp.c
index 7d1e26f49df302ed3d87319bdf61b491c9202e58..bd2cb71787116170b537d247b06088fe687fbadf 100644 (file)
@@ -1002,7 +1002,7 @@ void smtp_try(const char *key, const char *addr, int *status,
                scan_done = 0;
                ptr = msgtext;
                do {
-                       if (ptr = memreadline(ptr, buf, sizeof buf), *ptr == 0) {
+                       if (ptr = cmemreadline(ptr, buf, sizeof buf), *ptr == 0) {
                                scan_done = 1;
                        }
                        if (!strncasecmp(buf, "From:", 5)) {
@@ -1085,7 +1085,21 @@ void smtp_try(const char *key, const char *addr, int *status,
                CtdlLogPrintf(CTDL_DEBUG, "SMTP client: connecting to %s : %s ...\n", mx_host, mx_port);
                sock = sock_connect(mx_host, mx_port, "tcp");
                snprintf(dsn, SIZ, "Could not connect: %s", strerror(errno));
-               if (sock >= 0) CtdlLogPrintf(CTDL_DEBUG, "SMTP client: connected!\n");
+               if (sock >= 0) 
+               {
+                       CtdlLogPrintf(CTDL_DEBUG, "SMTP client: connected!\n");
+                               int fdflags; 
+                               fdflags = fcntl(sock, F_GETFL);
+                               if (fdflags < 0)
+                                       CtdlLogPrintf(CTDL_DEBUG,
+                                                     "unable to get SMTP-Client socket flags! %s \n",
+                                                     strerror(errno));
+                               fdflags = fdflags | O_NONBLOCK;
+                               if (fcntl(sock, F_SETFL, fdflags) < 0)
+                                       CtdlLogPrintf(CTDL_DEBUG,
+                                                     "unable to set SMTP-Client socket nonblocking flags! %s \n",
+                                                     strerror(errno));
+               }
                if (sock < 0) {
                        if (errno > 0) {
                                snprintf(dsn, SIZ, "%s", strerror(errno));
@@ -1466,6 +1480,8 @@ void smtp_do_bounce(char *instr) {
         StrBufAppendBufPlain(BounceMB, HKEY("--"), 0);
        StrBufAppendBuf(BounceMB, boundary, 0);
        StrBufAppendBufPlain(BounceMB, HKEY("--\r\n"), 0);
+       if (bmsg->cm_fields['A'] != NULL)
+               free(bmsg->cm_fields['A']);
        bmsg->cm_fields['A'] = SmashStrBuf(&BounceMB);
        /* Deliver the bounce if there's anything worth mentioning */
        CtdlLogPrintf(CTDL_DEBUG, "num_bounces = %d\n", num_bounces);