projects
/
unix-history
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
tags
|
clone url
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
fixes for problems causing mail to be both sent and rejected
[unix-history]
/
usr
/
src
/
usr.sbin
/
sendmail
/
src
/
parseaddr.c
diff --git
a/usr/src/usr.sbin/sendmail/src/parseaddr.c
b/usr/src/usr.sbin/sendmail/src/parseaddr.c
index
7f265cd
..
8d11206
100644
(file)
--- a/
usr/src/usr.sbin/sendmail/src/parseaddr.c
+++ b/
usr/src/usr.sbin/sendmail/src/parseaddr.c
@@
-7,7
+7,7
@@
*/
#ifndef lint
*/
#ifndef lint
-static char sccsid[] = "@(#)parseaddr.c 6.
48
(Berkeley) %G%";
+static char sccsid[] = "@(#)parseaddr.c 6.
50
(Berkeley) %G%";
#endif /* not lint */
#include "sendmail.h"
#endif /* not lint */
#include "sendmail.h"
@@
-167,9
+167,13
@@
parseaddr(addr, a, copyf, delim, delimptr, e)
if (queueup)
{
if (queueup)
{
+ char *msg = "Transient parse error -- message queued for future delivery";
+
if (tTd(20, 1))
printf("parseaddr: queuing message\n");
if (tTd(20, 1))
printf("parseaddr: queuing message\n");
- message("Transient parse error -- message queued for future delivery");
+ message(msg);
+ if (e->e_message == NULL)
+ e->e_message = msg;
a->q_flags |= QQUEUEUP;
}
a->q_flags |= QQUEUEUP;
}
@@
-243,9
+247,11
@@
allocaddr(a, copyf, paddr, delimptr)
{
char savec = *delimptr;
{
char savec = *delimptr;
- *delimptr = '\0';
+ if (savec != '\0')
+ *delimptr = '\0';
a->q_paddr = newstr(paddr);
a->q_paddr = newstr(paddr);
- *delimptr = savec;
+ if (savec != '\0')
+ *delimptr = savec;
}
else
a->q_paddr = paddr;
}
else
a->q_paddr = paddr;
@@
-379,6
+385,7
@@
prescan(addr, delim, pvpbuf, delimptr)
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 */
@@
-392,6
+399,7
@@
prescan(addr, delim, pvpbuf, delimptr)
state = ATM;
c = NOCHAR;
p = addr;
state = ATM;
c = NOCHAR;
p = addr;
+ CurEnv->e_to = p;
if (tTd(22, 11))
{
printf("prescan: ");
if (tTd(22, 11))
{
printf("prescan: ");
@@
-414,6
+422,7
@@
prescan(addr, delim, pvpbuf, delimptr)
usrerr("553 Address too long");
if (delimptr != NULL)
*delimptr = p;
usrerr("553 Address too long");
if (delimptr != NULL)
*delimptr = p;
+ CurEnv->e_to = saveto;
return (NULL);
}
return (NULL);
}
@@
-492,6
+501,7
@@
prescan(addr, delim, pvpbuf, delimptr)
usrerr("553 Unbalanced ')'");
if (delimptr != NULL)
*delimptr = p;
usrerr("553 Unbalanced ')'");
if (delimptr != NULL)
*delimptr = p;
+ CurEnv->e_to = saveto;
return (NULL);
}
else
return (NULL);
}
else
@@
-508,6
+518,7
@@
prescan(addr, delim, pvpbuf, delimptr)
usrerr("553 Unbalanced '>'");
if (delimptr != NULL)
*delimptr = p;
usrerr("553 Unbalanced '>'");
if (delimptr != NULL)
*delimptr = p;
+ CurEnv->e_to = saveto;
return (NULL);
}
anglecnt--;
return (NULL);
}
anglecnt--;
@@
-561,6
+572,7
@@
prescan(addr, delim, pvpbuf, delimptr)
syserr("553 prescan: too many tokens");
if (delimptr != NULL)
*delimptr = p;
syserr("553 prescan: too many tokens");
if (delimptr != NULL)
*delimptr = p;
+ CurEnv->e_to = saveto;
return (NULL);
}
*avp++ = tok;
return (NULL);
}
*avp++ = tok;
@@
-575,6
+587,7
@@
prescan(addr, delim, pvpbuf, delimptr)
printf("prescan==>");
printav(av);
}
printf("prescan==>");
printav(av);
}
+ CurEnv->e_to = saveto;
if (av[0] == NULL)
return (NULL);
return (av);
if (av[0] == NULL)
return (NULL);
return (av);