2 * fetchmail.c -- main driver module for fetchmail
4 * For license terms, see the file COPYING in this directory.
20 #include <sys/types.h>
22 #include <sys/resource.h>
25 #include <socks.h> /* SOCKSinit() */
26 #endif /* HAVE_SOCKS */
30 #include "fetchmail.h"
38 /* need these (and sys/types.h) for res_init() */
39 #include <netinet/in.h>
40 #include <arpa/nameser.h>
44 #define ENETUNREACH 128 /* Interactive doesn't know this */
45 #endif /* ENETUNREACH */
47 /* prototypes for internal functions */
48 static int load_params(int, char **, int);
49 static void dump_params (struct runctl *runp, struct query *, flag implicit);
50 static int query_host(struct query *);
52 /* controls the detail level of status/progress messages written to stderr */
53 int outlevel; /* see the O_.* constants above */
55 /* miscellaneous global controls */
56 struct runctl run; /* global controls for this run */
57 flag nodetach; /* if TRUE, don't detach daemon process */
58 flag quitmode; /* if --quit was set */
59 int quitind; /* optind after position of last --quit option */
60 flag check_only; /* if --probe was set */
61 flag versioninfo; /* emit only version info */
62 char *user; /* the name of the invoking user */
63 char *home; /* invoking user's home directory */
64 char *fmhome; /* fetchmail's home directory */
65 const char *program_name; /* the name to prefix error messages with */
66 flag configdump; /* dump control blocks for configurator */
67 const char *fetchmailhost; /* either `localhost' or the host's FQDN */
69 static int quitonly; /* if we should quit after killing the running daemon */
71 static int querystatus; /* status of query */
72 static int successes; /* count number of successful polls */
73 static int activecount; /* count number of active entries */
74 static struct runctl cmd_run; /* global options set from command line */
75 static time_t parsetime; /* time of last parse */
77 static void terminate_run(int);
78 static void terminate_poll(int);
80 #if defined(__FreeBSD__) && defined(__FreeBSD_USE_KVM)
81 /* drop SGID kmem privileage until we need it */
82 static void dropprivs(void)
92 if (gr && !strcmp(gr->gr_name, "kmem"))
94 extern void interface_set_gids(gid_t egid, gid_t rgid);
95 interface_set_gids(egid, rgid);
101 #if defined(HAVE_SETLOCALE) && defined(ENABLE_NLS)
103 /** returns timestamp in current locale,
104 * and resets LC_TIME locale to POSIX. */
105 static char *timestamp (void)
108 static char buf[60]; /* RATS: ignore */
111 setlocale (LC_TIME, "");
112 strftime (buf, sizeof (buf), "%c", localtime(&now));
113 setlocale (LC_TIME, "C");
117 #define timestamp rfc822timestamp
120 static void donothing(int sig)
122 set_signal_handler(sig, donothing);
126 static void printcopyright(FILE *fp) {
127 fprintf(fp, GT_("Copyright (C) 2002, 2003 Eric S. Raymond\n"
128 "Copyright (C) 2004 Matthias Andree, Eric S. Raymond,\n"
129 " Robert M. Funk, Graham Wilson\n"
130 "Copyright (C) 2005 - 2006, 2010 Sunil Shetye\n"
131 "Copyright (C) 2005 - 2010 Matthias Andree\n"
133 fprintf(fp, GT_("Fetchmail comes with ABSOLUTELY NO WARRANTY. This is free software, and you\n"
134 "are welcome to redistribute it under certain conditions. For details,\n"
135 "please see the file COPYING in the source or documentation directory.\n"));
137 /* Do not translate this */
138 fprintf(fp, "This product includes software developed by the OpenSSL Project\nfor use in the OpenSSL Toolkit. (http://www.openssl.org/)\n");
142 const char *iana_charset;
144 int main(int argc, char **argv)
147 int implicitmode = FALSE;
149 netrc_entry *netrc_list;
150 char *netrc_file, *tmpbuf;
154 #if defined(__FreeBSD__) && defined(__FreeBSD_USE_KVM)
158 envquery(argc, argv);
160 setlocale (LC_ALL, "");
161 bindtextdomain(PACKAGE, LOCALEDIR);
163 iana_charset = norm_charmap(nl_langinfo(CODESET)); /* normalize local
167 iana_charset = "US-ASCII";
171 report(stderr, GT_("WARNING: Running as root is discouraged.\n"));
175 * Note: because we can't initialize reporting before we know whether
176 * syslog is supposed to be on, this message will go to stdout and
177 * be lost when running in background.
179 if (outlevel >= O_VERBOSE)
183 report(stdout, GT_("fetchmail: invoked with"));
184 for (i = 0; i < argc; i++)
185 report(stdout, " %s", argv[i]);
186 report(stdout, "\n");
189 #define IDFILE_NAME ".fetchids"
190 run.idfile = prependdir (IDFILE_NAME, fmhome);
195 * We used to arrange for the lock to be removed on exit close
196 * to where the lock was asserted. Now we need to do it here, because
197 * we might have re-executed in background with an existing lock
198 * as the result of a changed rcfile (see the code near the execvp(3)
199 * call near the beginning of the polling loop for details). We want
200 * to be sure the lock gets nuked on any error exit, basically.
205 /* save the current directory */
206 if (getcwd (currentwd, sizeof (currentwd)) == NULL) {
207 report(stderr, GT_("could not get current working directory\n"));
215 i = parsecmdline(argc, argv, &cmd_run, &cmd_opts);
219 if (quitmode && quitind == argc)
225 const char *features =
228 #endif /* POP3_ENABLE */
231 #endif /* IMAP_ENABLE */
237 #endif /* RPA_ENABLE */
240 #endif /* NTLM_ENABLE */
243 #endif /* SDPS_ENABLE */
246 #endif /* ETRN_ENABLE */
249 #endif /* ODMR_ENABLE */
255 #endif /* OPIE_ENABLE */
256 #ifdef HAVE_PKG_hesiod
261 #endif /* HAVE_SOCKS */
264 #endif /* ENABLE_NLS */
267 #endif /* KERBEROS_V4 */
270 #endif /* KERBEROS_V5 */
272 printf(GT_("This is fetchmail release %s"), VERSION);
273 fputs(features, stdout);
275 printcopyright(stdout);
277 fputs("Fallback MDA: ", stdout);
279 fputs(FALLBACK_MDA, stdout);
281 fputs("(none)", stdout);
286 /* this is an attempt to help remote debugging */
287 if (system("uname -a")) { /* NOOP to quench GCC complaint */ }
290 /* avoid parsing the config file if all we're doing is killing a daemon */
292 implicitmode = load_params(argc, argv, optind);
294 /* precedence: logfile (if effective) overrides syslog. */
295 if (run.logfile && run.poll_interval && !nodetach) {
299 /* logging should be set up early in case we were restarted from exec */
302 openlog(program_name, LOG_PID, LOG_MAIL);
306 report_init((run.poll_interval == 0 || nodetach) && !run.logfile);
309 /* initialize UID handling */
313 if (!versioninfo && (st = prc_filecheck(run.idfile, !versioninfo)) != 0)
316 initialize_saved_lists(querylist, run.idfile);
318 #endif /* POP3_ENABLE */
320 /* construct the lockfile */
324 * Before getting passwords, disable core dumps unless -v -d0 mode is on.
325 * Core dumps could otherwise contain passwords to be scavenged by a
328 if (outlevel < O_VERBOSE || run.poll_interval > 0)
330 struct rlimit corelimit;
331 corelimit.rlim_cur = 0;
332 corelimit.rlim_max = 0;
333 setrlimit(RLIMIT_CORE, &corelimit);
336 #define NETRC_FILE ".netrc"
337 /* parse the ~/.netrc file (if present) for future password lookups. */
338 netrc_file = prependdir (NETRC_FILE, home);
339 netrc_list = parse_netrc(netrc_file);
343 /* pick up passwords where we can */
344 for (ctl = querylist; ctl; ctl = ctl->next)
346 if (ctl->active && !(implicitmode && ctl->server.skip)&&!ctl->password)
348 if (NO_PASSWORD(ctl))
349 /* Server won't care what the password is, but there
350 must be some non-null string here. */
351 ctl->password = ctl->remotename;
356 /* look up the pollname and account in the .netrc file. */
357 p = search_netrc(netrc_list,
358 ctl->server.pollname, ctl->remotename);
359 /* if we find a matching entry with a password, use it */
360 if (p && p->password)
361 ctl->password = xstrdup(p->password);
363 /* otherwise try with "via" name if there is one */
364 else if (ctl->server.via)
366 p = search_netrc(netrc_list,
367 ctl->server.via, ctl->remotename);
368 if (p && p->password)
369 ctl->password = xstrdup(p->password);
375 free_netrc(netrc_list);
378 /* perhaps we just want to check options? */
381 int havercfile = access(rcfile, 0);
383 printf(GT_("Taking options from command line%s%s\n"),
384 havercfile ? "" : GT_(" and "),
385 havercfile ? "" : rcfile);
387 if (querylist == NULL)
389 GT_("No mailservers set up -- perhaps %s is missing?\n"),
392 dump_params(&run, querylist, implicitmode);
396 /* dump options as a Python dictionary, for configurator use */
399 dump_config(&run, querylist);
403 /* check for another fetchmail running concurrently */
404 pid = fm_lock_state();
406 pid = bkgd ? -pid : pid;
408 /* if no mail servers listed and nothing in background, we're done */
409 if (!quitonly && pid == 0 && querylist == NULL) {
410 (void)fputs(GT_("fetchmail: no mailservers have been specified.\n"),stderr);
414 /* perhaps user asked us to kill the other fetchmail */
417 if (pid == 0 || pid == getpid())
418 /* this test enables re-execing on a changed rcfile
419 * for pid == getpid() */
422 fprintf(stderr,GT_("fetchmail: no other fetchmail is running\n"));
426 else if (kill(pid, SIGTERM) < 0)
428 fprintf(stderr,GT_("fetchmail: error killing %s fetchmail at %ld; bailing out.\n"),
429 bkgd ? GT_("background") : GT_("foreground"), (long)pid);
436 if (outlevel > O_SILENT)
437 fprintf(stderr,GT_("fetchmail: %s fetchmail at %ld killed.\n"),
438 bkgd ? GT_("background") : GT_("foreground"), (long)pid);
439 /* We used to nuke the other process's lock here, with
440 * fm_lock_release(), which is broken. The other process
441 * needs to clear its lock by itself. */
445 /* wait for other process to exit */
446 maxwait = 10; /* seconds */
447 while (kill(pid, 0) == 0 && --maxwait >= 0) {
454 /* another fetchmail is running -- wake it up or die */
460 GT_("fetchmail: can't check mail while another fetchmail to same host is running.\n"));
463 else if (!implicitmode)
466 GT_("fetchmail: can't poll specified hosts with another fetchmail running at %ld.\n"),
473 GT_("fetchmail: another foreground fetchmail is running at %ld.\n"),
477 else if (getpid() == pid)
478 /* this test enables re-execing on a changed rcfile */
483 GT_("fetchmail: can't accept options while a background fetchmail is running.\n"));
486 else if (kill(pid, SIGUSR1) == 0)
489 GT_("fetchmail: background fetchmail at %ld awakened.\n"),
496 * Should never happen -- possible only if a background fetchmail
497 * croaks after the first kill probe above but before the
498 * SIGUSR1/SIGHUP transmission.
501 GT_("fetchmail: elder sibling at %ld died mysteriously.\n"),
503 return(PS_UNDEFINED);
507 /* pick up interactively any passwords we need but don't have */
508 for (ctl = querylist; ctl; ctl = ctl->next)
510 if (ctl->active && !(implicitmode && ctl->server.skip)
511 && !NO_PASSWORD(ctl) && !ctl->password)
516 GT_("fetchmail: can't find a password for %s@%s.\n"),
517 ctl->remotename, ctl->server.pollname);
520 const char* password_prompt = GT_("Enter password for %s@%s: ");
521 size_t pplen = strlen(password_prompt) + strlen(ctl->remotename) + strlen(ctl->server.pollname) + 1;
523 tmpbuf = (char *)xmalloc(pplen);
524 snprintf(tmpbuf, pplen, password_prompt,
525 ctl->remotename, ctl->server.pollname);
526 ctl->password = xstrdup((char *)fm_getpassword(tmpbuf));
533 * Time to initiate the SOCKS library (this is not mandatory: it just
534 * registers the correct application name for logging purpose. If you
535 * have some problem, comment out these lines).
538 SOCKSinit("fetchmail");
539 #endif /* HAVE_SOCKS */
541 /* avoid zombies from plugins */
544 /* Fix up log destination - if the if() is true, the precedence rule
545 * above hasn't killed off the syslog option, because the logfile
546 * option is ineffective (because we're not detached or not in
547 * deamon mode), so kill it for the benefit of other parts of the
549 if (run.logfile && run.use_syslog)
553 * Maybe time to go to demon mode...
555 if (run.poll_interval)
560 rc = daemonize(run.logfile);
562 report(stderr, GT_("fetchmail: Cannot detach into background. Aborting.\n"));
566 report(stdout, GT_("starting fetchmail %s daemon\n"), VERSION);
569 * We'll set up a handler for these when we're sleeping,
570 * but ignore them otherwise so as not to interrupt a poll.
572 set_signal_handler(SIGUSR1, SIG_IGN);
573 if (run.poll_interval && getuid() == ROOT_UID)
574 set_signal_handler(SIGHUP, SIG_IGN);
578 /* not in daemon mode */
579 if (run.logfile && !nodetach && access(run.logfile, F_OK) == 0)
581 if (!freopen(run.logfile, "a", stdout))
582 report(stderr, GT_("could not open %s to append logs to\n"), run.logfile);
583 if (!freopen(run.logfile, "a", stderr))
584 report(stdout, GT_("could not open %s to append logs to\n"), run.logfile);
586 report(stdout, GT_("fetchmail: Warning: syslog and logfile are set. Check both for logs!\n"));
592 /* beyond here we don't want more than one fetchmail running per user */
594 set_signal_handler(SIGABRT, terminate_run);
595 set_signal_handler(SIGINT, terminate_run);
596 set_signal_handler(SIGTERM, terminate_run);
597 set_signal_handler(SIGALRM, terminate_run);
598 set_signal_handler(SIGPIPE, SIG_IGN);
599 set_signal_handler(SIGQUIT, terminate_run);
601 /* here's the exclusion lock */
604 if (check_only && outlevel >= O_VERBOSE) {
605 report(stdout, GT_("--check mode enabled, not fetching mail\n"));
609 * Query all hosts. If there's only one, the error return will
610 * reflect the status of that transaction.
614 * Check to see if the rcfile has been touched. If so,
615 * re-exec so the file will be reread. Doing it this way
616 * avoids all the complications of trying to deallocate the
617 * in-core control structures -- and the potential memory
622 if (strcmp(rcfile, "-") == 0) {
624 } else if (stat(rcfile, &rcstat) == -1) {
627 GT_("couldn't time-check %s (error %d)\n"),
630 else if (rcstat.st_mtime > parsetime)
632 report(stdout, GT_("restarting fetchmail (%s changed)\n"), rcfile);
635 /* restore the startup directory */
636 if (!currentwd[0] || chdir (currentwd) == -1)
637 report(stderr, GT_("attempt to re-exec may fail as directory has not been restored\n"));
641 * Matthias Andree: Isn't this prone to introduction of
642 * "false" programs by interfering with PATH? Those
643 * path-searching execs might not be the best ideas for
646 * Rob Funk: But is there any way for someone to modify
647 * the PATH variable of a running fetchmail? I don't know
650 * Dave's change makes fetchmail restart itself in exactly
651 * the way it was started from the shell (or shell script)
652 * in the first place. If you're concerned about PATH
653 * contamination, call fetchmail initially with a full
654 * path, and use Dave's patch.
656 * Not using a -p variant of exec means that the restart
657 * will break if both (a) the user depended on PATH to
658 * call fetchmail in the first place, and (b) the system
659 * doesn't save the whole path in argv[0] if the whole
660 * path wasn't used in the initial call. (If I recall
661 * correctly, Linux saves it but many other Unices don't.)
663 execvp(argv[0], argv);
664 report(stderr, GT_("attempt to re-exec fetchmail failed\n"));
667 #ifdef HAVE_RES_SEARCH
668 /* Boldly assume that we also have res_init() if we have
669 * res_search(), and call res_init() to re-read the resolv.conf
670 * file, so that we can pick up changes to that file that are
671 * written by dhpccd, dhclient, pppd, openvpn and similar. */
673 /* NOTE: This assumes that /etc/resolv.conf is written
674 * atomically (i. e. a temporary file is written, flushed and
675 * then renamed into place). To fix Debian Bug#389270. */
677 /* NOTE: If this leaks memory or doesn't re-read
678 * /etc/resolv.conf, we're in trouble. The res_init() interface
679 * is only lightly documented :-( */
685 for (ctl = querylist; ctl; ctl = ctl->next)
689 if (!(implicitmode && ctl->server.skip))
694 GT_("poll of %s skipped (failed authentication or too many timeouts)\n"),
695 ctl->server.pollname);
699 /* check skip interval first so that it counts all polls */
700 if (run.poll_interval && ctl->server.interval)
702 if (ctl->server.poll_count++ % ctl->server.interval)
704 if (outlevel >= O_VERBOSE)
706 GT_("interval not reached, not querying %s\n"),
707 ctl->server.pollname);
714 * Don't do monitoring if we were woken by a signal.
715 * Note that interface_approve() does its own error logging.
717 if (!interface_approve(&ctl->server, !lastsig))
719 #endif /* CAN_MONITOR */
721 dofastuidl = 0; /* this is reset in the driver if required */
723 querystatus = query_host(ctl);
725 if (NUM_NONZERO(ctl->fastuidl))
726 ctl->fastuidlcount = (ctl->fastuidlcount + 1) % ctl->fastuidl;
728 /* leave the UIDL state alone if there have been any errors */
730 ((querystatus==PS_SUCCESS) || (querystatus==PS_NOMAIL) || (querystatus==PS_MAXFETCH)))
733 uid_discard_new_list(ctl);
735 #endif /* POP3_ENABLE */
737 if (querystatus == PS_SUCCESS)
739 else if (!check_only &&
740 ((querystatus!=PS_NOMAIL) || (outlevel==O_DEBUG)))
744 report(stdout,GT_("Query status=0 (SUCCESS)\n"));break;
746 report(stdout,GT_("Query status=1 (NOMAIL)\n")); break;
748 report(stdout,GT_("Query status=2 (SOCKET)\n")); break;
750 report(stdout,GT_("Query status=3 (AUTHFAIL)\n"));break;
752 report(stdout,GT_("Query status=4 (PROTOCOL)\n"));break;
754 report(stdout,GT_("Query status=5 (SYNTAX)\n")); break;
756 report(stdout,GT_("Query status=6 (IOERR)\n")); break;
758 report(stdout,GT_("Query status=7 (ERROR)\n")); break;
760 report(stdout,GT_("Query status=8 (EXCLUDE)\n")); break;
762 report(stdout,GT_("Query status=9 (LOCKBUSY)\n"));break;
764 report(stdout,GT_("Query status=10 (SMTP)\n")); break;
766 report(stdout,GT_("Query status=11 (DNS)\n")); break;
768 report(stdout,GT_("Query status=12 (BSMTP)\n")); break;
770 report(stdout,GT_("Query status=13 (MAXFETCH)\n"));break;
772 report(stdout,GT_("Query status=%d\n"),querystatus);
777 if (ctl->server.monitor)
780 * Allow some time for the link to quiesce. One
781 * second is usually sufficient, three is safe.
782 * Note: this delay is important - don't remove!
785 interface_note_activity(&ctl->server);
787 #endif /* CAN_MONITOR */
791 /* close connections cleanly */
795 * OK, we've polled. Now sleep.
797 if (run.poll_interval)
800 * Because passwords can expire, it may happen that *all*
801 * hosts are now out of the loop due to authfail
802 * conditions. If this happens daemon-mode fetchmail
803 * should softly and silently vanish away, rather than
804 * spinning uselessly.
808 for (ctl = querylist; ctl; ctl = ctl->next)
809 if (ctl->active && !(implicitmode && ctl->server.skip))
814 report(stderr, GT_("All connections are wedged. Exiting.\n"));
815 /* FIXME: someday, send notification mail */
819 if ((outlevel > O_SILENT && !run.use_syslog && isatty(1))
820 || outlevel > O_NORMAL)
822 GT_("sleeping at %s for %d seconds\n"), timestamp(), run.poll_interval);
825 * With this simple hack, we make it possible for a foreground
826 * fetchmail to wake up one in daemon mode. What we want is the
827 * side effect of interrupting any sleep that may be going on,
828 * forcing fetchmail to re-poll its hosts. The second line is
829 * for people who think all system daemons wake up on SIGHUP.
831 set_signal_handler(SIGUSR1, donothing);
832 if (getuid() == ROOT_UID)
833 set_signal_handler(SIGHUP, donothing);
836 * OK, now pause until it's time for the next poll cycle.
837 * A nonzero return indicates we received a wakeup signal;
838 * unwedge all servers in case the problem has been
841 if ((lastsig = interruptible_idle(run.poll_interval)))
843 if (outlevel > O_SILENT)
844 #ifdef SYS_SIGLIST_DECLARED
846 GT_("awakened by %s\n"), sys_siglist[lastsig]);
849 GT_("awakened by signal %d\n"), lastsig);
851 for (ctl = querylist; ctl; ctl = ctl->next)
855 if ((outlevel > O_SILENT && !run.use_syslog && isatty(1))
856 || outlevel > O_NORMAL)
857 report(stdout, GT_("awakened at %s\n"), timestamp());
859 } while (run.poll_interval);
861 if (outlevel >= O_VERBOSE)
862 report(stdout, GT_("normal termination, status %d\n"),
863 successes ? PS_SUCCESS : querystatus);
869 else if (querystatus)
872 /* in case we interrupted before a successful fetch */
876 static void list_merge(struct idlist **dstl, struct idlist **srcl, int force)
879 * If force is off, modify dstl fields only when they're empty (treat srcl
880 * as defaults). If force is on, modify each dstl field whenever scrcl
881 * is nonempty (treat srcl as an override).
883 if (force ? !!*srcl : !*dstl)
885 struct idlist *cpl = copy_str_list(*srcl);
887 append_str_list(dstl, &cpl);
891 static void optmerge(struct query *h2, struct query *h1, int force)
892 /* merge two options records */
894 list_merge(&h2->server.localdomains, &h1->server.localdomains, force);
895 list_merge(&h2->localnames, &h1->localnames, force);
896 list_merge(&h2->mailboxes, &h1->mailboxes, force);
897 list_merge(&h2->smtphunt, &h1->smtphunt, force);
898 list_merge(&h2->domainlist, &h1->domainlist, force);
899 list_merge(&h2->antispam, &h1->antispam, force);
901 #define FLAG_MERGE(fld) if (force ? !!h1->fld : !h2->fld) h2->fld = h1->fld
902 FLAG_MERGE(server.via);
903 FLAG_MERGE(server.protocol);
904 FLAG_MERGE(server.service);
905 FLAG_MERGE(server.interval);
906 FLAG_MERGE(server.authenticate);
907 FLAG_MERGE(server.timeout);
908 FLAG_MERGE(server.envelope);
909 FLAG_MERGE(server.envskip);
910 FLAG_MERGE(server.qvirtual);
911 FLAG_MERGE(server.skip);
912 FLAG_MERGE(server.dns);
913 FLAG_MERGE(server.checkalias);
914 FLAG_MERGE(server.uidl);
915 FLAG_MERGE(server.principal);
918 FLAG_MERGE(server.interface);
919 FLAG_MERGE(server.interface_pair);
920 FLAG_MERGE(server.monitor);
923 FLAG_MERGE(server.plugin);
924 FLAG_MERGE(server.plugout);
925 FLAG_MERGE(server.tracepolls);
926 FLAG_MERGE(server.badheader);
928 FLAG_MERGE(wildcard);
929 FLAG_MERGE(remotename);
930 FLAG_MERGE(password);
933 FLAG_MERGE(listener);
934 FLAG_MERGE(smtpaddress);
935 FLAG_MERGE(smtpname);
936 FLAG_MERGE(preconnect);
937 FLAG_MERGE(postconnect);
941 FLAG_MERGE(limitflush);
942 FLAG_MERGE(fetchall);
946 FLAG_MERGE(pass8bits);
947 FLAG_MERGE(dropstatus);
948 FLAG_MERGE(dropdelivered);
949 FLAG_MERGE(mimedecode);
952 FLAG_MERGE(warnings);
953 FLAG_MERGE(fetchlimit);
954 FLAG_MERGE(fetchsizelimit);
955 FLAG_MERGE(fastuidl);
956 FLAG_MERGE(batchlimit);
961 FLAG_MERGE(sslproto);
962 FLAG_MERGE(sslcertck);
963 FLAG_MERGE(sslcertfile);
964 FLAG_MERGE(sslcertpath);
965 FLAG_MERGE(sslcommonname);
966 FLAG_MERGE(sslfingerprint);
970 FLAG_MERGE(properties);
974 /** Load configuration files.
975 * \return - true if no servers found on the command line
976 * - false if servers found on the command line */
977 static int load_params(int argc, char **argv, int optind)
979 int implicitmode, st;
981 struct query def_opts, *ctl;
985 run.bouncemail = TRUE;
986 run.softbounce = TRUE; /* treat permanent errors as temporary */
987 run.spambounce = FALSE; /* don't bounce back to innocent bystanders */
989 memset(&def_opts, '\0', sizeof(struct query));
990 def_opts.smtp_socket = -1;
991 def_opts.smtpaddress = (char *)0;
992 def_opts.smtpname = (char *)0;
993 def_opts.server.protocol = P_AUTO;
994 def_opts.server.timeout = CLIENT_TIMEOUT;
995 def_opts.server.esmtp_name = user;
996 def_opts.server.badheader = BHREJECT;
997 def_opts.warnings = WARNING_INTERVAL;
998 def_opts.remotename = user;
999 def_opts.listener = SMTP_MODE;
1000 def_opts.fetchsizelimit = 100;
1001 def_opts.fastuidl = 4;
1003 /* get the location of rcfile */
1005 p = strrchr (rcfile, '/');
1006 if (p && (size_t)(p - rcfile) < sizeof (rcfiledir)) {
1007 *p = 0; /* replace '/' by '0' */
1008 strlcpy (rcfiledir, rcfile, sizeof(rcfiledir));
1009 *p = '/'; /* restore '/' */
1010 if (!rcfiledir[0]) /* "/.fetchmailrc" case */
1011 strcpy (rcfiledir, "/");
1014 /* note the parse time, so we can pick up on modifications */
1015 if (strcmp(rcfile, "-") == 0)
1016 parsetime = time(NULL);
1018 if (stat(rcfile, &rcstat) != -1)
1019 parsetime = rcstat.st_mtime;
1020 else if (errno != ENOENT)
1021 report(stderr, GT_("couldn't time-check the run-control file\n"));
1024 /* this builds the host list */
1025 if ((st = prc_parse_file(rcfile, !versioninfo)) != 0)
1027 * FIXME: someday, send notification mail here if backgrounded.
1028 * Right now, that can happen if the user changes the rcfile
1029 * while the fetchmail is running in background. Do similarly
1030 * for the other exit() calls in this function.
1034 if ((implicitmode = (optind >= argc)))
1036 for (ctl = querylist; ctl; ctl = ctl->next)
1037 ctl->active = !ctl->server.skip;
1040 for (; optind < argc; optind++)
1042 flag predeclared = FALSE;
1045 * If hostname corresponds to a host known from the rc file,
1046 * simply declare it active. Otherwise synthesize a host
1047 * record from command line and defaults
1049 for (ctl = querylist; ctl; ctl = ctl->next)
1050 if (!strcmp(ctl->server.pollname, argv[optind])
1051 || str_in_list(&ctl->server.akalist, argv[optind], TRUE))
1053 /* Is this correct? */
1054 if (predeclared && outlevel >= O_VERBOSE)
1055 fprintf(stderr,GT_("Warning: multiple mentions of host %s in config file\n"),argv[optind]);
1063 * Allocate and link record without copying in
1064 * command-line args; we'll do that with the optmerge
1067 ctl = hostalloc((struct query *)NULL);
1069 ctl->server.pollname = xstrdup(argv[optind]);
1071 ctl->server.lead_server = (struct hostdata *)NULL;
1076 * If there's a defaults record, merge it and lose it.
1077 * FIXME: we don't currently free all entries that might be in struct query.
1079 if (querylist && strcmp(querylist->server.pollname, "defaults") == 0)
1083 for (ctl = querylist->next; ctl; ctl = ctl->next)
1084 optmerge(ctl, querylist, FALSE);
1086 querylist = querylist->next;
1087 free(tmpq->server.pollname);
1091 /* don't allow a defaults record after the first */
1092 for (ctl = querylist; ctl; ctl = ctl->next) {
1093 if (ctl != querylist && strcmp(ctl->server.pollname, "defaults") == 0) {
1094 fprintf(stderr, GT_("fetchmail: Error: multiple \"defaults\" records in config file.\n"));
1099 /* use localhost if we never fetch the FQDN of this host */
1100 fetchmailhost = "localhost";
1102 /* here's where we override globals */
1103 if (cmd_run.logfile)
1104 run.logfile = cmd_run.logfile;
1106 run.idfile = cmd_run.idfile;
1107 if (cmd_run.pidfile)
1108 run.pidfile = cmd_run.pidfile;
1109 /* do this before the keep/fetchall test below, otherwise -d0 may fail */
1110 if (cmd_run.poll_interval >= 0)
1111 run.poll_interval = cmd_run.poll_interval;
1112 if (cmd_run.invisible)
1113 run.invisible = (cmd_run.invisible == FLAG_TRUE);
1114 if (cmd_run.showdots)
1115 run.showdots = (cmd_run.showdots == FLAG_TRUE);
1116 if (cmd_run.use_syslog)
1117 run.use_syslog = (cmd_run.use_syslog == FLAG_TRUE);
1118 if (cmd_run.postmaster)
1119 run.postmaster = cmd_run.postmaster;
1120 if (cmd_run.bouncemail)
1121 run.bouncemail = (cmd_run.bouncemail == FLAG_TRUE);
1122 if (cmd_run.softbounce)
1123 run.softbounce = (cmd_run.softbounce == FLAG_TRUE);
1125 /* check and daemon options are not compatible */
1126 if (check_only && run.poll_interval)
1127 run.poll_interval = 0;
1130 * DNS support is required for some protocols. We used to
1131 * do this unconditionally, but it made fetchmail excessively
1132 * vulnerable to misconfigured DNS setups.
1134 * If we're using ETRN or ODMR, the smtp hunt list is the
1135 * list of systems we're polling on behalf of; these have
1136 * to be fully-qualified domain names. The default for
1137 * this list should be the FQDN of localhost.
1139 * If we're using Kerberos for authentication, we need
1140 * the FQDN in order to generate capability keys.
1142 for (ctl = querylist; ctl; ctl = ctl->next)
1144 (ctl->server.protocol==P_ETRN || ctl->server.protocol==P_ODMR
1145 || ctl->server.authenticate == A_KERBEROS_V4
1146 || ctl->server.authenticate == A_KERBEROS_V5))
1148 fetchmailhost = host_fqdn(1);
1152 if (!ctl) /* list exhausted */
1153 fetchmailhost = host_fqdn(0);
1155 /* this code enables flags to be turned off */
1156 #define DEFAULT(flag, dflt) if (flag == FLAG_TRUE)\
1158 else if (flag == FLAG_FALSE)\
1163 /* merge in wired defaults, do sanity checks and prepare internal fields */
1164 for (ctl = querylist; ctl; ctl = ctl->next)
1166 ctl->wedged = FALSE;
1168 /* merge in defaults */
1169 optmerge(ctl, &def_opts, FALSE);
1171 /* force command-line options */
1172 optmerge(ctl, &cmd_opts, TRUE);
1175 * queryname has to be set up for inactive servers too.
1176 * Otherwise the UIDL code core-dumps on startup.
1178 if (ctl->server.via)
1179 ctl->server.queryname = xstrdup(ctl->server.via);
1181 ctl->server.queryname = xstrdup(ctl->server.pollname);
1184 * We no longer do DNS lookups at startup.
1185 * This is a kluge. It enables users to edit their
1186 * configurations when DNS isn't available.
1188 ctl->server.truename = xstrdup(ctl->server.queryname);
1190 if (configdump || ctl->active )
1192 DEFAULT(ctl->keep, FALSE);
1193 DEFAULT(ctl->fetchall, FALSE);
1194 DEFAULT(ctl->flush, FALSE);
1195 DEFAULT(ctl->limitflush, FALSE);
1196 DEFAULT(ctl->rewrite, TRUE);
1197 DEFAULT(ctl->stripcr, (ctl->mda != (char *)NULL));
1198 DEFAULT(ctl->forcecr, FALSE);
1199 DEFAULT(ctl->pass8bits, FALSE);
1200 DEFAULT(ctl->dropstatus, FALSE);
1201 DEFAULT(ctl->dropdelivered, FALSE);
1202 DEFAULT(ctl->mimedecode, FALSE);
1203 DEFAULT(ctl->idle, FALSE);
1204 DEFAULT(ctl->server.dns, TRUE);
1205 DEFAULT(ctl->server.uidl, FALSE);
1206 DEFAULT(ctl->use_ssl, FALSE);
1207 DEFAULT(ctl->sslcertck, FALSE);
1208 DEFAULT(ctl->server.checkalias, FALSE);
1211 * XXX FIXME: do we need this check or can we rely on the .y
1212 * parser handling this?
1216 report(stderr, GT_("SSL support is not compiled in.\n"));
1219 #endif /* SSL_ENABLE */
1222 if (ctl->server.authenticate == A_KERBEROS_V4) {
1223 report(stderr, GT_("KERBEROS v4 support is configured, but not compiled in.\n"));
1228 if (ctl->server.authenticate == A_KERBEROS_V5) {
1229 report(stderr, GT_("KERBEROS v5 support is configured, but not compiled in.\n"));
1234 if (ctl->server.authenticate == A_GSSAPI) {
1235 report(stderr, GT_("GSSAPI support is configured, but not compiled in.\n"));
1241 * Make sure we have a nonempty host list to forward to.
1244 save_str(&ctl->smtphunt, "localhost", FALSE);
1247 * Make sure we have a nonempty list of domains to fetch from.
1249 if ((ctl->server.protocol==P_ETRN || ctl->server.protocol==P_ODMR) && !ctl->domainlist)
1250 save_str(&ctl->domainlist, fetchmailhost, FALSE);
1252 /* if `user' doesn't name a real local user, try to run as root */
1253 if ((pw = getpwnam(user)) == (struct passwd *)NULL)
1256 ctl->uid = pw->pw_uid; /* for local delivery via MDA */
1257 if (!ctl->localnames) /* for local delivery via SMTP */
1258 save_str_pair(&ctl->localnames, user, NULL);
1261 * can't handle multidrop mailboxes without "envelope"
1262 * option, this causes truckloads full of support complaints
1263 * "all mail forwarded to postmaster"
1265 if (MULTIDROP(ctl) && !ctl->server.envelope)
1267 report(stderr, GT_("warning: multidrop for %s requires envelope option!\n"), ctl->server.pollname);
1268 report(stderr, GT_("warning: Do not ask for support if all mail goes to postmaster!\n"));
1271 /* if no folders were specified, set up the null one as default */
1272 if (!ctl->mailboxes)
1273 save_str(&ctl->mailboxes, (char *)NULL, 0);
1275 /* maybe user overrode timeout on command line? */
1276 if (ctl->server.timeout == -1)
1277 ctl->server.timeout = CLIENT_TIMEOUT;
1280 if (ctl->server.service) {
1281 int port = servport(ctl->server.service);
1284 (void) fprintf(stderr,
1285 GT_("fetchmail: %s configuration invalid, specify positive port number for service or port\n"),
1286 ctl->server.pollname);
1289 if (ctl->server.protocol == P_RPOP && port >= 1024)
1291 (void) fprintf(stderr,
1292 GT_("fetchmail: %s configuration invalid, RPOP requires a privileged port\n"),
1293 ctl->server.pollname);
1297 if (ctl->listener == LMTP_MODE)
1301 for (idp = ctl->smtphunt; idp; idp = idp->next)
1305 if (!(cp = strrchr(idp->id, '/'))
1306 || (0 == strcmp(cp + 1, SMTP_PORT))
1307 || servport(cp + 1) == SMTP_PORT_NUM)
1309 (void) fprintf(stderr,
1310 GT_("%s configuration invalid, LMTP can't use default SMTP port\n"),
1311 ctl->server.pollname);
1318 * "I beg to you, have mercy on the we[a]k minds like myself."
1319 * wrote Pehr Anderson. Your petition is granted.
1321 if (ctl->fetchall && ctl->keep && (run.poll_interval || ctl->idle) && !nodetach && !configdump)
1323 (void) fprintf(stderr,
1324 GT_("Both fetchall and keep on in daemon or idle mode is a mistake!\n"));
1330 * If the user didn't set a last-resort user to get misaddressed
1331 * multidrop mail, set an appropriate default here.
1333 if (!run.postmaster)
1335 if (getuid() != ROOT_UID) /* ordinary user */
1336 run.postmaster = user;
1338 run.postmaster = "postmaster";
1341 return(implicitmode);
1344 static void terminate_poll(int sig)
1345 /* to be executed at the end of a poll cycle */
1349 report(stdout, GT_("terminated with signal %d\n"), sig);
1353 * Update UID information at end of each poll, rather than at end
1354 * of run, because that way we don't lose all UIDL information since
1355 * the beginning of time if fetchmail crashes.
1358 write_saved_lists(querylist, run.idfile);
1359 #endif /* POP3_ENABLE */
1362 static void terminate_run(int sig)
1363 /* to be executed on normal or signal-induced termination */
1367 terminate_poll(sig);
1370 * Craig Metz, the RFC1938 one-time-password guy, points out:
1371 * "Remember that most kernels don't zero pages before handing them to the
1372 * next process and many kernels share pages between user and kernel space.
1373 * You'd be very surprised what you can find from a short program to do a
1374 * malloc() and then dump the contents of the pages you got. By zeroing
1375 * the secrets at end of run (earlier if you can), you make sure the next
1376 * guy can't get the password/pass phrase."
1378 * Right you are, Craig!
1380 for (ctl = querylist; ctl; ctl = ctl->next)
1382 memset(ctl->password, '\0', strlen(ctl->password));
1384 if (activecount == 0)
1387 exit(successes ? PS_SUCCESS : querystatus);
1391 * Sequence of protocols to try when autoprobing, most capable to least.
1393 static const int autoprobe[] =
1397 #endif /* IMAP_ENABLE */
1400 #endif /* POP3_ENABLE */
1403 static int query_host(struct query *ctl)
1404 /* perform fetch transaction with single host */
1410 * If we're syslogging the progress messages are automatically timestamped.
1411 * Force timestamping if we're going to a logfile.
1413 if (outlevel >= O_VERBOSE)
1415 report(stdout, GT_("%s querying %s (protocol %s) at %s: poll started\n"),
1417 ctl->server.pollname,
1418 showproto(ctl->server.protocol),
1422 switch (ctl->server.protocol) {
1424 for (i = 0; i < sizeof(autoprobe)/sizeof(autoprobe[0]); i++)
1426 ctl->server.protocol = autoprobe[i];
1428 st = query_host(ctl);
1431 if (st == PS_SUCCESS || st == PS_NOMAIL || st == PS_AUTHFAIL || st == PS_LOCKBUSY || st == PS_SMTP || st == PS_MAXFETCH || st == PS_DNS)
1434 ctl->server.protocol = P_AUTO;
1442 } while (st == PS_REPOLL);
1444 report(stderr, GT_("POP3 support is not configured.\n"));
1446 #endif /* POP3_ENABLE */
1452 } while (st == PS_REPOLL);
1454 report(stderr, GT_("IMAP support is not configured.\n"));
1456 #endif /* IMAP_ENABLE */
1460 report(stderr, GT_("ETRN support is not configured.\n"));
1465 #endif /* ETRN_ENABLE */
1468 report(stderr, GT_("ODMR support is not configured.\n"));
1472 #endif /* ODMR_ENABLE */
1475 report(stderr, GT_("unsupported protocol selected.\n"));
1480 * If we're syslogging the progress messages are automatically timestamped.
1481 * Force timestamping if we're going to a logfile.
1483 if (outlevel >= O_VERBOSE)
1485 report(stdout, GT_("%s querying %s (protocol %s) at %s: poll completed\n"),
1487 ctl->server.pollname,
1488 showproto(ctl->server.protocol),
1495 static void dump_params (struct runctl *runp,
1496 struct query *querylist, flag implicit)
1497 /* display query parameters in English */
1501 if (runp->poll_interval)
1502 printf(GT_("Poll interval is %d seconds\n"), runp->poll_interval);
1504 printf(GT_("Logfile is %s\n"), runp->logfile);
1505 if (strcmp(runp->idfile, IDFILE_NAME))
1506 printf(GT_("Idfile is %s\n"), runp->idfile);
1507 if (runp->use_syslog)
1508 printf(GT_("Progress messages will be logged via syslog\n"));
1509 if (runp->invisible)
1510 printf(GT_("Fetchmail will masquerade and will not generate Received\n"));
1512 printf(GT_("Fetchmail will show progress dots even in logfiles.\n"));
1513 if (runp->postmaster)
1514 printf(GT_("Fetchmail will forward misaddressed multidrop messages to %s.\n"),
1517 if (!runp->bouncemail)
1518 printf(GT_("Fetchmail will direct error mail to the postmaster.\n"));
1519 else if (outlevel >= O_VERBOSE)
1520 printf(GT_("Fetchmail will direct error mail to the sender.\n"));
1522 if (!runp->softbounce)
1523 printf(GT_("Fetchmail will treat permanent errors as permanent (drop messages).\n"));
1524 else if (outlevel >= O_VERBOSE)
1525 printf(GT_("Fetchmail will treat permanent errors as temporary (keep messages).\n"));
1527 for (ctl = querylist; ctl; ctl = ctl->next)
1529 if (!ctl->active || (implicit && ctl->server.skip))
1532 printf(GT_("Options for retrieving from %s@%s:\n"),
1533 ctl->remotename, visbuf(ctl->server.pollname));
1535 if (ctl->server.via && MAILBOX_PROTOCOL(ctl))
1536 printf(GT_(" Mail will be retrieved via %s\n"), ctl->server.via);
1538 if (ctl->server.interval)
1539 printf(ngettext(" Poll of this server will occur every %d interval.\n",
1540 " Poll of this server will occur every %d intervals.\n",
1541 ctl->server.interval), ctl->server.interval);
1542 if (ctl->server.truename)
1543 printf(GT_(" True name of server is %s.\n"), ctl->server.truename);
1544 if (ctl->server.skip || outlevel >= O_VERBOSE)
1545 printf(ctl->server.skip
1546 ? GT_(" This host will not be queried when no host is specified.\n")
1547 : GT_(" This host will be queried when no host is specified.\n"));
1548 if (!NO_PASSWORD(ctl))
1551 printf(GT_(" Password will be prompted for.\n"));
1552 else if (outlevel >= O_VERBOSE)
1554 if (ctl->server.protocol == P_APOP)
1555 printf(GT_(" APOP secret = \"%s\".\n"),
1556 visbuf(ctl->password));
1557 else if (ctl->server.protocol == P_RPOP)
1558 printf(GT_(" RPOP id = \"%s\".\n"),
1559 visbuf(ctl->password));
1561 printf(GT_(" Password = \"%s\".\n"),
1562 visbuf(ctl->password));
1566 if (ctl->server.protocol == P_POP3
1567 && ctl->server.service && !strcmp(ctl->server.service, KPOP_PORT)
1568 && (ctl->server.authenticate == A_KERBEROS_V4 ||
1569 ctl->server.authenticate == A_KERBEROS_V5))
1570 printf(GT_(" Protocol is KPOP with Kerberos %s authentication"),
1571 ctl->server.authenticate == A_KERBEROS_V5 ? "V" : "IV");
1573 printf(GT_(" Protocol is %s"), showproto(ctl->server.protocol));
1574 if (ctl->server.service)
1575 printf(GT_(" (using service %s)"), ctl->server.service);
1576 else if (outlevel >= O_VERBOSE)
1577 printf(GT_(" (using default port)"));
1578 if (ctl->server.uidl && MAILBOX_PROTOCOL(ctl))
1579 printf(GT_(" (forcing UIDL use)"));
1582 switch (ctl->server.authenticate)
1585 printf(GT_(" All available authentication methods will be tried.\n"));
1588 printf(GT_(" Password authentication will be forced.\n"));
1591 printf(GT_(" MSN authentication will be forced.\n"));
1594 printf(GT_(" NTLM authentication will be forced.\n"));
1597 printf(GT_(" OTP authentication will be forced.\n"));
1600 printf(GT_(" CRAM-MD5 authentication will be forced.\n"));
1603 printf(GT_(" GSSAPI authentication will be forced.\n"));
1606 printf(GT_(" Kerberos V4 authentication will be forced.\n"));
1609 printf(GT_(" Kerberos V5 authentication will be forced.\n"));
1612 printf(GT_(" End-to-end encryption assumed.\n"));
1615 if (ctl->server.principal != (char *) NULL)
1616 printf(GT_(" Mail service principal is: %s\n"), ctl->server.principal);
1619 printf(GT_(" SSL encrypted sessions enabled.\n"));
1621 printf(GT_(" SSL protocol: %s.\n"), ctl->sslproto);
1622 if (ctl->sslcertck) {
1623 printf(GT_(" SSL server certificate checking enabled.\n"));
1625 if (ctl->sslcertfile != NULL)
1626 printf(GT_(" SSL trusted certificate file: %s\n"), ctl->sslcertfile);
1627 if (ctl->sslcertpath != NULL)
1628 printf(GT_(" SSL trusted certificate directory: %s\n"), ctl->sslcertpath);
1629 if (ctl->sslcommonname != NULL)
1630 printf(GT_(" SSL server CommonName: %s\n"), ctl->sslcommonname);
1631 if (ctl->sslfingerprint != NULL)
1632 printf(GT_(" SSL key fingerprint (checked against the server key): %s\n"), ctl->sslfingerprint);
1634 if (ctl->server.timeout > 0)
1635 printf(GT_(" Server nonresponse timeout is %d seconds"), ctl->server.timeout);
1636 if (ctl->server.timeout == CLIENT_TIMEOUT)
1637 printf(GT_(" (default).\n"));
1641 if (MAILBOX_PROTOCOL(ctl))
1643 if (!ctl->mailboxes->id)
1644 printf(GT_(" Default mailbox selected.\n"));
1649 printf(GT_(" Selected mailboxes are:"));
1650 for (idp = ctl->mailboxes; idp; idp = idp->next)
1651 printf(" %s", idp->id);
1654 printf(ctl->fetchall
1655 ? GT_(" All messages will be retrieved (--all on).\n")
1656 : GT_(" Only new messages will be retrieved (--all off).\n"));
1658 ? GT_(" Fetched messages will be kept on the server (--keep on).\n")
1659 : GT_(" Fetched messages will not be kept on the server (--keep off).\n"));
1661 ? GT_(" Old messages will be flushed before message retrieval (--flush on).\n")
1662 : GT_(" Old messages will not be flushed before message retrieval (--flush off).\n"));
1663 printf(ctl->limitflush
1664 ? GT_(" Oversized messages will be flushed before message retrieval (--limitflush on).\n")
1665 : GT_(" Oversized messages will not be flushed before message retrieval (--limitflush off).\n"));
1667 ? GT_(" Rewrite of server-local addresses is enabled (--norewrite off).\n")
1668 : GT_(" Rewrite of server-local addresses is disabled (--norewrite on).\n"));
1670 ? GT_(" Carriage-return stripping is enabled (stripcr on).\n")
1671 : GT_(" Carriage-return stripping is disabled (stripcr off).\n"));
1673 ? GT_(" Carriage-return forcing is enabled (forcecr on).\n")
1674 : GT_(" Carriage-return forcing is disabled (forcecr off).\n"));
1675 printf(ctl->pass8bits
1676 ? GT_(" Interpretation of Content-Transfer-Encoding is disabled (pass8bits on).\n")
1677 : GT_(" Interpretation of Content-Transfer-Encoding is enabled (pass8bits off).\n"));
1678 printf(ctl->mimedecode
1679 ? GT_(" MIME decoding is enabled (mimedecode on).\n")
1680 : GT_(" MIME decoding is disabled (mimedecode off).\n"));
1682 ? GT_(" Idle after poll is enabled (idle on).\n")
1683 : GT_(" Idle after poll is disabled (idle off).\n"));
1684 printf(ctl->dropstatus
1685 ? GT_(" Nonempty Status lines will be discarded (dropstatus on)\n")
1686 : GT_(" Nonempty Status lines will be kept (dropstatus off)\n"));
1687 printf(ctl->dropdelivered
1688 ? GT_(" Delivered-To lines will be discarded (dropdelivered on)\n")
1689 : GT_(" Delivered-To lines will be kept (dropdelivered off)\n"));
1690 if (NUM_NONZERO(ctl->limit))
1692 if (NUM_NONZERO(ctl->limit))
1693 printf(GT_(" Message size limit is %d octets (--limit %d).\n"),
1694 ctl->limit, ctl->limit);
1695 else if (outlevel >= O_VERBOSE)
1696 printf(GT_(" No message size limit (--limit 0).\n"));
1697 if (run.poll_interval > 0)
1698 printf(GT_(" Message size warning interval is %d seconds (--warnings %d).\n"),
1699 ctl->warnings, ctl->warnings);
1700 else if (outlevel >= O_VERBOSE)
1701 printf(GT_(" Size warnings on every poll (--warnings 0).\n"));
1703 if (NUM_NONZERO(ctl->fetchlimit))
1704 printf(GT_(" Received-message limit is %d (--fetchlimit %d).\n"),
1705 ctl->fetchlimit, ctl->fetchlimit);
1706 else if (outlevel >= O_VERBOSE)
1707 printf(GT_(" No received-message limit (--fetchlimit 0).\n"));
1708 if (NUM_NONZERO(ctl->fetchsizelimit))
1709 printf(GT_(" Fetch message size limit is %d (--fetchsizelimit %d).\n"),
1710 ctl->fetchsizelimit, ctl->fetchsizelimit);
1711 else if (outlevel >= O_VERBOSE)
1712 printf(GT_(" No fetch message size limit (--fetchsizelimit 0).\n"));
1713 if (NUM_NONZERO(ctl->fastuidl) && MAILBOX_PROTOCOL(ctl))
1715 if (ctl->fastuidl == 1)
1716 printf(GT_(" Do binary search of UIDs during each poll (--fastuidl 1).\n"));
1718 printf(GT_(" Do binary search of UIDs during %d out of %d polls (--fastuidl %d).\n"), ctl->fastuidl - 1, ctl->fastuidl, ctl->fastuidl);
1720 else if (outlevel >= O_VERBOSE)
1721 printf(GT_(" Do linear search of UIDs during each poll (--fastuidl 0).\n"));
1722 if (NUM_NONZERO(ctl->batchlimit))
1723 printf(GT_(" SMTP message batch limit is %d.\n"), ctl->batchlimit);
1724 else if (outlevel >= O_VERBOSE)
1725 printf(GT_(" No SMTP message batch limit (--batchlimit 0).\n"));
1726 if (MAILBOX_PROTOCOL(ctl))
1728 if (NUM_NONZERO(ctl->expunge))
1729 printf(GT_(" Deletion interval between expunges forced to %d (--expunge %d).\n"), ctl->expunge, ctl->expunge);
1730 else if (outlevel >= O_VERBOSE)
1731 printf(GT_(" No forced expunges (--expunge 0).\n"));
1734 else /* ODMR or ETRN */
1738 printf(GT_(" Domains for which mail will be fetched are:"));
1739 for (idp = ctl->domainlist; idp; idp = idp->next)
1741 printf(" %s", idp->id);
1742 if (!idp->val.status.mark)
1743 printf(GT_(" (default)"));
1748 printf(GT_(" Messages will be appended to %s as BSMTP\n"), visbuf(ctl->bsmtp));
1749 else if (ctl->mda && MAILBOX_PROTOCOL(ctl))
1750 printf(GT_(" Messages will be delivered with \"%s\".\n"), visbuf(ctl->mda));
1757 printf(GT_(" Messages will be %cMTP-forwarded to:"),
1759 for (idp = ctl->smtphunt; idp; idp = idp->next)
1761 printf(" %s", idp->id);
1762 if (!idp->val.status.mark)
1763 printf(GT_(" (default)"));
1767 if (ctl->smtpaddress)
1768 printf(GT_(" Host part of MAIL FROM line will be %s\n"),
1771 printf(GT_(" Address to be put in RCPT TO lines shipped to SMTP will be %s\n"),
1774 if (MAILBOX_PROTOCOL(ctl))
1776 if (ctl->antispam != (struct idlist *)NULL)
1780 printf(GT_(" Recognized listener spam block responses are:"));
1781 for (idp = ctl->antispam; idp; idp = idp->next)
1782 printf(" %d", idp->val.status.num);
1785 else if (outlevel >= O_VERBOSE)
1786 printf(GT_(" Spam-blocking disabled\n"));
1788 if (ctl->preconnect)
1789 printf(GT_(" Server connection will be brought up with \"%s\".\n"),
1790 visbuf(ctl->preconnect));
1791 else if (outlevel >= O_VERBOSE)
1792 printf(GT_(" No pre-connection command.\n"));
1793 if (ctl->postconnect)
1794 printf(GT_(" Server connection will be taken down with \"%s\".\n"),
1795 visbuf(ctl->postconnect));
1796 else if (outlevel >= O_VERBOSE)
1797 printf(GT_(" No post-connection command.\n"));
1798 if (MAILBOX_PROTOCOL(ctl)) {
1799 if (!ctl->localnames)
1800 printf(GT_(" No localnames declared for this host.\n"));
1806 for (idp = ctl->localnames; idp; idp = idp->next)
1809 if (count > 1 || ctl->wildcard)
1810 printf(GT_(" Multi-drop mode: "));
1812 printf(GT_(" Single-drop mode: "));
1814 printf(ngettext("%d local name recognized.\n", "%d local names recognized.\n", count), count);
1815 if (outlevel >= O_VERBOSE)
1817 for (idp = ctl->localnames; idp; idp = idp->next)
1819 printf("\t%s -> %s\n", idp->id, idp->val.id2);
1821 printf("\t%s\n", idp->id);
1823 fputs("\t*\n", stdout);
1826 if (count > 1 || ctl->wildcard)
1828 printf(ctl->server.dns
1829 ? GT_(" DNS lookup for multidrop addresses is enabled.\n")
1830 : GT_(" DNS lookup for multidrop addresses is disabled.\n"));
1831 if (ctl->server.dns)
1833 if (ctl->server.checkalias)
1834 printf(GT_(" Server aliases will be compared with multidrop addresses by IP address.\n"));
1836 printf(GT_(" Server aliases will be compared with multidrop addresses by name.\n"));
1838 if (ctl->server.envelope == STRING_DISABLED)
1839 printf(GT_(" Envelope-address routing is disabled\n"));
1842 printf(GT_(" Envelope header is assumed to be: %s\n"),
1843 ctl->server.envelope ? ctl->server.envelope : "Received");
1844 if (ctl->server.envskip || outlevel >= O_VERBOSE)
1845 printf(GT_(" Number of envelope headers to be skipped over: %d\n"),
1846 ctl->server.envskip);
1847 if (ctl->server.qvirtual)
1848 printf(GT_(" Prefix %s will be removed from user id\n"),
1849 ctl->server.qvirtual);
1850 else if (outlevel >= O_VERBOSE)
1851 printf(GT_(" No prefix stripping\n"));
1854 if (ctl->server.akalist)
1856 printf(GT_(" Predeclared mailserver aliases:"));
1857 for (idp = ctl->server.akalist; idp; idp = idp->next)
1858 printf(" %s", idp->id);
1862 if (ctl->server.localdomains)
1864 printf(GT_(" Local domains:"));
1865 for (idp = ctl->server.localdomains; idp; idp = idp->next)
1866 printf(" %s", idp->id);
1873 if (ctl->server.interface)
1874 printf(GT_(" Connection must be through interface %s.\n"), ctl->server.interface);
1875 else if (outlevel >= O_VERBOSE)
1876 printf(GT_(" No interface requirement specified.\n"));
1877 if (ctl->server.monitor)
1878 printf(GT_(" Polling loop will monitor %s.\n"), ctl->server.monitor);
1879 else if (outlevel >= O_VERBOSE)
1880 printf(GT_(" No monitor interface specified.\n"));
1883 if (ctl->server.plugin)
1884 printf(GT_(" Server connections will be made via plugin %s (--plugin %s).\n"), ctl->server.plugin, ctl->server.plugin);
1885 else if (outlevel >= O_VERBOSE)
1886 printf(GT_(" No plugin command specified.\n"));
1887 if (ctl->server.plugout)
1888 printf(GT_(" Listener connections will be made via plugout %s (--plugout %s).\n"), ctl->server.plugout, ctl->server.plugout);
1889 else if (outlevel >= O_VERBOSE)
1890 printf(GT_(" No plugout command specified.\n"));
1892 if (MAILBOX_PROTOCOL(ctl))
1895 printf(GT_(" No UIDs saved from this host.\n"));
1901 for (idp = ctl->oldsaved; idp; idp = idp->next)
1904 printf(GT_(" %d UIDs saved.\n"), count);
1905 if (outlevel >= O_VERBOSE)
1906 for (idp = ctl->oldsaved; idp; idp = idp->next)
1907 printf("\t%s\n", idp->id);
1911 if (ctl->server.tracepolls)
1912 printf(GT_(" Poll trace information will be added to the Received header.\n"));
1913 else if (outlevel >= O_VERBOSE)
1914 printf(GT_(" No poll trace information will be added to the Received header.\n"));
1916 switch (ctl->server.badheader) {
1918 if (outlevel >= O_VERBOSE)
1919 printf(GT_(" Messages with bad headers will be rejected.\n"));
1922 printf(GT_(" Messages with bad headers will be passed on.\n"));
1926 if (ctl->properties)
1927 printf(GT_(" Pass-through properties \"%s\".\n"),
1928 visbuf(ctl->properties));
1932 /* fetchmail.c ends here */