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
This commit was manufactured by cvs2svn to create tag 'FreeBSD-release/1.1'.
[unix-history]
/
usr.sbin
/
sendmail
/
src
/
envelope.c
diff --git
a/usr.sbin/sendmail/src/envelope.c
b/usr.sbin/sendmail/src/envelope.c
index
2987957
..
14656f0
100644
(file)
--- a/
usr.sbin/sendmail/src/envelope.c
+++ b/
usr.sbin/sendmail/src/envelope.c
@@
-33,11
+33,10
@@
*/
#ifndef lint
*/
#ifndef lint
-static char sccsid[] = "@(#)envelope.c 8.
17 (Berkeley) 10/31/93
";
+static char sccsid[] = "@(#)envelope.c 8.
33 (Berkeley) 2/10/94
";
#endif /* not lint */
#include "sendmail.h"
#endif /* not lint */
#include "sendmail.h"
-#include <sys/time.h>
#include <pwd.h>
/*
#include <pwd.h>
/*
@@
-110,7
+109,7
@@
dropenvelope(e)
{
printf("dropenvelope %x: id=", e);
xputs(e->e_id);
{
printf("dropenvelope %x: id=", e);
xputs(e->e_id);
- printf(", flags=
%o
\n", e->e_flags);
+ printf(", flags=
0x%x
\n", e->e_flags);
if (tTd(50, 10))
{
printf("sendq=");
if (tTd(50, 10))
{
printf("sendq=");
@@
-123,10
+122,13
@@
dropenvelope(e)
return;
#ifdef LOG
return;
#ifdef LOG
+ if (LogLevel > 4 && bitset(EF_LOGSENDER, e->e_flags))
+ logsender(e, NULL);
if (LogLevel > 84)
if (LogLevel > 84)
- syslog(LOG_DEBUG, "dropenvelope, id=%s, flags=
%o
, pid=%d",
+ syslog(LOG_DEBUG, "dropenvelope, id=%s, flags=
0x%x
, pid=%d",
id, e->e_flags, getpid());
#endif /* LOG */
id, e->e_flags, getpid());
#endif /* LOG */
+ e->e_flags &= ~EF_LOGSENDER;
/* post statistics */
poststats(StatFile);
/* post statistics */
poststats(StatFile);
@@
-214,6
+216,7
@@
dropenvelope(e)
(void) sendtolist(e->e_receiptto, NULLADDR, &rlist, e);
(void) returntosender("Return receipt", rlist, FALSE, e);
(void) sendtolist(e->e_receiptto, NULLADDR, &rlist, e);
(void) returntosender("Return receipt", rlist, FALSE, e);
+ e->e_flags &= ~EF_SENDRECEIPT;
}
/*
}
/*
@@
-272,9
+275,6
@@
dropenvelope(e)
(void) xfclose(e->e_dfp, "dropenvelope", e->e_df);
e->e_dfp = NULL;
e->e_id = e->e_df = NULL;
(void) xfclose(e->e_dfp, "dropenvelope", e->e_df);
e->e_dfp = NULL;
e->e_id = e->e_df = NULL;
-#ifdef XDEBUG
- checkfd012("dropenvelope");
-#endif
}
\f
/*
** CLEARENVELOPE -- clear an envelope without unlocking
}
\f
/*
** CLEARENVELOPE -- clear an envelope without unlocking
@@
-583,7
+583,8
@@
setsender(from, e, delimptr, internal)
** Username can return errno != 0 on non-errors.
*/
** Username can return errno != 0 on non-errors.
*/
- if (bitset(EF_QUEUERUN, e->e_flags) || OpMode == MD_SMTP)
+ if (bitset(EF_QUEUERUN, e->e_flags) || OpMode == MD_SMTP ||
+ OpMode == MD_ARPAFTP || OpMode == MD_DAEMON)
realname = from;
if (realname == NULL || realname[0] == '\0')
realname = username();
realname = from;
if (realname == NULL || realname[0] == '\0')
realname = username();
@@
-619,7
+620,7
@@
setsender(from, e, delimptr, internal)
}
syslog(LOG_NOTICE,
"setsender: %s: invalid or unparseable, received from %s",
}
syslog(LOG_NOTICE,
"setsender: %s: invalid or unparseable, received from %s",
-
from
, p);
+
shortenstring(from, 83)
, p);
}
# endif /* LOG */
if (from != NULL)
}
# endif /* LOG */
if (from != NULL)
@@
-681,7
+682,7
@@
setsender(from, e, delimptr, internal)
** We have an alternate address for the sender
*/
** We have an alternate address for the sender
*/
- pvp = prescan(p, '\0', pvpbuf, NULL);
+ pvp = prescan(p, '\0', pvpbuf,
sizeof pvpbuf,
NULL);
}
# endif /* USERDB */
}
}
# endif /* USERDB */
}
@@
-692,14
+693,17
@@
setsender(from, e, delimptr, internal)
** Process passwd file entry.
*/
** Process passwd file entry.
*/
-
/* extract home directory */
/* extract home directory */
- e->e_from.q_home = newstr(pw->pw_dir);
+ if (strcmp(pw->pw_dir, "/") == 0)
+ e->e_from.q_home = newstr("");
+ else
+ e->e_from.q_home = newstr(pw->pw_dir);
define('z', e->e_from.q_home, e);
/* extract user and group id */
e->e_from.q_uid = pw->pw_uid;
e->e_from.q_gid = pw->pw_gid;
define('z', e->e_from.q_home, e);
/* extract user and group id */
e->e_from.q_uid = pw->pw_uid;
e->e_from.q_gid = pw->pw_gid;
+ e->e_from.q_flags |= QGOODUID;
/* extract full name from passwd file */
if (FullName == NULL && pw->pw_gecos != NULL &&
/* extract full name from passwd file */
if (FullName == NULL && pw->pw_gecos != NULL &&
@@
-714,12
+718,18
@@
setsender(from, e, delimptr, internal)
if (FullName != NULL && !internal)
define('x', FullName, e);
}
if (FullName != NULL && !internal)
define('x', FullName, e);
}
- else if (!internal)
+ else if (!internal
&& OpMode != MD_DAEMON
)
{
if (e->e_from.q_home == NULL)
{
if (e->e_from.q_home == NULL)
+ {
e->e_from.q_home = getenv("HOME");
e->e_from.q_home = getenv("HOME");
+ if (e->e_from.q_home != NULL &&
+ strcmp(e->e_from.q_home, "/") == 0)
+ e->e_from.q_home++;
+ }
e->e_from.q_uid = RealUid;
e->e_from.q_gid = RealGid;
e->e_from.q_uid = RealUid;
e->e_from.q_gid = RealGid;
+ e->e_from.q_flags |= QGOODUID;
}
/*
}
/*
@@
-728,7
+738,7
@@
setsender(from, e, delimptr, internal)
*/
if (pvp == NULL)
*/
if (pvp == NULL)
- pvp = prescan(from,
'\0',
pvpbuf, NULL);
+ pvp = prescan(from,
delimchar, pvpbuf, sizeof
pvpbuf, NULL);
if (pvp == NULL)
{
/* don't need to give error -- prescan did that already */
if (pvp == NULL)
{
/* don't need to give error -- prescan did that already */
@@
-738,9
+748,9
@@
setsender(from, e, delimptr, internal)
# endif
finis();
}
# endif
finis();
}
- (void) rewrite(pvp, 3, e);
- (void) rewrite(pvp, 1, e);
- (void) rewrite(pvp, 4, e);
+ (void) rewrite(pvp, 3,
0,
e);
+ (void) rewrite(pvp, 1,
0,
e);
+ (void) rewrite(pvp, 4,
0,
e);
bp = buf + 1;
cataddr(pvp, NULL, bp, sizeof buf - 2, '\0');
if (*bp == '@')
bp = buf + 1;
cataddr(pvp, NULL, bp, sizeof buf - 2, '\0');
if (*bp == '@')
@@
-753,7
+763,7
@@
setsender(from, e, delimptr, internal)
define('f', e->e_sender, e);
/* save the domain spec if this mailer wants it */
define('f', e->e_sender, e);
/* save the domain spec if this mailer wants it */
- if (
!internal &&
e->e_from.q_mailer != NULL &&
+ if (e->e_from.q_mailer != NULL &&
bitnset(M_CANONICAL, e->e_from.q_mailer->m_flags))
{
extern char **copyplist();
bitnset(M_CANONICAL, e->e_from.q_mailer->m_flags))
{
extern char **copyplist();