#include <h/mh.h>
#include <h/utils.h>
#include <fcntl.h>
-
#include <h/dropsbr.h>
#include <h/popsbr.h>
#include <h/fmt_scan.h>
#include <h/signals.h>
#include <h/tws.h>
#include <h/mts.h>
-#include <errno.h>
-#include <signal.h>
#ifndef CYRUS_SASL
# define SASLminc(a) (a)
char *maildir_copy = NULL; /* copy of mail directory because the static gets overwritten */
int nmsgs, nbytes;
- char *pass = NULL;
char *MAILHOST_env_variable;
done=inc_done;
SAVEGROUPPRIVS();
TRYDROPGROUPPRIVS();
-#ifdef LOCALE
- setlocale(LC_ALL, "");
-#endif
- invo_name = r1bindex (argv[0], '/');
-
- /* read user profile/context */
- context_read();
+ if (nmh_init(argv[0], 1)) { return 1; }
mts_init (invo_name);
arguments = getarguments (invo_name, argc, argv, 1);
* a POP server?
*/
if (inc_type == INC_POP) {
- if (user == NULL)
- user = getusername ();
- if (sasl)
- pass = getusername ();
- else
- ruserpass (host, &user, &pass);
+ struct nmh_creds creds = { 0, 0, 0 };
/*
* initialize POP connection
*/
- if (pop_init (host, port, user, pass, proxy, snoop, sasl,
- saslmech) == NOTOK)
+ nmh_get_credentials (host, user, sasl, &creds);
+ if (pop_init (host, port, creds.user, creds.password, proxy, snoop,
+ sasl, saslmech) == NOTOK)
adios (NULL, "%s", response);
/* Check if there are any messages */
else if (i == NOTOK)
chmod (audfile, m_gmprot ());
- fprintf (aud, from ? "<<inc>> %s -ms %s\n"
- : host ? "<<inc>> %s -host %s -user %s\n"
- : "<<inc>> %s\n",
- dtimenow (0), from ? from : host, user);
+ if (from)
+ fprintf (aud, "<<inc>> %s -ms %s\n", dtimenow(0), from);
+ else {
+ if (host)
+ fprintf (aud, "<<inc>> %s -host %s -user %s\n", dtimenow(0),
+ host, user);
+ else
+ fprintf (aud, "<<inc>> %s\n", dtimenow (0));
+ }
}
/* Get new format string */
adios (NULL, "unable to fdopen %s", packfile);
} else {
hghnum = msgnum = mp->hghmsg;
- /*
- * Check if we have enough message space for all the new
- * messages. If not, then realloc the folder and add enough
- * space for all new messages plus 10 additional slots.
- */
- if (mp->hghmsg + nmsgs >= mp->hghoff
- && !(mp = folder_realloc (mp, mp->lowoff, mp->hghmsg + nmsgs + 10)))
- adios (NULL, "unable to allocate folder storage");
}
for (i = 1; i <= nmsgs; i++) {
fputs (scanl, aud);
if (noisy)
fflush (stdout);
- if (!packfile) {
- clear_msg_flags (mp, msgnum);
- set_exists (mp, msgnum);
- set_unseen (mp, msgnum);
- mp->msgflags |= SEQMOD;
- }
break;
}
if (packfile) {
} else {
if (ferror(pf) || fclose (pf)) {
int e = errno;
- unlink (cp);
+ (void) m_unlink (cp);
pop_quit ();
errno = e;
adios (cp, "write error on");
scan_detect_mbox_style (in); /* the MAGIC invocation... */
hghnum = msgnum = mp->hghmsg;
for (;;) {
- /*
- * Check if we need to allocate more space for message status.
- * If so, then add space for an additional 100 messages.
- */
- if (msgnum >= mp->hghoff
- && !(mp = folder_realloc (mp, mp->lowoff, mp->hghoff + 100))) {
- advise (NULL, "unable to allocate folder storage");
- incerr = NOTOK;
- break;
- }
-
/* create scanline for new message */
switch (incerr = scan (in, msgnum + 1, msgnum + 1, nfs, width,
msgnum == hghnum && chgflag, 1, NULL, 0L, noisy)) {
fflush (stdout);
msgnum++;
- mp->hghmsg++;
- mp->nummsg++;
- if (mp->lowmsg == 0) mp->lowmsg = 1;
-
- clear_msg_flags (mp, msgnum);
- set_exists (mp, msgnum);
- set_unseen (mp, msgnum);
- mp->msgflags |= SEQMOD;
continue;
}
/* If we get here there was some sort of error from scan(),
hghnum = msgnum = mp->hghmsg;
for (i = 0; i < num_maildir_entries; i++) {
msgnum++;
- /*
- * Check if we need to allocate more space for message status.
- * If so, then add space for an additional 100 messages.
- */
- if (msgnum >= mp->hghoff
- && !(mp = folder_realloc (mp, mp->lowoff, mp->hghoff + 100))) {
- advise (NULL, "unable to allocate folder storage");
- incerr = NOTOK;
- break;
- }
sp = Maildir[i].filename;
cp = getcpy (m_name (msgnum));
break;
if (ferror(sf) || fflush(pf) || ferror(pf)) {
int e = errno;
- fclose(pf); fclose(sf); unlink(cp);
+ fclose(pf); fclose(sf); (void) m_unlink(cp);
errno = e;
adios(cp, "copy error %s -> %s", sp, cp);
}
fputs (scanl, aud);
if (noisy)
fflush (stdout);
- if (!packfile) {
- clear_msg_flags (mp, msgnum);
- set_exists (mp, msgnum);
- set_unseen (mp, msgnum);
- mp->msgflags |= SEQMOD;
- }
break;
}
if (ferror(pf) || fclose (pf)) {
int e = errno;
- unlink (cp);
+ (void) m_unlink (cp);
errno = e;
adios (cp, "write error on");
}
pf = NULL;
free (cp);
- if (trnflag && unlink (sp) == NOTOK)
+ if (trnflag && m_unlink (sp) == NOTOK)
adios (sp, "couldn't unlink");
free (sp); /* Free Maildir[i]->filename */
}
close (newfd);
else
admonish (newmail, "error zero'ing");
- unlink(map_name(newmail));
+ (void) m_unlink(map_name(newmail));
}
} else {
if (noisy)
if (msgnum == hghnum) {
admonish (NULL, "no messages incorporated");
} else {
+ /*
+ * Lock the sequence file now, and loop to set the right flags
+ * in the folder structure
+ */
+
+ struct msgs *mp2;
+ int i;
+
context_replace (pfolder, folder); /* update current folder */
+
+ if ((mp2 = folder_read(folder, 1)) == NULL) {
+ admonish(NULL, "Unable to reread folder %s", folder);
+ goto skip;
+ }
+
+ /*
+ * Shouldn't happen, but just in case ...
+ */
+
+ if (msgnum >= mp2->hghoff
+ && !(mp2 = folder_realloc (mp2, mp2->lowoff, msgnum + 1))) {
+ advise (NULL, "unable to reallocate folder storage");
+ goto skip;
+ }
+
if (chgflag)
- mp->curmsg = hghnum + 1;
- mp->hghmsg = msgnum;
- if (mp->lowmsg == 0)
- mp->lowmsg = 1;
+ mp2->curmsg = hghnum + 1;
+ mp2->hghmsg = msgnum;
+
+ if (mp2->lowmsg == 0)
+ mp2->lowmsg = 1;
if (chgflag) /* sigh... */
- seq_setcur (mp, mp->curmsg);
+ seq_setcur (mp2, mp2->curmsg);
+
+ for (i = hghnum + 1; i <= msgnum; i++) {
+ clear_msg_flags (mp2, i);
+ set_exists (mp2, i);
+ set_unseen (mp2, i);
+ }
+ mp2->msgflags |= SEQMOD;
+ seq_setunseen(mp2, 0); /* Set the Unseen-Sequence */
+ seq_save(mp2); /* Save the sequence file */
+ folder_free(mp2);
}
+skip:
/*
* unlock the mail spool
}
}
- seq_setunseen (mp, 0); /* set the Unseen-Sequence */
- seq_save (mp); /* synchronize sequences */
context_save (); /* save the context file */
done (0);
return 1;