summaryrefslogtreecommitdiffstats
path: root/usr.sbin/sendmail
diff options
context:
space:
mode:
Diffstat (limited to 'usr.sbin/sendmail')
-rw-r--r--usr.sbin/sendmail/src/conf.c16
-rw-r--r--usr.sbin/sendmail/src/daemon.c33
-rw-r--r--usr.sbin/sendmail/src/deliver.c35
-rw-r--r--usr.sbin/sendmail/src/domain.c5
4 files changed, 67 insertions, 22 deletions
diff --git a/usr.sbin/sendmail/src/conf.c b/usr.sbin/sendmail/src/conf.c
index 3fdde59..5e94bfa 100644
--- a/usr.sbin/sendmail/src/conf.c
+++ b/usr.sbin/sendmail/src/conf.c
@@ -33,7 +33,7 @@
*/
#ifndef lint
-static char sccsid[] = "@(#)conf.c 8.89 (Berkeley) 4/18/94";
+static char sccsid[] = "@(#)conf.c 8.89.1.3 (Berkeley) 3/7/95";
#endif /* not lint */
# include "sendmail.h"
@@ -915,7 +915,7 @@ getla()
/* Non Apollo stuff removed by Don Lewis 11/15/93 */
#ifndef lint
-static char rcsid[] = "@(#)$Id: conf.c,v 1.4 1994/08/05 09:14:29 davidg Exp $";
+static char rcsid[] = "@(#)$Id: conf.c,v 1.5 1995/02/23 00:46:30 pst Exp $";
#endif /* !lint */
#ifdef apollo
@@ -1404,8 +1404,8 @@ extern int optind, opterr;
int opterr = 1; /* if error message should be printed */
int optind = 1; /* index into parent argv vector */
#endif
-int optopt; /* character checked for validity */
-char *optarg; /* argument associated with option */
+int optopt = 0; /* character checked for validity */
+char *optarg = NULL; /* argument associated with option */
#define BADCH (int)'?'
#define EMSG ""
@@ -1545,6 +1545,9 @@ usershellok(shell)
register char *p;
extern char *getusershell();
+ if (shell == NULL || shell[0] == '\0')
+ return TRUE;
+
setusershell();
while ((p = getusershell()) != NULL)
if (strcmp(p, shell) == 0 || strcmp(p, WILDCARD_SHELL) == 0)
@@ -1555,6 +1558,9 @@ usershellok(shell)
register FILE *shellf;
char buf[MAXLINE];
+ if (shell == NULL || shell[0] == '\0')
+ return TRUE;
+
shellf = fopen(_PATH_SHELLS, "r");
if (shellf == NULL)
{
@@ -2193,6 +2199,8 @@ strtol(nptr, endptr, base)
#ifdef SOLARIS
+extern int h_errno;
+
struct hostent *
solaris_gethostbyname(name)
const char *name;
diff --git a/usr.sbin/sendmail/src/daemon.c b/usr.sbin/sendmail/src/daemon.c
index 87c6e83..17085d9 100644
--- a/usr.sbin/sendmail/src/daemon.c
+++ b/usr.sbin/sendmail/src/daemon.c
@@ -37,9 +37,9 @@
#ifndef lint
#ifdef DAEMON
-static char sccsid[] = "@(#)daemon.c 8.48.1.2 (Berkeley) 2/9/95 (with daemon mode)";
+static char sccsid[] = "@(#)daemon.c 8.48.1.4 (Berkeley) 2/28/95 (with daemon mode)";
#else
-static char sccsid[] = "@(#)daemon.c 8.48.1.2 (Berkeley) 2/9/95 (without daemon mode)";
+static char sccsid[] = "@(#)daemon.c 8.48.1.4 (Berkeley) 2/28/95 (without daemon mode)";
#endif
#endif /* not lint */
@@ -995,6 +995,8 @@ getauthinfo(fd)
int s;
int i;
EVENT *ev;
+ int nleft;
+ char ibuf[MAXNAME + 1];
#endif
static char hbuf[MAXNAME * 2 + 2];
extern char *hostnamebyanyaddr();
@@ -1030,7 +1032,7 @@ getauthinfo(fd)
}
/* create ident query */
- (void) sprintf(hbuf, "%d,%d\r\n",
+ (void) sprintf(ibuf, "%d,%d\r\n",
ntohs(RealHostAddr.sin.sin_port), ntohs(la.sin.sin_port));
/* create local address */
@@ -1068,27 +1070,34 @@ getauthinfo(fd)
}
if (tTd(9, 10))
- printf("getauthinfo: sent %s", hbuf);
+ printf("getauthinfo: sent %s", ibuf);
/* send query */
- if (write(s, hbuf, strlen(hbuf)) < 0)
+ if (write(s, ibuf, strlen(ibuf)) < 0)
goto closeident;
/* get result */
- i = read(s, hbuf, sizeof hbuf);
+ p = &ibuf[0];
+ nleft = sizeof(ibuf - 1);
+ while ((i = read(s, p, nleft)) > 0)
+ {
+ p += i;
+ nleft -= i;
+ }
(void) close(s);
clrevent(ev);
- if (i <= 0)
+ if (i < 0 || p == &ibuf[0])
goto noident;
- if (hbuf[--i] == '\n' && hbuf[--i] == '\r')
- i--;
- hbuf[++i] = '\0';
+
+ if (*--p == '\n' && *--p == '\r')
+ p--;
+ *++p = '\0';
if (tTd(9, 3))
- printf("getauthinfo: got %s\n", hbuf);
+ printf("getauthinfo: got %s\n", ibuf);
/* parse result */
- p = strchr(hbuf, ':');
+ p = strchr(ibuf, ':');
if (p == NULL)
{
/* malformed response */
diff --git a/usr.sbin/sendmail/src/deliver.c b/usr.sbin/sendmail/src/deliver.c
index 2047e1f..cce3800 100644
--- a/usr.sbin/sendmail/src/deliver.c
+++ b/usr.sbin/sendmail/src/deliver.c
@@ -33,7 +33,7 @@
*/
#ifndef lint
-static char sccsid[] = "@(#)deliver.c 8.84.1.1 (Berkeley) 2/10/95";
+static char sccsid[] = "@(#)deliver.c 8.84.1.3 (Berkeley) 3/5/95";
#endif /* not lint */
#include "sendmail.h"
@@ -1181,6 +1181,12 @@ tryhost:
extern char **environ;
extern int DtableSize;
+ if (e->e_lockfp != NULL)
+ {
+ fclose(e->e_lockfp);
+ e->e_lockfp = NULL;
+ }
+
/* child -- set up input & exec mailer */
(void) setsignal(SIGINT, SIG_IGN);
(void) setsignal(SIGHUP, SIG_IGN);
@@ -2176,7 +2182,15 @@ mailfile(filename, ctladdr, e)
{
/* child -- actually write to file */
struct stat stb;
+ struct stat fsb;
MCI mcibuf;
+ int oflags = O_WRONLY|O_APPEND;
+
+ if (e->e_lockfp != NULL)
+ {
+ fclose(e->e_lockfp);
+ e->e_lockfp = NULL;
+ }
(void) setsignal(SIGINT, SIG_DFL);
(void) setsignal(SIGHUP, SIG_DFL);
@@ -2184,15 +2198,18 @@ mailfile(filename, ctladdr, e)
(void) umask(OldUmask);
if (stat(filename, &stb) < 0)
+ {
stb.st_mode = FileMode;
+ oflags |= O_CREAT|O_EXCL;
+ }
+ else if (bitset(0111, stb.st_mode))
+ exit(EX_CANTCREAT);
mode = stb.st_mode;
/* limit the errors to those actually caused in the child */
errno = 0;
ExitStat = EX_OK;
- if (bitset(0111, stb.st_mode))
- exit(EX_CANTCREAT);
if (ctladdr != NULL)
{
/* ignore setuid and setgid bits */
@@ -2232,12 +2249,22 @@ mailfile(filename, ctladdr, e)
}
FileName = filename;
LineNumber = 0;
- f = dfopen(filename, O_WRONLY|O_CREAT|O_APPEND, FileMode);
+ f = dfopen(filename, oflags, FileMode);
if (f == NULL)
{
message("554 cannot open: %s", errstring(errno));
exit(EX_CANTCREAT);
}
+ if (fstat(fileno(f), &fsb) < 0 ||
+ !bitset(O_CREAT, oflags) &&
+ (stb.st_nlink != fsb.st_nlink ||
+ stb.st_dev != fsb.st_dev ||
+ stb.st_ino != fsb.st_ino ||
+ stb.st_uid != fsb.st_uid))
+ {
+ message("554 cannot write: file changed after open");
+ exit(EX_CANTCREAT);
+ }
bzero(&mcibuf, sizeof mcibuf);
mcibuf.mci_mailer = FileMailer;
diff --git a/usr.sbin/sendmail/src/domain.c b/usr.sbin/sendmail/src/domain.c
index bec6f21..ee761a9 100644
--- a/usr.sbin/sendmail/src/domain.c
+++ b/usr.sbin/sendmail/src/domain.c
@@ -36,9 +36,9 @@
#ifndef lint
#if NAMED_BIND
-static char sccsid[] = "@(#)domain.c 8.19 (Berkeley) 3/11/94 (with name server)";
+static char sccsid[] = "@(#)domain.c 8.19.1.1 (Berkeley) 3/6/95 (with name server)";
#else
-static char sccsid[] = "@(#)domain.c 8.19 (Berkeley) 3/11/94 (without name server)";
+static char sccsid[] = "@(#)domain.c 8.19.1.1 (Berkeley) 3/6/95 (without name server)";
#endif
#endif /* not lint */
@@ -709,6 +709,7 @@ gethostalias(host)
fname = getenv("HOSTALIASES");
if (fname == NULL || (fp = fopen(fname, "r")) == NULL)
return NULL;
+ setbuf(fp, NULL);
while (fgets(buf, sizeof buf, fp) != NULL)
{
for (p = buf; p != '\0' && !(isascii(*p) && isspace(*p)); p++)
OpenPOWER on IntegriCloud