2 * fetchmail.c -- main driver module for fetchmail
4 * For license terms, see the file COPYING in this directory.
9 #if defined(STDC_HEADERS)
12 #if defined(HAVE_UNISTD_H)
18 #if defined(HAVE_SYSLOG)
26 #include <sys/types.h>
28 #include <sys/time.h> /* needed for Sun 4.1.2 */
30 #include <sys/resource.h>
31 #endif /* HAVE_SETRLIMIT */
32 #include <sys/utsname.h>
34 #ifdef HAVE_NET_SOCKET_H
35 #include <net/socket.h>
37 #ifdef HAVE_GETHOSTBYNAME
39 #endif /* HAVE_GETHOSTBYNAME */
46 #include "fetchmail.h"
54 #define ENETUNREACH 128 /* Interactive doesn't know this */
55 #endif /* ENETUNREACH */
57 /* prototypes for internal functions */
58 static int load_params(int, char **, int);
59 static void dump_params (struct runctl *runp, struct query *, flag implicit);
60 static int query_host(struct query *);
62 /* controls the detail level of status/progress messages written to stderr */
63 int outlevel; /* see the O_.* constants above */
65 /* miscellaneous global controls */
66 struct runctl run; /* global controls for this run */
67 flag nodetach; /* if TRUE, don't detach daemon process */
68 flag quitmode; /* if --quit was set */
69 flag check_only; /* if --probe was set */
70 flag versioninfo; /* emit only version info */
71 char *user; /* the name of the invoking user */
72 char *home; /* invoking user's home directory */
73 char *fmhome; /* fetchmail's home directory */
74 char *program_name; /* the name to prefix error messages with */
75 flag configdump; /* dump control blocks for configurator */
76 const char *fetchmailhost; /* either `localhost' or the host's FQDN */
81 #endif /* NET_SECURITY */
83 static char *lockfile; /* name of lockfile */
84 static int lock_acquired; /* have we acquired a lock */
85 static int querystatus; /* status of query */
86 static int successes; /* count number of successful polls */
87 static int activecount; /* count number of active entries */
88 static struct runctl cmd_run; /* global options set from command line */
89 static time_t parsetime; /* time of last parse */
91 static void terminate_run(int);
92 static void terminate_poll(int);
95 static void unlockit(int n, void *p)
97 static void unlockit(void)
99 /* must-do actions for exit (but we can't count on being able to do malloc) */
101 if (lockfile && lock_acquired)
105 #if defined(__FreeBSD__) && defined(__FreeBSD_USE_KVM)
106 /* drop SGID kmem privileage until we need it */
107 static void dropprivs(void)
117 if (gr && !strcmp(gr->gr_name, "kmem"))
119 extern void interface_set_gids(gid_t egid, gid_t rgid);
120 interface_set_gids(egid, rgid);
126 #if defined(HAVE_SETLOCALE) && defined(ENABLE_NLS) && defined(HAVE_STRFTIME)
129 static char *timestamp (void)
135 setlocale (LC_TIME, "");
136 strftime (buf, sizeof (buf), "%c", localtime(&now));
137 setlocale (LC_TIME, "C");
141 #define timestamp rfc822timestamp
144 int main(int argc, char **argv)
146 int st, bkgd = FALSE;
147 int parsestatus, implicitmode = FALSE;
150 netrc_entry *netrc_list;
151 char *netrc_file, *tmpbuf;
155 #if defined(__FreeBSD__) && defined(__FreeBSD_USE_KVM)
159 envquery(argc, argv);
161 bindtextdomain(PACKAGE, LOCALEDIR);
166 * Note: because we can't initialize reporting before we know whether
167 * syslog is supposed to be on, this message will go to stdout and
168 * be lost when running in background.
170 if (outlevel >= O_VERBOSE)
174 report(stdout, _("fetchmail: invoked with"));
175 for (i = 0; i < argc; i++)
176 report(stdout, " %s", argv[i]);
177 report(stdout, "\n");
180 #define IDFILE_NAME ".fetchids"
181 run.idfile = (char *) xmalloc(strlen(fmhome)+sizeof(IDFILE_NAME)+2);
182 strcpy(run.idfile, fmhome);
183 strcat(run.idfile, "/");
184 strcat(run.idfile, IDFILE_NAME);
189 * We used to arrange for the lockfile to be removed on exit close
190 * to where the lock was asserted. Now we need to do it here, because
191 * we might have re-executed in background with an existing lockfile
192 * as the result of a changed rcfile (see the code near the execvp(3)
193 * call near the beginning of the polling loop for details). We want
194 * to be sure the lockfile gets nuked on any error exit, basically.
200 on_exit(unlockit, (char *)NULL);
203 if ((parsestatus = parsecmdline(argc,argv, &cmd_run, &cmd_opts)) < 0)
208 printf(_("This is fetchmail release %s"), VERSION);
211 #endif /* POP2_ENABLE */
214 #endif /* POP3_ENABLE */
217 #endif /* IMAP_ENABLE */
223 #endif /* RPA_ENABLE */
226 #endif /* NTLM_ENABLE */
229 #endif /* SDPS_ENABLE */
232 #endif /* ETRN_ENABLE */
238 #endif /* OPIE_ENABLE */
241 #endif /* INET6_ENABLE */
244 #endif /* NET_SECURITY */
247 #endif /* HAVE_SOCKS */
250 #endif /* ENABLE_NLS */
254 /* this is an attempt to help remote debugging */
258 /* avoid parsing the config file if all we're doing is killing a daemon */
259 if (!(quitmode && argc == 2))
260 implicitmode = load_params(argc, argv, optind);
262 #if defined(HAVE_SYSLOG)
263 /* logging should be set up early in case we were restarted from exec */
266 #if defined(LOG_MAIL)
267 openlog(program_name, LOG_PID, LOG_MAIL);
269 /* Assume BSD4.2 openlog with two arguments */
270 openlog(program_name, LOG_PID);
276 report_init((run.poll_interval == 0 || nodetach) && !run.logfile);
278 /* set up to do lock protocol */
279 #define FETCHMAIL_PIDFILE "fetchmail.pid"
281 xalloca(tmpbuf, char *,
282 sizeof(PID_DIR) + sizeof(FETCHMAIL_PIDFILE));
283 sprintf(tmpbuf, "%s/%s", PID_DIR, FETCHMAIL_PIDFILE);
285 xalloca(tmpbuf, char *, strlen(fmhome) + sizeof(FETCHMAIL_PIDFILE) + 2);
286 strcpy(tmpbuf, fmhome);
290 strcat(tmpbuf, FETCHMAIL_PIDFILE);
292 #undef FETCHMAIL_PIDFILE
294 #ifdef HAVE_SETRLIMIT
296 * Before getting passwords, disable core dumps unless -v -d0 mode is on.
297 * Core dumps could otherwise contain passwords to be scavenged by a
300 if (outlevel < O_VERBOSE || run.poll_interval > 0)
302 struct rlimit corelimit;
303 corelimit.rlim_cur = 0;
304 corelimit.rlim_max = 0;
305 setrlimit(RLIMIT_CORE, &corelimit);
307 #endif /* HAVE_SETRLIMIT */
309 #define NETRC_FILE ".netrc"
310 /* parse the ~/.netrc file (if present) for future password lookups. */
311 xalloca(netrc_file, char *, strlen(home) + sizeof(NETRC_FILE) + 2);
312 strcpy (netrc_file, home);
313 strcat (netrc_file, "/");
314 strcat (netrc_file, NETRC_FILE);
315 netrc_list = parse_netrc(netrc_file);
318 /* pick up passwords where we can */
319 for (ctl = querylist; ctl; ctl = ctl->next)
321 if (ctl->active && !(implicitmode && ctl->server.skip)&&!ctl->password)
323 if (ctl->server.preauthenticate == A_KERBEROS_V4 ||
324 ctl->server.preauthenticate == A_KERBEROS_V5 ||
325 ctl->server.preauthenticate == A_SSH ||
327 ctl->server.protocol == P_IMAP_GSS ||
329 ctl->server.protocol == P_IMAP_K4)
330 /* Server won't care what the password is, but there
331 must be some non-null string here. */
332 ctl->password = ctl->remotename;
337 /* look up the pollname and account in the .netrc file. */
338 p = search_netrc(netrc_list,
339 ctl->server.pollname, ctl->remotename);
340 /* if we find a matching entry with a password, use it */
341 if (p && p->password)
342 ctl->password = xstrdup(p->password);
344 /* otherwise try with "via" name if there is one */
345 else if (ctl->server.via)
347 p = search_netrc(netrc_list,
348 ctl->server.via, ctl->remotename);
349 if (p && p->password)
350 ctl->password = xstrdup(p->password);
356 /* perhaps we just want to check options? */
359 int havercfile = access(rcfile, 0);
361 printf(_("Taking options from command line%s%s\n"),
362 havercfile ? "" : _(" and "),
363 havercfile ? "" : rcfile);
365 if (outlevel >= O_VERBOSE)
366 printf(_("Lockfile at %s\n"), tmpbuf);
368 if (querylist == NULL)
370 _("No mailservers set up -- perhaps %s is missing?\n"),
373 dump_params(&run, querylist, implicitmode);
377 /* dump options as a Python dictionary, for configurator use */
380 dump_config(&run, querylist);
384 /* check for another fetchmail running concurrently */
386 if ((lockfile = (char *) malloc(strlen(tmpbuf) + 1)) == NULL)
388 report(stderr,_("fetchmail: cannot allocate memory for lock name.\n"));
392 (void) strcpy(lockfile, tmpbuf);
393 if ((lockfp = fopen(lockfile, "r")) != NULL )
395 bkgd = (fscanf(lockfp,"%d %d", &pid, &st) == 2);
397 if (kill(pid, 0) == -1) {
398 fprintf(stderr,_("fetchmail: removing stale lockfile\n"));
403 fclose(lockfp); /* not checking should be safe, file mode was "r" */
406 /* if no mail servers listed and nothing in background, we're done */
407 if (!(quitmode && argc == 2) && pid == -1 && querylist == NULL) {
408 (void)fputs(_("fetchmail: no mailservers have been specified.\n"),stderr);
412 /* perhaps user asked us to kill the other fetchmail */
417 fprintf(stderr,_("fetchmail: no other fetchmail is running\n"));
421 else if (kill(pid, SIGTERM) < 0)
423 fprintf(stderr,_("fetchmail: error killing %s fetchmail at %d; bailing out.\n"),
424 bkgd ? _("background") : _("foreground"), pid);
429 fprintf(stderr,_("fetchmail: %s fetchmail at %d killed.\n"),
430 bkgd ? _("background") : _("foreground"), pid);
439 /* another fetchmail is running -- wake it up or die */
445 _("fetchmail: can't check mail while another fetchmail to same host is running.\n"));
448 else if (!implicitmode)
451 _("fetchmail: can't poll specified hosts with another fetchmail running at %d.\n"),
458 _("fetchmail: another foreground fetchmail is running at %d.\n"),
464 /* this test enables re-execing on a changed rcfile */
466 lock_acquired = TRUE;
470 _("fetchmail: can't accept options while a background fetchmail is running.\n"));
474 else if (kill(pid, SIGUSR1) == 0)
477 _("fetchmail: background fetchmail at %d awakened.\n"),
484 * Should never happen -- possible only if a background fetchmail
485 * croaks after the first kill probe above but before the
486 * SIGUSR1/SIGHUP transmission.
489 _("fetchmail: elder sibling at %d died mysteriously.\n"),
491 return(PS_UNDEFINED);
495 /* pick up interactively any passwords we need but don't have */
496 for (ctl = querylist; ctl; ctl = ctl->next)
498 if (ctl->active && !(implicitmode && ctl->server.skip)
499 && ctl->server.protocol != P_ETRN
500 && ctl->server.protocol != P_IMAP_K4
502 && ctl->server.protocol != P_IMAP_GSS
509 _("fetchmail: can't find a password for %s@%s.\n"),
510 ctl->remotename, ctl->server.pollname);
515 char* password_prompt = _("Enter password for %s@%s: ");
517 xalloca(tmpbuf, char *, strlen(password_prompt) +
518 strlen(ctl->remotename) +
519 strlen(ctl->server.pollname) + 1);
520 (void) sprintf(tmpbuf, password_prompt,
521 ctl->remotename, ctl->server.pollname);
522 ctl->password = xstrdup((char *)fm_getpassword(tmpbuf));
528 * Time to initiate the SOCKS library (this is not mandatory: it just
529 * registers the correct application name for logging purpose. If you
530 * have some problem, comment out these lines).
533 SOCKSinit("fetchmail");
534 #endif /* HAVE_SOCKS */
537 * Maybe time to go to demon mode...
539 if (run.poll_interval)
542 daemonize(run.logfile, terminate_run);
543 report(stdout, _("starting fetchmail %s daemon \n"), VERSION);
546 * We'll set up a handler for these when we're sleeping,
547 * but ignore them otherwise so as not to interrupt a poll.
549 signal(SIGUSR1, SIG_IGN);
550 if (run.poll_interval && !getuid())
551 signal(SIGHUP, SIG_IGN);
553 else if (run.logfile && access(run.logfile, F_OK) == 0)
555 freopen(run.logfile, "a", stdout);
556 freopen(run.logfile, "a", stderr);
564 /* beyond here we don't want more than one fetchmail running per user */
566 signal(SIGABRT, terminate_run);
567 signal(SIGINT, terminate_run);
568 signal(SIGTERM, terminate_run);
569 signal(SIGALRM, terminate_run);
570 signal(SIGPIPE, terminate_run);
571 signal(SIGQUIT, terminate_run);
573 /* here's the exclusion lock */
575 #define O_SYNC 0 /* use it if we have it */
577 if ((st = open(lockfile, O_WRONLY|O_CREAT|O_EXCL|O_SYNC, 0666)) != -1)
579 sprintf(tmpbuf,"%d", getpid());
580 write(st, tmpbuf, strlen(tmpbuf));
581 if (run.poll_interval)
583 sprintf(tmpbuf," %d", run.poll_interval);
584 write(st, tmpbuf, strlen(tmpbuf));
586 close(st); /* should be safe, fd was opened with O_SYNC */
587 lock_acquired = TRUE;
591 * Query all hosts. If there's only one, the error return will
592 * reflect the status of that transaction.
596 * Check to see if the rcfile has been touched. If so,
597 * re-exec so the file will be reread. Doing it this way
598 * avoids all the complications of trying to deallocate the
599 * in-core control structures -- and the potential memory
604 if (stat(rcfile, &rcstat) == -1)
608 _("couldn't time-check %s (error %d)\n"),
611 else if (rcstat.st_mtime > parsetime)
613 report(stdout, _("restarting fetchmail (%s changed)\n"), rcfile);
614 execvp("fetchmail", argv);
615 report(stderr, _("attempt to re-exec fetchmail failed\n"));
618 #if defined(HAVE_RES_SEARCH) && defined(USE_TCPIP_FOR_DNS)
620 * This was an efficiency hack that backfired. The theory
621 * was that using TCP/IP for DNS queries would get us better
622 * reliability and shave off some per-UDP-packet costs.
623 * Unfortunately it interacted badly with diald, which effectively
624 * filters out DNS queries over TCP/IP for reasons having to do
625 * with some obscure kernel problem involving bootstrapping of
626 * dynamically-addressed links. I don't understand this mess
627 * and don't want to, so it's "See ya!" to this hack.
629 sethostent(TRUE); /* use TCP/IP for mailserver queries */
630 #endif /* HAVE_RES_SEARCH */
634 for (ctl = querylist; ctl; ctl = ctl->next)
638 if (!(implicitmode && ctl->server.skip))
643 _("poll of %s skipped (failed authentication or too many timeouts)\n"),
644 ctl->server.pollname);
648 /* check skip interval first so that it counts all polls */
649 if (run.poll_interval && ctl->server.interval)
651 if (ctl->server.poll_count++ % ctl->server.interval)
653 if (outlevel >= O_VERBOSE)
655 _("interval not reached, not querying %s\n"),
656 ctl->server.pollname);
661 #if (defined(linux) && !INET6_ENABLE) || defined(__FreeBSD__)
663 * Don't do monitoring if we were woken by a signal.
664 * Note that interface_approve() does its own error logging.
666 if (!interface_approve(&ctl->server, !lastsig))
668 #endif /* (defined(linux) && !INET6_ENABLE) || defined(__FreeBSD__) */
670 querystatus = query_host(ctl);
673 /* leave the UIDL state alone if there have been any errors */
675 ((querystatus==PS_SUCCESS) || (querystatus==PS_NOMAIL)))
677 #endif /* POP3_ENABLE */
679 if (querystatus == PS_SUCCESS)
681 else if (!check_only &&
682 ((querystatus!=PS_NOMAIL) || (outlevel==O_DEBUG)))
686 report(stdout,_("Query status=0 (SUCCESS)\n"));break;
688 report(stdout,_("Query status=1 (NOMAIL)\n")); break;
690 report(stdout,_("Query status=2 (SOCKET)\n")); break;
692 report(stdout,_("Query status=3 (AUTHFAIL)\n"));break;
694 report(stdout,_("Query status=4 (PROTOCOL)\n"));break;
696 report(stdout,_("Query status=5 (SYNTAX)\n")); break;
698 report(stdout,_("Query status=6 (IOERR)\n")); break;
700 report(stdout,_("Query status=7 (ERROR)\n")); break;
702 report(stdout,_("Query status=8 (EXCLUDE)\n")); break;
704 report(stdout,_("Query status=9 (LOCKBUSY)\n"));break;
706 report(stdout,_("Query status=10 (SMTP)\n")); break;
708 report(stdout,_("Query status=11 (DNS)\n")); break;
710 report(stdout,_("Query status=12 (BSMTP)\n")); break;
712 report(stdout,_("Query status=13 (MAXFETCH)\n"));break;
714 report(stdout,_("Query status=%d\n"),querystatus);
718 #if (defined(linux) && !INET6_ENABLE) || defined (__FreeBSD__)
719 if (ctl->server.monitor)
722 * Allow some time for the link to quiesce. One
723 * second is usually sufficient, three is safe.
724 * Note: this delay is important - don't remove!
727 interface_note_activity(&ctl->server);
729 #endif /* (defined(linux) && !INET6_ENABLE) || defined(__FreeBSD__) */
733 #if defined(HAVE_RES_SEARCH) && defined(USE_TCPIP_FOR_DNS)
734 endhostent(); /* release TCP/IP connection to nameserver */
735 #endif /* HAVE_RES_SEARCH */
737 /* close connections cleanly */
741 * OK, we've polled. Now sleep.
743 if (run.poll_interval)
746 * Because passwords can expire, it may happen that *all*
747 * hosts are now out of the loop due to authfail
748 * conditions. If this happens daemon-mode fetchmail
749 * should softly and silently vanish away, rather than
750 * spinning uselessly.
754 for (ctl = querylist; ctl; ctl = ctl->next)
755 if (ctl->active && !(implicitmode && ctl->server.skip))
760 report(stderr, _("All connections are wedged. Exiting.\n"));
761 /* FIXME: someday, send notification mail */
765 if (outlevel >= O_VERBOSE)
767 _("fetchmail: sleeping at %s\n"), timestamp());
770 * OK, now pause util it's time for the next poll cycle.
771 * A nonzero return indicates we received a wakeup signal;
772 * unwedge all servers in case the problem has been
775 if ((lastsig = interruptible_idle(run.poll_interval)))
777 #ifdef SYS_SIGLIST_DECLARED
779 _("awakened by %s\n"), sys_siglist[lastsig]);
782 _("awakened by signal %d\n"), lastsig);
784 for (ctl = querylist; ctl; ctl = ctl->next)
788 if (outlevel >= O_VERBOSE)
789 report(stdout, _("awakened at %s\n"), timestamp());
794 if (outlevel >= O_VERBOSE)
795 report(stdout, _("normal termination, status %d\n"),
796 successes ? PS_SUCCESS : querystatus);
799 exit(successes ? PS_SUCCESS : querystatus);
802 static void list_merge(struct idlist **dstl, struct idlist **srcl, int force)
805 * If force is off, modify dstl fields only when they're empty (treat srcl
806 * as defaults). If force is on, modify each dstl field whenever scrcl
807 * is nonempty (treat srcl as an override).
809 if (force ? !!*srcl : !*dstl)
811 struct idlist *cpl = copy_str_list(*srcl);
813 append_str_list(dstl, &cpl);
817 static void optmerge(struct query *h2, struct query *h1, int force)
818 /* merge two options records */
820 list_merge(&h2->server.localdomains, &h1->server.localdomains, force);
821 list_merge(&h2->localnames, &h1->localnames, force);
822 list_merge(&h2->mailboxes, &h1->mailboxes, force);
823 list_merge(&h2->smtphunt, &h1->smtphunt, force);
824 list_merge(&h2->antispam, &h1->antispam, force);
826 #define FLAG_MERGE(fld) if (force ? !!h1->fld : !h2->fld) h2->fld = h1->fld
827 FLAG_MERGE(server.via);
828 FLAG_MERGE(server.protocol);
830 FLAG_MERGE(server.service);
831 FLAG_MERGE(server.netsec);
832 #else /* INET6_ENABLE */
833 FLAG_MERGE(server.port);
834 #endif /* INET6_ENABLE */
835 FLAG_MERGE(server.interval);
836 FLAG_MERGE(server.preauthenticate);
837 FLAG_MERGE(server.timeout);
838 FLAG_MERGE(server.envelope);
839 FLAG_MERGE(server.envskip);
840 FLAG_MERGE(server.qvirtual);
841 FLAG_MERGE(server.skip);
842 FLAG_MERGE(server.dns);
843 FLAG_MERGE(server.checkalias);
844 FLAG_MERGE(server.uidl);
846 #if defined(linux) || defined(__FreeBSD__)
847 FLAG_MERGE(server.interface);
848 FLAG_MERGE(server.monitor);
849 FLAG_MERGE(server.interface_pair);
850 #endif /* linux || defined(__FreeBSD__) */
852 FLAG_MERGE(server.plugin);
853 FLAG_MERGE(server.plugout);
855 FLAG_MERGE(wildcard);
856 FLAG_MERGE(remotename);
857 FLAG_MERGE(password);
860 FLAG_MERGE(listener);
861 FLAG_MERGE(smtpaddress);
862 FLAG_MERGE(smtpname);
863 FLAG_MERGE(preconnect);
864 FLAG_MERGE(postconnect);
868 FLAG_MERGE(fetchall);
872 FLAG_MERGE(pass8bits);
873 FLAG_MERGE(dropstatus);
874 FLAG_MERGE(dropdelivered);
875 FLAG_MERGE(mimedecode);
878 FLAG_MERGE(warnings);
879 FLAG_MERGE(fetchlimit);
880 FLAG_MERGE(batchlimit);
888 FLAG_MERGE(properties);
892 static int load_params(int argc, char **argv, int optind)
894 int implicitmode, st;
896 struct query def_opts, *ctl;
899 run.bouncemail = TRUE;
901 memset(&def_opts, '\0', sizeof(struct query));
902 def_opts.smtp_socket = -1;
903 def_opts.smtpaddress = (char *)0;
904 #define ANTISPAM(n) save_str(&def_opts.antispam, STRING_DUMMY, 0)->val.status.num = (n)
905 ANTISPAM(571); /* sendmail */
906 ANTISPAM(550); /* old exim */
907 ANTISPAM(501); /* new exim */
908 ANTISPAM(554); /* Postfix */
911 def_opts.server.protocol = P_AUTO;
912 def_opts.server.timeout = CLIENT_TIMEOUT;
913 def_opts.warnings = WARNING_INTERVAL;
914 def_opts.remotename = user;
915 def_opts.listener = SMTP_MODE;
917 /* note the parse time, so we can pick up on modifications */
918 parsetime = 0; /* foil compiler warnings */
919 if (stat(rcfile, &rcstat) != -1)
920 parsetime = rcstat.st_mtime;
921 else if (errno != ENOENT)
922 report(stderr, _("couldn't time-check the run-control file\n"));
924 /* this builds the host list */
925 if ((st = prc_parse_file(rcfile, !versioninfo)) != 0)
927 * FIXME: someday, send notification mail here if backgrounded.
928 * Right now, that can happen if the user changes the rcfile
929 * while the fetchmail is running in background. Do similarly
930 * for the other exit() calls in this function.
934 if ((implicitmode = (optind >= argc)))
936 for (ctl = querylist; ctl; ctl = ctl->next)
940 for (; optind < argc; optind++)
942 flag predeclared = FALSE;
945 * If hostname corresponds to a host known from the rc file,
946 * simply declare it active. Otherwise synthesize a host
947 * record from command line and defaults
949 for (ctl = querylist; ctl; ctl = ctl->next)
950 if (!strcmp(ctl->server.pollname, argv[optind])
951 || str_in_list(&ctl->server.akalist, argv[optind], TRUE))
953 /* Is this correct? */
954 if (predeclared && outlevel == O_VERBOSE)
955 fprintf(stderr,_("Warning: multiple mentions of host %s in config file\n"),argv[optind]);
963 * Allocate and link record without copying in
964 * command-line args; we'll do that with the optmerge
967 ctl = hostalloc((struct query *)NULL);
969 ctl->server.pollname = xstrdup(argv[optind]);
971 ctl->server.lead_server = (struct hostdata *)NULL;
976 * If there's a defaults record, merge it and lose it.
978 if (querylist && strcmp(querylist->server.pollname, "defaults") == 0)
980 for (ctl = querylist->next; ctl; ctl = ctl->next)
981 optmerge(ctl, querylist, FALSE);
982 querylist = querylist->next;
985 /* don't allow a defaults record after the first */
986 for (ctl = querylist; ctl; ctl = ctl->next)
987 if (ctl != querylist && strcmp(ctl->server.pollname, "defaults") == 0)
990 /* use localhost if we never fetch the FQDN of this host */
991 fetchmailhost = "localhost";
993 /* here's where we override globals */
995 run.logfile = cmd_run.logfile;
997 run.idfile = cmd_run.idfile;
998 /* do this before the keep/fetchall test below, otherwise -d0 may fail */
999 if (cmd_run.poll_interval >= 0)
1000 run.poll_interval = cmd_run.poll_interval;
1001 if (cmd_run.invisible)
1002 run.invisible = cmd_run.invisible;
1003 if (cmd_run.use_syslog)
1004 run.use_syslog = (cmd_run.use_syslog == FLAG_TRUE);
1005 if (cmd_run.postmaster)
1006 run.postmaster = cmd_run.postmaster;
1007 if (cmd_run.bouncemail)
1008 run.bouncemail = cmd_run.bouncemail;
1010 /* check and daemon options are not compatible */
1011 if (check_only && run.poll_interval)
1012 run.poll_interval = 0;
1014 /* merge in wired defaults, do sanity checks and prepare internal fields */
1015 for (ctl = querylist; ctl; ctl = ctl->next)
1017 ctl->wedged = FALSE;
1019 if (configdump || (ctl->active && !(implicitmode && ctl->server.skip)))
1021 /* merge in defaults */
1022 optmerge(ctl, &def_opts, FALSE);
1024 /* force command-line options */
1025 optmerge(ctl, &cmd_opts, TRUE);
1027 /* this code enables flags to be turned off */
1028 #define DEFAULT(flag, dflt) if (flag == FLAG_TRUE)\
1030 else if (flag == FLAG_FALSE)\
1034 DEFAULT(ctl->keep, FALSE);
1035 DEFAULT(ctl->fetchall, FALSE);
1036 DEFAULT(ctl->flush, FALSE);
1037 DEFAULT(ctl->rewrite, TRUE);
1038 DEFAULT(ctl->stripcr, (ctl->mda != (char *)NULL));
1039 DEFAULT(ctl->forcecr, FALSE);
1040 DEFAULT(ctl->pass8bits, FALSE);
1041 DEFAULT(ctl->dropstatus, FALSE);
1042 DEFAULT(ctl->dropdelivered, FALSE);
1043 DEFAULT(ctl->mimedecode, FALSE);
1044 DEFAULT(ctl->idle, FALSE);
1045 DEFAULT(ctl->server.dns, TRUE);
1046 DEFAULT(ctl->server.uidl, FALSE);
1048 DEFAULT(ctl->use_ssl, FALSE);
1050 DEFAULT(ctl->server.checkalias, FALSE);
1054 * DNS support is required for some protocols. We used to
1055 * do this unconditionally, but it made fetchmail excessively
1056 * vulnerable to misconfigured DNS setups.
1058 * If we're using ETRN, the smtp hunt list is the list of
1059 * systems we're polling on behalf of; these have to be
1060 * fully-qualified domain names. The default for this list
1061 * should be the FQDN of localhost.
1063 * If we're using Kerberos for authentication, we need
1064 * the FQDN in order to generate capability keys.
1066 if (ctl->server.protocol == P_ETRN
1067 || ctl->server.preauthenticate == A_KERBEROS_V4
1068 || ctl->server.preauthenticate == A_KERBEROS_V5)
1069 if (strcmp(fetchmailhost, "localhost") == 0)
1070 fetchmailhost = host_fqdn();
1073 * Make sure we have a nonempty host list to forward to.
1076 save_str(&ctl->smtphunt, fetchmailhost, FALSE);
1078 /* if `user' doesn't name a real local user, try to run as root */
1079 if ((pw = getpwnam(user)) == (struct passwd *)NULL)
1082 ctl->uid = pw->pw_uid; /* for local delivery via MDA */
1083 if (!ctl->localnames) /* for local delivery via SMTP */
1084 save_str_pair(&ctl->localnames, user, NULL);
1086 #if !defined(HAVE_GETHOSTBYNAME) || !defined(HAVE_RES_SEARCH)
1087 /* can't handle multidrop mailboxes unless we can do DNS lookups */
1088 if (ctl->localnames && ctl->localnames->next && ctl->server.dns)
1090 ctl->server.dns = FALSE;
1091 report(stderr, _("fetchmail: warning: no DNS available to check multidrop fetches from %s\n"), ctl->server.pollname);
1093 #endif /* !HAVE_GETHOSTBYNAME || !HAVE_RES_SEARCH */
1097 * Compute the true name of the mailserver host.
1098 * There are two clashing cases here:
1100 * (1) The poll name is a label, possibly on one of several
1101 * poll configurations for the same host. In this case
1102 * the `via' option will be present and give the true name.
1104 * (2) The poll name is the true one, the via name is
1105 * localhost. This is going to be typical for ssh-using
1108 * We're going to assume the via name is true unless it's
1111 if (ctl->server.via && strcmp(ctl->server.via, "localhost"))
1112 ctl->server.queryname = xstrdup(ctl->server.via);
1114 ctl->server.queryname = xstrdup(ctl->server.pollname);
1117 /* If either the pollname or vianame are "hesiod" we want to
1118 lookup the user's hesiod pobox host */
1120 if (!strcasecmp(ctl->server.queryname, "hesiod")) {
1121 struct hes_postoffice *hes_p;
1122 hes_p = hes_getmailhost(ctl->remotename);
1123 if (hes_p != NULL && strcmp(hes_p->po_type, "POP") == 0) {
1124 free(ctl->server.queryname);
1125 ctl->server.queryname = xstrdup(hes_p->po_host);
1126 if (ctl->server.via)
1127 free(ctl->server.via);
1128 ctl->server.via = xstrdup(hes_p->po_host);
1131 _("couldn't find HESIOD pobox for %s\n"),
1138 * We may have to canonicalize the server truename for later use.
1139 * Do this just once for each lead server, if necessary, in order
1140 * to minimize DNS round trips.
1142 if (ctl->server.lead_server)
1144 char *leadname = ctl->server.lead_server->truename;
1146 /* prevent core dump from ill-formed or duplicate entry */
1149 report(stderr, _("Lead server has no name.\n"));
1153 ctl->server.truename = xstrdup(leadname);
1155 #ifdef HAVE_GETHOSTBYNAME
1156 else if (!configdump)
1158 if (ctl->server.preauthenticate==A_KERBEROS_V4 ||
1159 ctl->server.preauthenticate==A_KERBEROS_V5 ||
1160 (ctl->server.dns && MULTIDROP(ctl)))
1162 struct hostent *namerec;
1164 /* compute the canonical name of the host */
1166 namerec = gethostbyname(ctl->server.queryname);
1167 if (namerec == (struct hostent *)NULL)
1170 _("couldn't find canonical DNS name of %s\n"),
1171 ctl->server.pollname);
1172 ctl->server.truename = xstrdup(ctl->server.queryname);
1173 ctl->server.trueaddr = NULL;
1176 ctl->server.truename=xstrdup((char *)namerec->h_name);
1178 #endif /* HAVE_GETHOSTBYNAME */
1180 #ifdef HAVE_GETHOSTBYNAME
1181 struct hostent *namerec;
1183 /* <fetchmail@mail.julianhaight.com>
1184 Get the host's IP, so we can report it like this:
1186 Received: from hostname [10.0.0.1]
1188 do we actually need to gethostbyname to find the IP?
1189 it seems like it would be faster to do this later, when
1190 we are actually resolving the hostname for a connection,
1191 but I ain't that smart, so I don't know where to make
1195 namerec = gethostbyname(ctl->server.queryname);
1196 if (namerec == (struct hostent *)NULL)
1199 _("couldn't find canonical DNS name of %s\n"),
1200 ctl->server.pollname);
1204 ctl->server.truename=xstrdup((char *)namerec->h_name);
1205 ctl->server.trueaddr=xmalloc(namerec->h_length);
1206 memcpy(ctl->server.trueaddr,
1207 namerec->h_addr_list[0],
1211 ctl->server.truename = xstrdup(ctl->server.queryname);
1212 #endif /* HAVE_GETHOSTBYNAME */
1216 /* if no folders were specified, set up the null one as default */
1217 if (!ctl->mailboxes)
1218 save_str(&ctl->mailboxes, (char *)NULL, 0);
1220 /* maybe user overrode timeout on command line? */
1221 if (ctl->server.timeout == -1)
1222 ctl->server.timeout = CLIENT_TIMEOUT;
1226 if (ctl->server.port < 0)
1228 (void) fprintf(stderr,
1229 _("%s configuration invalid, port number cannot be negative\n"),
1230 ctl->server.pollname);
1233 if (ctl->server.protocol == P_RPOP && ctl->server.port >= 1024)
1235 (void) fprintf(stderr,
1236 _("%s configuration invalid, RPOP requires a privileged port\n"),
1237 ctl->server.pollname);
1240 if (ctl->listener == LMTP_MODE)
1244 for (idp = ctl->smtphunt; idp; idp = idp->next)
1248 if (!(cp = strrchr(idp->id, '/')) ||
1249 (atoi(++cp) == SMTP_PORT))
1251 (void) fprintf(stderr,
1252 _("%s configuration invalid, LMTP can't use default SMTP port\n"),
1253 ctl->server.pollname);
1258 #endif /* !INET6_ENABLE */
1261 * "I beg to you, have mercy on the week minds like myself."
1262 * wrote Pehr Anderson. Your petition is granted.
1264 if (ctl->fetchall && ctl->keep && run.poll_interval && !nodetach)
1266 (void) fprintf(stderr,
1267 _("Both fetchall and keep on in daemon mode is a mistake!\n"));
1274 /* initialize UID handling */
1275 if (!versioninfo && (st = prc_filecheck(run.idfile, !versioninfo)) != 0)
1278 initialize_saved_lists(querylist, run.idfile);
1279 #endif /* POP3_ENABLE */
1282 * If the user didn't set a last-resort user to get misaddressed
1283 * multidrop mail, set an appropriate default here.
1285 if (!run.postmaster)
1287 if (getuid()) /* ordinary user */
1288 run.postmaster = user;
1290 run.postmaster = "postmaster";
1293 return(implicitmode);
1296 static void terminate_poll(int sig)
1297 /* to be executed at the end of a poll cycle */
1300 * Close all SMTP delivery sockets. For optimum performance
1301 * we'd like to hold them open til end of run, but (1) this
1302 * loses if our poll interval is longer than the MTA's inactivity
1303 * timeout, and (2) some MTAs (like smail) don't deliver after
1304 * each message, but rather queue up mail and wait to actually
1305 * deliver it until the input socket is closed.
1307 * Sending SMTP QUIT on signal is theoretically nice, but led to a
1308 * subtle bug. If fetchmail was terminated by signal while it was
1309 * shipping message text, it would hang forever waiting for a
1310 * command acknowledge. In theory we could enable the QUIT
1311 * only outside of the message send. In practice, we don't
1312 * care. All mailservers hang up on a dropped TCP/IP connection
1317 report(stdout, _("terminated with signal %d\n"), sig);
1322 /* terminate all SMTP connections cleanly */
1323 for (ctl = querylist; ctl; ctl = ctl->next)
1324 if (ctl->smtp_socket != -1)
1326 SMTP_quit(ctl->smtp_socket);
1327 SockClose(ctl->smtp_socket);
1328 ctl->smtp_socket = -1;
1334 * Update UID information at end of each poll, rather than at end
1335 * of run, because that way we don't lose all UIDL information since
1336 * the beginning of time if fetchmail crashes.
1339 write_saved_lists(querylist, run.idfile);
1340 #endif /* POP3_ENABLE */
1343 static void terminate_run(int sig)
1344 /* to be executed on normal or signal-induced termination */
1348 terminate_poll(sig);
1351 * Craig Metz, the RFC1938 one-time-password guy, points out:
1352 * "Remember that most kernels don't zero pages before handing them to the
1353 * next process and many kernels share pages between user and kernel space.
1354 * You'd be very surprised what you can find from a short program to do a
1355 * malloc() and then dump the contents of the pages you got. By zeroing
1356 * the secrets at end of run (earlier if you can), you make sure the next
1357 * guy can't get the password/pass phrase."
1359 * Right you are, Craig!
1361 for (ctl = querylist; ctl; ctl = ctl->next)
1363 memset(ctl->password, '\0', strlen(ctl->password));
1365 #if !defined(HAVE_ATEXIT) && !defined(HAVE_ON_EXIT)
1369 if (activecount == 0)
1372 exit(successes ? PS_SUCCESS : querystatus);
1376 * Sequence of protocols to try when autoprobing, most capable to least.
1378 static const int autoprobe[] =
1382 #endif /* IMAP_ENABLE */
1385 #endif /* POP3_ENABLE */
1388 #endif /* POP2_ENABLE */
1391 static int query_host(struct query *ctl)
1392 /* perform fetch transaction with single host */
1397 * If we're syslogging the progress messages are automatically timestamped.
1398 * Force timestamping if we're going to a logfile.
1400 if (outlevel >= O_VERBOSE || (run.logfile && outlevel > O_SILENT))
1402 report(stdout, _("%s querying %s (protocol %s) at %s\n"),
1404 ctl->server.pollname,
1405 showproto(ctl->server.protocol),
1408 switch (ctl->server.protocol) {
1410 for (i = 0; i < sizeof(autoprobe)/sizeof(autoprobe[0]); i++)
1412 ctl->server.protocol = autoprobe[i];
1413 if ((st = query_host(ctl)) == PS_SUCCESS || st == PS_NOMAIL || st == PS_AUTHFAIL || st == PS_LOCKBUSY || st == PS_SMTP)
1416 ctl->server.protocol = P_AUTO;
1420 return(doPOP2(ctl));
1422 report(stderr, _("POP2 support is not configured.\n"));
1423 return(PS_PROTOCOL);
1424 #endif /* POP2_ENABLE */
1430 return(doPOP3(ctl));
1432 report(stderr, _("POP3 support is not configured.\n"));
1433 return(PS_PROTOCOL);
1434 #endif /* POP3_ENABLE */
1438 case P_IMAP_CRAM_MD5:
1444 return(doIMAP(ctl));
1446 report(stderr, _("IMAP support is not configured.\n"));
1447 return(PS_PROTOCOL);
1448 #endif /* IMAP_ENABLE */
1451 report(stderr, _("ETRN support is not configured.\n"));
1452 return(PS_PROTOCOL);
1454 #ifdef HAVE_GETHOSTBYNAME
1455 return(doETRN(ctl));
1457 report(stderr, _("Cannot support ETRN without gethostbyname(2).\n"));
1458 return(PS_PROTOCOL);
1459 #endif /* HAVE_GETHOSTBYNAME */
1460 #endif /* ETRN_ENABLE */
1462 report(stderr, _("unsupported protocol selected.\n"));
1463 return(PS_PROTOCOL);
1467 static void dump_params (struct runctl *runp,
1468 struct query *querylist, flag implicit)
1469 /* display query parameters in English */
1473 if (runp->poll_interval)
1474 printf(_("Poll interval is %d seconds\n"), runp->poll_interval);
1476 printf(_("Logfile is %s\n"), runp->logfile);
1477 if (strcmp(runp->idfile, IDFILE_NAME))
1478 printf(_("Idfile is %s\n"), runp->idfile);
1479 #if defined(HAVE_SYSLOG)
1480 if (runp->use_syslog)
1481 printf(_("Progress messages will be logged via syslog\n"));
1483 if (runp->invisible)
1484 printf(_("Fetchmail will masquerade and will not generate Received\n"));
1486 printf(_("Fetchmail will show progress dots even in logfiles\n"));
1487 if (runp->postmaster)
1488 printf(_("Fetchmail will forward misaddressed multidrop messages to %s.\n"),
1491 if (!runp->bouncemail)
1492 printf(_("Fetchmail will direct error mail to the postmaster.\n"));
1493 else if (outlevel >= O_VERBOSE)
1494 printf(_("Fetchmail will direct error mail to the sender.\n"));
1496 for (ctl = querylist; ctl; ctl = ctl->next)
1498 if (!ctl->active || (implicit && ctl->server.skip))
1501 printf(_("Options for retrieving from %s@%s:\n"),
1502 ctl->remotename, visbuf(ctl->server.pollname));
1504 if (ctl->server.via && (ctl->server.protocol != P_ETRN))
1505 printf(_(" Mail will be retrieved via %s\n"), ctl->server.via);
1507 if (ctl->server.interval)
1508 printf(_(" Poll of this server will occur every %d intervals.\n"),
1509 ctl->server.interval);
1510 if (ctl->server.truename)
1511 printf(_(" True name of server is %s.\n"), ctl->server.truename);
1512 if (ctl->server.skip || outlevel >= O_VERBOSE)
1513 printf(_(" This host %s be queried when no host is specified.\n"),
1514 ctl->server.skip ? _("will not") : _("will"));
1516 * Don't poll for password when there is one or when using the ETRN
1517 * or IMAP-GSS protocol
1519 /* ETRN, IMAP_GSS, and IMAP_K4 do not need a password, so skip this */
1520 if ( (ctl->server.protocol != P_ETRN)
1522 && (ctl->server.protocol != P_IMAP_GSS)
1524 && (ctl->server.protocol != P_IMAP_K4) ) {
1526 printf(_(" Password will be prompted for.\n"));
1527 else if (outlevel >= O_VERBOSE)
1529 if (ctl->server.protocol == P_APOP)
1530 printf(_(" APOP secret = \"%s\".\n"),
1531 visbuf(ctl->password));
1532 else if (ctl->server.protocol == P_RPOP)
1533 printf(_(" RPOP id = \"%s\".\n"),
1534 visbuf(ctl->password));
1536 printf(_(" Password = \"%s\".\n"),
1537 visbuf(ctl->password));
1541 if (ctl->server.protocol == P_POP3
1543 && ctl->server.service && !strcmp(ctl->server.service, KPOP_PORT)
1544 #else /* INET6_ENABLE */
1545 && ctl->server.port == KPOP_PORT
1546 #endif /* INET6_ENABLE */
1547 && (ctl->server.preauthenticate == A_KERBEROS_V4 ||
1548 ctl->server.preauthenticate == A_KERBEROS_V5))
1549 printf(_(" Protocol is KPOP with Kerberos %s authentication"),
1550 ctl->server.preauthenticate == A_KERBEROS_V5 ? "V" : "IV");
1552 printf(_(" Protocol is %s"), showproto(ctl->server.protocol));
1554 if (ctl->server.service)
1555 printf(_(" (using service %s)"), ctl->server.service);
1556 if (ctl->server.netsec)
1557 printf(_(" (using network security options %s)"), ctl->server.netsec);
1558 #else /* INET6_ENABLE */
1559 if (ctl->server.port)
1560 printf(_(" (using port %d)"), ctl->server.port);
1561 #endif /* INET6_ENABLE */
1562 else if (outlevel >= O_VERBOSE)
1563 printf(_(" (using default port)"));
1564 if (ctl->server.uidl && (ctl->server.protocol != P_ETRN))
1565 printf(_(" (forcing UIDL use)"));
1568 if (ctl->server.preauthenticate == A_KERBEROS_V4)
1569 printf(_(" Kerberos V4 preauthentication enabled.\n"));
1570 else if (ctl->server.preauthenticate == A_KERBEROS_V5)
1571 printf(_(" Kerberos V5 preauthentication enabled.\n"));
1572 else if (ctl->server.preauthenticate == A_SSH)
1573 printf(_(" End-to-end encryption assumed.\n"));
1576 printf(" SSL encrypted sessions enabled.\n");
1578 if (ctl->server.timeout > 0)
1579 printf(_(" Server nonresponse timeout is %d seconds"), ctl->server.timeout);
1580 if (ctl->server.timeout == CLIENT_TIMEOUT)
1581 printf(_(" (default).\n"));
1585 if (ctl->server.protocol != P_ETRN) {
1586 if (!ctl->mailboxes->id)
1587 printf(_(" Default mailbox selected.\n"));
1592 printf(_(" Selected mailboxes are:"));
1593 for (idp = ctl->mailboxes; idp; idp = idp->next)
1594 printf(" %s", idp->id);
1597 printf(_(" %s messages will be retrieved (--all %s).\n"),
1598 ctl->fetchall ? _("All") : _("Only new"),
1599 ctl->fetchall ? "on" : "off");
1600 printf(_(" Fetched messages %s be kept on the server (--keep %s).\n"),
1601 ctl->keep ? _("will") : _("will not"),
1602 ctl->keep ? "on" : "off");
1603 printf(_(" Old messages %s be flushed before message retrieval (--flush %s).\n"),
1604 ctl->flush ? _("will") : _("will not"),
1605 ctl->flush ? "on" : "off");
1606 printf(_(" Rewrite of server-local addresses is %s (--norewrite %s).\n"),
1607 ctl->rewrite ? _("enabled") : _("disabled"),
1608 ctl->rewrite ? "off" : "on");
1609 printf(_(" Carriage-return stripping is %s (stripcr %s).\n"),
1610 ctl->stripcr ? _("enabled") : _("disabled"),
1611 ctl->stripcr ? "on" : "off");
1612 printf(_(" Carriage-return forcing is %s (forcecr %s).\n"),
1613 ctl->forcecr ? _("enabled") : _("disabled"),
1614 ctl->forcecr ? "on" : "off");
1615 printf(_(" Interpretation of Content-Transfer-Encoding is %s (pass8bits %s).\n"),
1616 ctl->pass8bits ? _("disabled") : _("enabled"),
1617 ctl->pass8bits ? "on" : "off");
1618 printf(_(" MIME decoding is %s (mimedecode %s).\n"),
1619 ctl->mimedecode ? _("enabled") : _("disabled"),
1620 ctl->mimedecode ? "on" : "off");
1621 printf(_(" Idle after poll is %s (idle %s).\n"),
1622 ctl->idle ? _("enabled") : _("disabled"),
1623 ctl->idle ? "on" : "off");
1624 printf(_(" Nonempty Status lines will be %s (dropstatus %s)\n"),
1625 ctl->dropstatus ? _("discarded") : _("kept"),
1626 ctl->dropstatus ? "on" : "off");
1627 printf(_(" Delivered-To lines will be %s (dropdelivered %s)\n"),
1628 ctl->dropdelivered ? _("discarded") : _("kept"),
1629 ctl->dropdelivered ? "on" : "off");
1630 if (NUM_NONZERO(ctl->limit))
1632 if (NUM_NONZERO(ctl->limit))
1633 printf(_(" Message size limit is %d octets (--limit %d).\n"),
1634 ctl->limit, ctl->limit);
1635 else if (outlevel >= O_VERBOSE)
1636 printf(_(" No message size limit (--limit 0).\n"));
1637 if (run.poll_interval > 0)
1638 printf(_(" Message size warning interval is %d seconds (--warnings %d).\n"),
1639 ctl->warnings, ctl->warnings);
1640 else if (outlevel >= O_VERBOSE)
1641 printf(_(" Size warnings on every poll (--warnings 0).\n"));
1643 if (NUM_NONZERO(ctl->fetchlimit))
1644 printf(_(" Received-message limit is %d (--fetchlimit %d).\n"),
1645 ctl->fetchlimit, ctl->fetchlimit);
1646 else if (outlevel >= O_VERBOSE)
1647 printf(_(" No received-message limit (--fetchlimit 0).\n"));
1648 if (NUM_NONZERO(ctl->batchlimit))
1649 printf(_(" SMTP message batch limit is %d.\n"), ctl->batchlimit);
1650 else if (outlevel >= O_VERBOSE)
1651 printf(_(" No SMTP message batch limit (--batchlimit 0).\n"));
1652 if (ctl->server.protocol != P_ETRN)
1654 if (NUM_NONZERO(ctl->expunge))
1655 printf(_(" Deletion interval between expunges forced to %d (--expunge %d).\n"), ctl->expunge, ctl->expunge);
1656 else if (outlevel >= O_VERBOSE)
1657 printf(_(" No forced expunges (--expunge 0).\n"));
1661 printf(_(" Messages will be appended to %s as BSMTP\n"), visbuf(ctl->bsmtp));
1662 else if (ctl->mda && (ctl->server.protocol != P_ETRN))
1663 printf(_(" Messages will be delivered with \"%s\".\n"), visbuf(ctl->mda));
1668 printf(_(" Messages will be %cMTP-forwarded to:"), ctl->listener);
1669 for (idp = ctl->smtphunt; idp; idp = idp->next)
1671 printf(" %s", idp->id);
1672 if (!idp->val.status.mark)
1673 printf(_(" (default)"));
1676 if (ctl->smtpaddress)
1677 printf(_(" Host part of MAIL FROM line will be %s\n"),
1680 if (ctl->server.protocol != P_ETRN)
1682 if (ctl->antispam != (struct idlist *)NULL)
1686 printf(_(" Recognized listener spam block responses are:"));
1687 for (idp = ctl->antispam; idp; idp = idp->next)
1688 printf(" %d", idp->val.status.num);
1691 else if (outlevel >= O_VERBOSE)
1692 printf(_(" Spam-blocking disabled\n"));
1694 if (ctl->preconnect)
1695 printf(_(" Server connection will be brought up with \"%s\".\n"),
1696 visbuf(ctl->preconnect));
1697 else if (outlevel >= O_VERBOSE)
1698 printf(_(" No pre-connection command.\n"));
1699 if (ctl->postconnect)
1700 printf(_(" Server connection will be taken down with \"%s\".\n"),
1701 visbuf(ctl->postconnect));
1702 else if (outlevel >= O_VERBOSE)
1703 printf(_(" No post-connection command.\n"));
1704 if (ctl->server.protocol != P_ETRN) {
1705 if (!ctl->localnames)
1706 printf(_(" No localnames declared for this host.\n"));
1712 for (idp = ctl->localnames; idp; idp = idp->next)
1715 if (count > 1 || ctl->wildcard)
1716 printf(_(" Multi-drop mode: "));
1718 printf(_(" Single-drop mode: "));
1720 printf(_("%d local name(s) recognized.\n"), count);
1721 if (outlevel >= O_VERBOSE)
1723 for (idp = ctl->localnames; idp; idp = idp->next)
1725 printf("\t%s -> %s\n", idp->id, idp->val.id2);
1727 printf("\t%s\n", idp->id);
1729 fputs("\t*\n", stdout);
1732 if (count > 1 || ctl->wildcard)
1734 printf(_(" DNS lookup for multidrop addresses is %s.\n"),
1735 ctl->server.dns ? _("enabled") : _("disabled"));
1736 if (ctl->server.dns)
1738 printf(_(" Server aliases will be compared with multidrop addresses by "));
1739 if (ctl->server.checkalias)
1740 printf(_("IP address.\n"));
1742 printf(_("name.\n"));
1744 if (ctl->server.envelope == STRING_DISABLED)
1745 printf(_(" Envelope-address routing is disabled\n"));
1748 printf(_(" Envelope header is assumed to be: %s\n"),
1749 ctl->server.envelope ? ctl->server.envelope:_("Received"));
1750 if (ctl->server.envskip > 1 || outlevel >= O_VERBOSE)
1751 printf(_(" Number of envelope header to be parsed: %d\n"),
1752 ctl->server.envskip);
1753 if (ctl->server.qvirtual)
1754 printf(_(" Prefix %s will be removed from user id\n"),
1755 ctl->server.qvirtual);
1756 else if (outlevel >= O_VERBOSE)
1757 printf(_(" No prefix stripping\n"));
1760 if (ctl->server.akalist)
1764 printf(_(" Predeclared mailserver aliases:"));
1765 for (idp = ctl->server.akalist; idp; idp = idp->next)
1766 printf(" %s", idp->id);
1769 if (ctl->server.localdomains)
1773 printf(_(" Local domains:"));
1774 for (idp = ctl->server.localdomains; idp; idp = idp->next)
1775 printf(" %s", idp->id);
1781 #if defined(linux) || defined(__FreeBSD__)
1782 if (ctl->server.interface)
1783 printf(_(" Connection must be through interface %s.\n"), ctl->server.interface);
1784 else if (outlevel >= O_VERBOSE)
1785 printf(_(" No interface requirement specified.\n"));
1786 if (ctl->server.monitor)
1787 printf(_(" Polling loop will monitor %s.\n"), ctl->server.monitor);
1788 else if (outlevel >= O_VERBOSE)
1789 printf(_(" No monitor interface specified.\n"));
1792 if (ctl->server.plugin)
1793 printf(_(" Server connections will be made via plugin %s (--plugin %s).\n"), ctl->server.plugin, ctl->server.plugin);
1794 else if (outlevel >= O_VERBOSE)
1795 printf(_(" No plugin command specified.\n"));
1796 if (ctl->server.plugout)
1797 printf(_(" Listener connections will be made via plugout %s (--plugout %s).\n"), ctl->server.plugout, ctl->server.plugout);
1798 else if (outlevel >= O_VERBOSE)
1799 printf(_(" No plugout command specified.\n"));
1801 if (ctl->server.protocol > P_POP2 && (ctl->server.protocol != P_ETRN))
1804 printf(_(" No UIDs saved from this host.\n"));
1810 for (idp = ctl->oldsaved; idp; idp = idp->next)
1813 printf(_(" %d UIDs saved.\n"), count);
1814 if (outlevel >= O_VERBOSE)
1815 for (idp = ctl->oldsaved; idp; idp = idp->next)
1816 printf("\t%s\n", idp->id);
1820 if (ctl->properties)
1821 printf(_(" Pass-through properties \"%s\".\n"),
1822 visbuf(ctl->properties));
1826 /* fetchmail.c ends here */