]> Pileus Git - ~andy/fetchmail/blobdiff - transact.c
Merge branch 'master' into next
[~andy/fetchmail] / transact.c
index f3ed76bba28137891dbe14bb68a6a8554fd5d5b6..1480e76417002cac68a2f67e9dcbe406a032dcf2 100644 (file)
@@ -9,32 +9,24 @@
 #include  <stdio.h>
 #include  <string.h>
 #include  <ctype.h>
-#ifdef HAVE_MEMORY_H
-#include  <memory.h>
-#endif /* HAVE_MEMORY_H */
-#if defined(STDC_HEADERS)
 #include  <stdlib.h>
-#endif
-#if defined(HAVE_UNISTD_H)
 #include <unistd.h>
-#endif
-#if defined(HAVE_STDARG_H)
 #include  <stdarg.h>
-#else
-#include  <varargs.h>
-#endif
+#include <limits.h>
 
-#ifdef HAVE_NET_SOCKET_H
-#include <net/socket.h>
-#endif
 #include <sys/socket.h>
 #include <netdb.h>
 #include "fm_md5.h"
 
-#include "i18n.h"
+#include "gettext.h"
 #include "socket.h"
 #include "fetchmail.h"
 
+#define _FIX_INT_MIN(x) ((x) < INT_MIN ? INT_MIN : (x))
+#define _FIX_INT_MAX(x) ((x) > INT_MAX ? INT_MAX : (x))
+#define CAST_TO_INT(x) ((int)(_FIX_INT_MIN(_FIX_INT_MAX(x))))
+#define UCAST_TO_INT(x) ((int)(_FIX_INT_MAX(x)))
+
 /* global variables: please reinitialize them explicitly for proper
  * working in daemon mode */
 
@@ -624,7 +616,7 @@ eoh:
             * our terminating combination \n\0, we move backwards to
             * make sure that we don't catch some \n\0 stored in the
             * decoded part of the message */
-           for (tcp = line + linelen - 1; tcp > line && (*tcp != 0 || tcp[-1] != '\n'); tcp--);
+           for (tcp = line + linelen - 1; tcp > line && (*tcp != 0 || tcp[-1] != '\n'); tcp--) { }
            if  (tcp > line) linelen = tcp - line;
        }
 
@@ -670,15 +662,6 @@ eoh:
         * We will just check if the first message in the mailbox has an
         * X-IMAP: header.
         */
