*/
struct idlist *idp;
const char *id_me = run.invisible ? ctl->server.truename : fetchmailhost;
- int oldphase = phase;
+ int oldphase;
char *parsed_host = NULL;
errno = 0;
for (idp = ctl->smtphunt; idp; idp = idp->next)
{
char *cp;
- char *portnum = SMTP_PORT;
+ const char *portnum = SMTP_PORT;
ctl->smtphost = idp->id; /* remember last host tried. */
if (ctl->smtphost[0]=='/')
}
static int send_bouncemail(struct query *ctl, struct msgblk *msg,
- int userclass, char *message /* should have \r\n at the end */,
+ int userclass, const char *message /* should have \r\n at the end */,
int nerrors, char *errors[])
/* bounce back an error report a la RFC 1892 */
{
char daemon_name[15 + HOSTLEN] = "MAILER-DAEMON@";
- char boundary[BUFSIZ], *bounce_to;
+ char boundary[BUFSIZ];
+ const char *bounce_to;
int sock;
static char *fqdn_of_host = NULL;
const char *md1 = "MAILER-DAEMON", *md2 = "MAILER-DAEMON@";
{
int smtperr = atoi(smtp_response);
char *responses[1];
- struct idlist *walk;
- int found = 0;
responses[0] = xstrdup(smtp_response);
* messages, which are probably in English (none of the
* MTAs I know about are internationalized).
*/
- for( walk = ctl->antispam; walk; walk = walk->next )
- if ( walk->val.status.num == smtperr )
- {
- found=1;
- break;
- }
-
- /* if (str_find(&ctl->antispam, smtperr)) */
- if ( found )
+ if (str_find(&ctl->antispam, smtperr))
{
/*
* SMTP listener explicitly refuses to deliver mail
int n, oldphase;
char *last;
+ if (!buf)
+ return -1;
+
/* The line may contain NUL characters. Find the last char to use
* -- the real line termination is the sequence "\n\0".
*/
*/
nameslen = 0;
for (idp = msg->recipients; idp; idp = idp->next)
- if ((idp->val.status.mark == XMIT_ACCEPT))
+ if (idp->val.status.mark == XMIT_ACCEPT)
nameslen += (strlen(idp->id) + 1); /* string + ' ' */
- if ((*good_addresses == 0))
+ if (*good_addresses == 0)
nameslen = strlen(run.postmaster);
names = (char *)xmalloc(nameslen + 1); /* account for '\0' */
* under all BSDs and Linux)
*/
orig_uid = getuid();
- seteuid(ctl->uid);
+ if (seteuid(ctl->uid)) {
+ report(stderr, GT_("Cannot switch effective user id to %ld: %s\n"), (long)ctl->uid, strerror(errno));
+ return PS_IOERR;
+ }
#endif /* HAVE_SETEUID */
sinkfp = popen(before, "w");
#ifdef HAVE_SETEUID
/* this will fail quietly if we didn't start as root */
- seteuid(orig_uid);
+ if (seteuid(orig_uid)) {
+ report(stderr, GT_("Cannot switch effective user id back to original %ld: %s\n"), (long)orig_uid, strerror(errno));
+ return PS_IOERR;
+ }
#endif /* HAVE_SETEUID */
if (!sinkfp)
{
*bad_addresses = *good_addresses = 0;
+ if (want_progress() && outlevel >= O_VERBOSE && !ctl->mda && !ctl->bsmtp) puts("");
+
if (ctl->bsmtp) /* dump to a BSMTP batch file */
return(open_bsmtp_sink(ctl, msg, good_addresses, bad_addresses));
/*
{
int smtp_err;
+ if (want_progress() && outlevel >= O_VERBOSE && !ctl->mda && !ctl->bsmtp) puts("");
+
if (ctl->bsmtp && sinkfp) {
int error, oerrno;
e = errno;
sinkfp = (FILE *)NULL;
}
- else
- rc = e = 0;
deal_with_sigchld(); /* Restore SIGCHLD handling to reap zombies */