summary |
tags |
clone url |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
ac820be)
SCCS-vsn: usr.sbin/sendmail/src/parseaddr.c 6.50
SCCS-vsn: usr.sbin/sendmail/src/srvrsmtp.c 6.52
-static char sccsid[] = "@(#)parseaddr.c 6.49 (Berkeley) %G%";
+static char sccsid[] = "@(#)parseaddr.c 6.50 (Berkeley) %G%";
#endif /* not lint */
#include "sendmail.h"
#endif /* not lint */
#include "sendmail.h"
{
char savec = *delimptr;
{
char savec = *delimptr;
+ if (savec != '\0')
+ *delimptr = '\0';
a->q_paddr = newstr(paddr);
a->q_paddr = newstr(paddr);
+ if (savec != '\0')
+ *delimptr = savec;
}
else
a->q_paddr = paddr;
}
else
a->q_paddr = paddr;
char *tok;
int state;
int newstate;
char *tok;
int state;
int newstate;
+ char *saveto = CurEnv->e_to;
static char *av[MAXATOM+1];
/* make sure error messages don't have garbage on them */
static char *av[MAXATOM+1];
/* make sure error messages don't have garbage on them */
state = ATM;
c = NOCHAR;
p = addr;
state = ATM;
c = NOCHAR;
p = addr;
if (tTd(22, 11))
{
printf("prescan: ");
if (tTd(22, 11))
{
printf("prescan: ");
usrerr("553 Address too long");
if (delimptr != NULL)
*delimptr = p;
usrerr("553 Address too long");
if (delimptr != NULL)
*delimptr = p;
usrerr("553 Unbalanced ')'");
if (delimptr != NULL)
*delimptr = p;
usrerr("553 Unbalanced ')'");
if (delimptr != NULL)
*delimptr = p;
usrerr("553 Unbalanced '>'");
if (delimptr != NULL)
*delimptr = p;
usrerr("553 Unbalanced '>'");
if (delimptr != NULL)
*delimptr = p;
return (NULL);
}
anglecnt--;
return (NULL);
}
anglecnt--;
syserr("553 prescan: too many tokens");
if (delimptr != NULL)
*delimptr = p;
syserr("553 prescan: too many tokens");
if (delimptr != NULL)
*delimptr = p;
return (NULL);
}
*avp++ = tok;
return (NULL);
}
*avp++ = tok;
printf("prescan==>");
printav(av);
}
printf("prescan==>");
printav(av);
}
if (av[0] == NULL)
return (NULL);
return (av);
if (av[0] == NULL)
return (NULL);
return (av);
-static char sccsid[] = "@(#)srvrsmtp.c 6.51 (Berkeley) %G% (with SMTP)";
+static char sccsid[] = "@(#)srvrsmtp.c 6.52 (Berkeley) %G% (with SMTP)";
-static char sccsid[] = "@(#)srvrsmtp.c 6.51 (Berkeley) %G% (without SMTP)";
+static char sccsid[] = "@(#)srvrsmtp.c 6.52 (Berkeley) %G% (without SMTP)";
#endif
#endif /* not lint */
#endif
#endif /* not lint */
define('r', protocol, e);
define('s', sendinghost, e);
initsys(e);
define('r', protocol, e);
define('s', sendinghost, e);
initsys(e);
setproctitle("%s %s: %s", e->e_id, CurHostName, inp);
/* child -- go do the processing */
setproctitle("%s %s: %s", e->e_id, CurHostName, inp);
/* child -- go do the processing */
/* no errors during parsing, but might be a duplicate */
e->e_to = p;
if (!bitset(QBADADDR, a->q_flags))
/* no errors during parsing, but might be a duplicate */
e->e_to = p;
if (!bitset(QBADADDR, a->q_flags))
message("250 Recipient ok");
message("250 Recipient ok");
else
{
/* punt -- should keep message in ADDRESS.... */
else
{
/* punt -- should keep message in ADDRESS.... */
collect(TRUE, a != NULL, e);
e->e_flags &= ~EF_FATALERRS;
if (Errors != 0)
collect(TRUE, a != NULL, e);
e->e_flags &= ~EF_FATALERRS;
if (Errors != 0)
/*
** Arrange to send to everyone.
/*
** Arrange to send to everyone.
*/
SmtpPhase = "delivery";
*/
SmtpPhase = "delivery";
+ if (nrcpts != 1 && a == NULL)
{
HoldErrs = TRUE;
e->e_errormode = EM_MAIL;
{
HoldErrs = TRUE;
e->e_errormode = EM_MAIL;
/* issue success if appropriate and reset */
if (Errors == 0 || HoldErrs)
message("250 %s Message accepted for delivery", id);
/* issue success if appropriate and reset */
if (Errors == 0 || HoldErrs)
message("250 %s Message accepted for delivery", id);
- if (bitset(EF_FATALERRS, e->e_flags))
+
+ if (bitset(EF_FATALERRS, e->e_flags) && !HoldErrs)
{
/* avoid sending back an extra message */
e->e_flags &= ~EF_FATALERRS;
{
/* avoid sending back an extra message */
e->e_flags &= ~EF_FATALERRS;
+ e->e_flags |= EF_CLRQUEUE;
+ /* from now on, we have to operate silently */
+ HoldErrs = TRUE;
+ e->e_errormode = EM_MAIL;
+
/* if we just queued, poke it */
if (a != NULL && e->e_sendmode != SM_QUEUE)
{
/* if we just queued, poke it */
if (a != NULL && e->e_sendmode != SM_QUEUE)
{
if (!Verbose && e->e_sendmode != SM_QUEUE)
dowork(id, TRUE, e);
if (!Verbose && e->e_sendmode != SM_QUEUE)
dowork(id, TRUE, e);
/* if in a child, pop back to our parent */
if (InChild)
finis();
/* if in a child, pop back to our parent */
if (InChild)
finis();