-#ifdef POP2_ENABLE
-       /*
-        * We disable this check under POP2 because there's no way to
-        * prevent deletion of the message.  So at least we ought to
-        * forward it to the user so he or she will have some clue
-        * that things have gone awry.
-        */
-       if (servport("pop2") != servport(protocol->service))
-#endif /* POP2_ENABLE */
            if (num == 1 && !strncasecmp(line, "X-IMAP:", 7)) {
                free(line);
                retain_mail = 1;
@@ -871,24 +854,6 @@ eoh:
        else if (!strncasecmp("Resent-Sender:", line, 14) && (strchr(line, '@') || strchr(line, '!')))
            resent_sender_offs = (line - msgblk.headers);
 
-#ifdef __UNUSED__
-       else if (!strncasecmp("Message-Id:", line, 11))
-       {
-           if (ctl->server.uidl)
-           {
-               char id[IDLEN+1];
-
-               line[IDLEN+12] = 0;             /* prevent stack overflow */
-               sscanf(line+12, "%s", id);
-               if (!str_find( &ctl->newsaved, num))
-               {
-                   struct idlist *newl = save_str(&ctl->newsaved,id,UID_SEEN);
-                   newl->val.status.num = num;
-               }
-           }
-       }
-#endif /* __UNUSED__ */
-
        /* if multidrop is on, gather addressee headers */
        if (MULTIDROP(ctl))
        {
@@ -1082,17 +1047,25 @@ process_headers:
            free(sdps_envto);
        } else
 #endif /* SDPS_ENABLE */ 
-       if (env_offs > -1)          /* We have the actual envelope addressee */
-           find_server_names(msgblk.headers + env_offs, ctl, &msgblk.recipients);
+           if (env_offs > -1) {            /* We have the actual envelope addressee */
+               if (outlevel >= O_DEBUG) {
+                   const char *tmps = msgblk.headers + env_offs;
+                   size_t l = strcspn(tmps, "\r\n");
+                   report(stdout, GT_("Parsing envelope \"%s\" names \"%-.*s\"\n"), ctl->server.envelope, UCAST_TO_INT(l), tmps);
+               }
+               find_server_names(msgblk.headers + env_offs, ctl, &msgblk.recipients);
+           }
        else if (delivered_to && ctl->server.envelope != STRING_DISABLED &&
-      ctl->server.envelope && !strcasecmp(ctl->server.envelope, "Delivered-To"))
-   {
-          if (outlevel >= O_DEBUG)
-                  report(stdout, GT_("Parsing envelope \"%s\" names \"%-.*s\"\n"), ctl->server.envelope, strcspn(delivered_to+2+strlen(ctl->server.envelope), "\r\n"), delivered_to+2+strlen(ctl->server.envelope));
+               ctl->server.envelope && !strcasecmp(ctl->server.envelope, "Delivered-To"))
+       {
+           if (outlevel >= O_DEBUG) {
+               const char *tmps = delivered_to + 2 + strlen(ctl->server.envelope);
+               size_t l = strcspn(tmps, "\r\n");
+               report(stdout, GT_("Parsing envelope \"%s\" names \"%-.*s\"\n"), ctl->server.envelope, UCAST_TO_INT(l), tmps);
+           }
            find_server_names(delivered_to, ctl, &msgblk.recipients);
            xfree(delivered_to);
-   }
-       else if (received_for) {
+       } else if (received_for) {
            /*
             * We have the Received for addressee.  
             * It has to be a mailserver address, or we
@@ -1100,8 +1073,11 @@ process_headers:
             * We use find_server_names() to let local 
             * hostnames go through.
             */
-          if (outlevel >= O_DEBUG)
-                  report(stdout, GT_("Parsing Received names \"%-.*s\"\n"), strcspn(received_for+2, "\r\n"), received_for+2);
+           if (outlevel >= O_DEBUG) {
+               const char *tmps = received_for + 2;
+               size_t l = strcspn(tmps, "\r\n");
+               report(stdout, GT_("Parsing Received names \"%-.*s\"\n"), UCAST_TO_INT(l), tmps);
+           }
            find_server_names(received_for, ctl, &msgblk.recipients);
        } else {
            /*
@@ -1127,8 +1103,11 @@ process_headers:
            }
            /* now look for remaining adresses */
            while (to_addrchain) {
-                   if (outlevel >= O_DEBUG)
-                           report(stdout, GT_("Guessing from header \"%-.*s\".\n"), strcspn(msgblk.headers+to_addrchain->offset, "\r\n"), msgblk.headers+to_addrchain->offset);
+               if (outlevel >= O_DEBUG) {
+                   const char *tmps = msgblk.headers+to_addrchain->offset;
+                   size_t l = strcspn(tmps, "\r\n");
+                   report(stdout, GT_("Guessing from header \"%-.*s\".\n"), UCAST_TO_INT(l), tmps);
+               }
 
                find_server_names(msgblk.headers+to_addrchain->offset, ctl, &msgblk.recipients);
                nextptr = to_addrchain->next;
@@ -1492,14 +1471,7 @@ static void enshroud(char *buf)
     }
 }
 
-#if defined(HAVE_STDARG_H)
 void gen_send(int sock, const char *fmt, ... )
-#else
-void gen_send(sock, fmt, va_alist)
-int sock;              /* socket to which server is connected */
-const char *fmt;       /* printf-style format */
-va_dcl
-#endif
 /* assemble command in printf(3) style and send to the server */
 {
     char buf [MSGBUFSIZE+1];
@@ -1510,11 +1482,7 @@ va_dcl
     else
        buf[0] = '\0';
 
-#if defined(HAVE_STDARG_H)
     va_start(ap, fmt);
-#else
-    va_start(ap);
-#endif
     vsnprintf(buf + strlen(buf), sizeof(buf)-2-strlen(buf), fmt, ap);
     va_end(ap);
 
@@ -1564,14 +1532,7 @@ int gen_recv(int sock  /** socket to which server is connected */,
     }
 }
 
-#if defined(HAVE_STDARG_H)
 int gen_transact(int sock, const char *fmt, ... )
-#else
-int gen_transact(int sock, fmt, va_alist)
-int sock;              /* socket to which server is connected */
-const char *fmt;       /* printf-style format */
-va_dcl
-#endif
 /* assemble command in printf(3) style, send to server, accept a response */
 {
     int ok;
@@ -1586,11 +1547,7 @@ va_dcl
     else
        buf[0] = '\0';
 
-#if defined(HAVE_STDARG_H)
     va_start(ap, fmt) ;
-#else
-    va_start(ap);
-#endif
     vsnprintf(buf + strlen(buf), sizeof(buf)-2-strlen(buf), fmt, ap);
     va_end(ap);