]> Pileus Git - ~andy/fetchmail/blobdiff - fetchmail.c
Fix HESIOD compile failure on FreeBSD 5-CURRENT,
[~andy/fetchmail] / fetchmail.c
index 6b26a6b28e3fced0e7d53c3729af5cf671d546de..de5215a9a2e8c6ef82050f26e4cfb7ea42bd8f2f 100644 (file)
@@ -25,7 +25,6 @@
 #include <errno.h>
 #include <sys/types.h>
 #include <sys/stat.h>
-#include <sys/time.h>  /* needed for Sun 4.1.2 */
 #ifdef HAVE_SETRLIMIT
 #include <sys/resource.h>
 #endif /* HAVE_SETRLIMIT */
@@ -63,7 +62,7 @@ char *program_name;       /* the name to prefix error messages with */
 flag configdump;           /* dump control blocks for configurator */
 char *fetchmailhost;       /* either `localhost' or the host's FQDN */
 
-#if NET_SECURITY
+#ifdef NET_SECURITY
 void *request = NULL;
 int requestlen = 0;
 #endif /* NET_SECURITY */
@@ -99,7 +98,6 @@ static void dropprivs(void)
 #endif
 
 #if defined(HAVE_SETLOCALE) && defined(ENABLE_NLS) && defined(HAVE_STRFTIME)
-#include <time.h>
 #include <locale.h>
 static char *timestamp (void)
 {
@@ -218,19 +216,22 @@ int main(int argc, char **argv)
 #ifdef SSL_ENABLE
        printf("+SSL");
 #endif
-#if OPIE_ENABLE
+#ifdef OPIE_ENABLE
        printf("+OPIE");
 #endif /* OPIE_ENABLE */
-#if INET6_ENABLE
+#ifdef INET6_ENABLE
        printf("+INET6");
 #endif /* INET6_ENABLE */
-#if NET_SECURITY
+#ifdef HAVE_PKG_hesiod
+       printf("+HESIOD");
+#endif
+#ifdef NET_SECURITY
        printf("+NETSEC");
 #endif /* NET_SECURITY */
 #ifdef HAVE_SOCKS
        printf("+SOCKS");
 #endif /* HAVE_SOCKS */
-#if ENABLE_NLS
+#ifdef ENABLE_NLS
        printf("+NLS");
 #endif /* ENABLE_NLS */
        putchar('\n');
@@ -632,7 +633,7 @@ int main(int argc, char **argv)
                        }
                    }
 
-#if (defined(linux) && !INET6_ENABLE) || defined(__FreeBSD__)
+#if (defined(linux) && !defined(INET6_ENABLE)) || defined(__FreeBSD__)
                    /*
                     * Don't do monitoring if we were woken by a signal.
                     * Note that interface_approve() does its own error logging.
@@ -641,13 +642,20 @@ int main(int argc, char **argv)
                        continue;
 #endif /* (defined(linux) && !INET6_ENABLE) || defined(__FreeBSD__) */
 
+                   dofastuidl = 0; /* this is reset in the driver if required */
+
                    querystatus = query_host(ctl);
 
+                   if (NUM_NONZERO(ctl->fastuidl))
+                       ctl->fastuidlcount = (ctl->fastuidlcount + 1) % ctl->fastuidl;
 #ifdef POP3_ENABLE
                    /* leave the UIDL state alone if there have been any errors */
                    if (!check_only &&
                                ((querystatus==PS_SUCCESS) || (querystatus==PS_NOMAIL) || (querystatus==PS_MAXFETCH)))
                        uid_swap_lists(ctl);
+                   else
+                       uid_discard_new_list(ctl);
+                   uid_reset_num(ctl);
 #endif  /* POP3_ENABLE */
 
                    if (querystatus == PS_SUCCESS)
@@ -689,7 +697,7 @@ int main(int argc, char **argv)
                            break;
                        }
 
