aboutsummaryrefslogtreecommitdiffstats
path: root/fetchmail.c
diff options
context:
space:
mode:
Diffstat (limited to 'fetchmail.c')
-rw-r--r--fetchmail.c66
1 files changed, 27 insertions, 39 deletions
diff --git a/fetchmail.c b/fetchmail.c
index 15cf8a0e..5b59db47 100644
--- a/fetchmail.c
+++ b/fetchmail.c
@@ -128,7 +128,6 @@ char **argv;
prc_mergeoptions(servername, &cmd_opts, &def_opts, hostp);
strcpy(hostp->servername, servername);
parseMDAargs(hostp);
- hostp->lastid[0] = '\0';
hostp->next = hostlist;
hostlist = hostp;
@@ -146,6 +145,12 @@ char **argv;
strcat(tmpbuf, user);
}
+ /* initialize UID handling */
+ if ((st = prc_filecheck(idfile)) != 0)
+ exit(st);
+ else
+ initialize_saved_lists(hostlist, idfile);
+
/* perhaps we just want to check options? */
if (versioninfo) {
printf("Taking options from command line and %s\n", rcfile);
@@ -206,23 +211,6 @@ char **argv;
return(PS_EXCLUDE);
}
- /* let's get stored message IDs from previous transactions */
- if ((st = prc_filecheck(idfile)) != 0) {
- return (st);
- } else if ((tmpfp = fopen(idfile, "r")) != (FILE *)NULL) {
- char buf[POPBUFSIZE+1], host[HOSTLEN+1], id[IDLEN+1];
-
- while (fgets(buf, POPBUFSIZE, tmpfp) != (char *)NULL) {
- if ((st = sscanf(buf, "%s %s\n", host, id)) == 2) {
- for (hostp = hostlist; hostp; hostp = hostp->next) {
- if (strcmp(host, hostp->servername) == 0)
- strcpy(hostp->lastid, id);
- }
- }
- }
- fclose(tmpfp);
- }
-
/* pick up interactively any passwords we need but don't have */
for (hostp = hostlist; hostp; hostp = hostp->next)
if (!(implicitmode && hostp->skip) && !hostp->password[0])
@@ -259,7 +247,10 @@ char **argv;
do {
for (hostp = hostlist; hostp; hostp = hostp->next) {
if (!implicitmode || !hostp->skip)
+ {
popstatus = query_host(hostp);
+ update_uid_lists(hostp);
+ }
}
sleep(poll_interval);
@@ -274,28 +265,12 @@ char **argv;
}
void termhook(int sig)
+/* to be executed on normal or signal-induced termination */
{
- FILE *tmpfp;
- int idcount = 0;
-
if (sig != 0)
fprintf(stderr, "terminated with signal %d\n", sig);
- for (hostp = hostlist; hostp; hostp = hostp->next) {
- if (hostp->lastid[0])
- idcount++;
- }
-
- /* write updated last-seen IDs */
- if (!idcount)
- unlink(idfile);
- else if ((tmpfp = fopen(idfile, "w")) != (FILE *)NULL) {
- for (hostp = hostlist; hostp; hostp = hostp->next) {
- if (hostp->lastid[0])
- fprintf(tmpfp, "%s %s\n", hostp->servername, hostp->lastid);
- }
- fclose(tmpfp);
- }
+ write_saved_lists(hostlist, idfile);
unlink(lockfile);
exit(popstatus);
@@ -478,8 +453,22 @@ struct hostrec *queryctl;
else
printf(" Text retrieved per message will be at most %d bytes.\n",
linelimit);
- if (queryctl->lastid[0])
- printf(" ID of last message retrieved %s\n", queryctl->lastid);
+ if (queryctl->protocol > P_POP2)
+ if (!queryctl->saved)
+ printf(" No UIDs saved from this host.\n");
+ else
+ {
+ struct idlist *idp;
+ int count = 0;
+
+ for (idp = hostp->saved; idp; idp = idp->next)
+ ++count;
+
+ printf(" %d UIDs saved.\n", count);
+ if (outlevel == O_VERBOSE)
+ for (idp = hostp->saved; idp; idp = idp->next)
+ fprintf(stderr, "\t%s %s\n", hostp->servername, idp->id);
+ }
}
/*********************************************************************
@@ -688,4 +677,3 @@ struct hostrec *queryctl;
}
-