-#if (defined(linux) && !INET6_ENABLE) || defined (__FreeBSD__)
+#if (defined(linux) && !defined(INET6_ENABLE)) || defined (__FreeBSD__)
                    if (ctl->server.monitor)
                    {
                        /*
@@ -820,7 +828,7 @@ static void optmerge(struct query *h2, struct query *h1, int force)
 #define FLAG_MERGE(fld) if (force ? !!h1->fld : !h2->fld) h2->fld = h1->fld
     FLAG_MERGE(server.via);
     FLAG_MERGE(server.protocol);
-#if INET6_ENABLE
+#ifdef INET6_ENABLE
     FLAG_MERGE(server.service);
     FLAG_MERGE(server.netsec);
 #else /* INET6_ENABLE */
@@ -872,6 +880,8 @@ static void optmerge(struct query *h2, struct query *h1, int force)
     FLAG_MERGE(limit);
     FLAG_MERGE(warnings);
     FLAG_MERGE(fetchlimit);
+    FLAG_MERGE(fetchsizelimit);
+    FLAG_MERGE(fastuidl);
     FLAG_MERGE(batchlimit);
 #ifdef SSL_ENABLE
     FLAG_MERGE(use_ssl);
@@ -910,6 +920,8 @@ static int load_params(int argc, char **argv, int optind)
     def_opts.warnings = WARNING_INTERVAL;
     def_opts.remotename = user;
     def_opts.listener = SMTP_MODE;
+    def_opts.fetchsizelimit = 100;
+    def_opts.fastuidl = 10;
 
     /* get the location of rcfile */
     rcfiledir[0] = 0;
@@ -1147,7 +1159,7 @@ static int load_params(int argc, char **argv, int optind)
            if (ctl->server.timeout == -1)      
                ctl->server.timeout = CLIENT_TIMEOUT;
 
-#if !INET6_ENABLE
+#ifndef INET6_ENABLE
            /* sanity checks */
            if (ctl->server.port < 0)
            {
@@ -1490,7 +1502,7 @@ static void dump_params (struct runctl *runp,
        }
 
        if (ctl->server.protocol == P_POP3 
-#if INET6_ENABLE
+#ifdef INET6_ENABLE
            && ctl->server.service && !strcmp(ctl->server.service, KPOP_PORT)
 #else /* INET6_ENABLE */
            && ctl->server.port == KPOP_PORT
@@ -1501,7 +1513,7 @@ static void dump_params (struct runctl *runp,
                   ctl->server.authenticate == A_KERBEROS_V5 ? "V" : "IV");
        else
            printf(GT_("  Protocol is %s"), showproto(ctl->server.protocol));
-#if INET6_ENABLE
+#ifdef INET6_ENABLE
        if (ctl->server.service)
            printf(GT_(" (using service %s)"), ctl->server.service);
        if (ctl->server.netsec)
@@ -1578,7 +1590,7 @@ static void dump_params (struct runctl *runp,
 
                printf(GT_("  Selected mailboxes are:"));
                for (idp = ctl->mailboxes; idp; idp = idp->next)
-                   printf(" %s", idp->id);
+                   printf(" %s", (char *)idp->id);
                printf("\n");
            }
            printf(GT_("  %s messages will be retrieved (--all %s).\n"),
@@ -1632,6 +1644,20 @@ static void dump_params (struct runctl *runp,
                       ctl->fetchlimit, ctl->fetchlimit);
            else if (outlevel >= O_VERBOSE)
                printf(GT_("  No received-message limit (--fetchlimit 0).\n"));
+           if (NUM_NONZERO(ctl->fetchsizelimit))
+               printf(GT_("  Fetch message size limit is %d (--fetchsizelimit %d).\n"),
+                      ctl->fetchsizelimit, ctl->fetchsizelimit);
+           else if (outlevel >= O_VERBOSE)
+               printf(GT_("  No fetch message size limit (--fetchsizelimit 0).\n"));
+           if (NUM_NONZERO(ctl->fastuidl) && MAILBOX_PROTOCOL(ctl))
+           {
+               if (ctl->fastuidl == 1)
+                   printf(GT_("  Do binary search of UIDs during each poll (--fastuidl 1).\n"));
+               else
+                   printf(GT_("  Do binary search of UIDs during %d out of %d polls (--fastuidl %d).\n"), ctl->fastuidl - 1, ctl->fastuidl, ctl->fastuidl);
+           }
+           else if (outlevel >= O_VERBOSE)
+               printf(GT_("   Do linear search of UIDs during each poll (--fastuidl 0).\n"));
            if (NUM_NONZERO(ctl->batchlimit))
                printf(GT_("  SMTP message batch limit is %d.\n"), ctl->batchlimit);
            else if (outlevel >= O_VERBOSE)
@@ -1651,7 +1677,7 @@ static void dump_params (struct runctl *runp,
            printf(GT_("  Domains for which mail will be fetched are:"));
            for (idp = ctl->domainlist; idp; idp = idp->next)
            {
-               printf(" %s", idp->id);
+               printf(" %s", (char *)idp->id);
                if (!idp->val.status.mark)
                    printf(GT_(" (default)"));
            }
@@ -1671,7 +1697,7 @@ static void dump_params (struct runctl *runp,
                       ctl->listener);
                for (idp = ctl->smtphunt; idp; idp = idp->next)
                {
-                   printf(" %s", idp->id);
+                   printf(" %s", (char *)idp->id);
                    if (!idp->val.status.mark)
                        printf(GT_(" (default)"));
                }
@@ -1729,9 +1755,9 @@ static void dump_params (struct runctl *runp,
                    {
                        for (idp = ctl->localnames; idp; idp = idp->next)
                            if (idp->val.id2)
-                               printf("\t%s -> %s\n", idp->id, idp->val.id2);
+                               printf("\t%s -> %s\n", (char *)idp->id, (char *)idp->val.id2);
                            else
-                               printf("\t%s\n", idp->id);
+                               printf("\t%s\n", (char *)idp->id);
                        if (ctl->wildcard)
                            fputs("\t*\n", stdout);
                    }
@@ -1770,7 +1796,7 @@ static void dump_params (struct runctl *runp,
 
                            printf(GT_("  Predeclared mailserver aliases:"));
                            for (idp = ctl->server.akalist; idp; idp = idp->next)
-                               printf(" %s", idp->id);
+                               printf(" %s", (char *)idp->id);
                            putchar('\n');
                        }
                        if (ctl->server.localdomains)
@@ -1779,7 +1805,7 @@ static void dump_params (struct runctl *runp,
 
                            printf(GT_("  Local domains:"));
                            for (idp = ctl->server.localdomains; idp; idp = idp->next)
-                               printf(" %s", idp->id);
+                               printf(" %s", (char *)idp->id);
                            putchar('\n');
                        }
                    }
@@ -1820,7 +1846,7 @@ static void dump_params (struct runctl *runp,
                printf(GT_("  %d UIDs saved.\n"), count);
                if (outlevel >= O_VERBOSE)
                    for (idp = ctl->oldsaved; idp; idp = idp->next)
-                       printf("\t%s\n", idp->id);
+                       printf("\t%s\n", (char *)idp->id);
            }
        }