Module Name: src
Committed By: christos
Date: Wed Sep 6 20:16:05 UTC 2023
Modified Files:
src/libexec/mail.local: mail.local.c
Log Message:
KNF, clarify/provide warning messages, set rval to fail initially and only
set to success once everything works.
To generate a diff of this commit:
cvs rdiff -u -r1.30 -r1.31 src/libexec/mail.local/mail.local.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/libexec/mail.local/mail.local.c
diff -u src/libexec/mail.local/mail.local.c:1.30 src/libexec/mail.local/mail.local.c:1.31
--- src/libexec/mail.local/mail.local.c:1.30 Wed Sep 6 04:12:09 2023
+++ src/libexec/mail.local/mail.local.c Wed Sep 6 16:16:04 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: mail.local.c,v 1.30 2023/09/06 08:12:09 shm Exp $ */
+/* $NetBSD: mail.local.c,v 1.31 2023/09/06 20:16:04 christos Exp $ */
/*-
* Copyright (c) 1990, 1993, 1994
@@ -36,7 +36,7 @@ __COPYRIGHT("@(#) Copyright (c) 1990, 19
#if 0
static char sccsid[] = "@(#)mail.local.c 8.22 (Berkeley) 6/21/95";
#else
-__RCSID("$NetBSD: mail.local.c,v 1.30 2023/09/06 08:12:09 shm Exp $");
+__RCSID("$NetBSD: mail.local.c,v 1.31 2023/09/06 20:16:04 christos Exp $");
#endif
#endif /* not lint */
@@ -125,7 +125,7 @@ main(int argc, char *argv[])
if (eval == EX_OK && rval != EX_OK)
eval = rval;
}
- exit (eval);
+ return eval;
}
static int
@@ -173,7 +173,7 @@ store(const char *from)
if ((fd = dup(fd)) == -1)
logerr(EX_OSERR, "dup failed");
(void)fclose(fp);
- return(fd);
+ return fd;
}
static bool
@@ -207,11 +207,11 @@ deliver(int fd, char *name, int lockfile
*/
if ((getpwnam_r(name, &pwres, pwbuf, sizeof(pwbuf), &pw)) != 0) {
logwarn("unable to find user %s: %s", name, strerror(errno));
- return(EX_TEMPFAIL);
+ return EX_TEMPFAIL;
}
if (pw == NULL) {
logwarn("unknown name: %s", name);
- return(EX_NOUSER);
+ return EX_NOUSER;
}
(void)snprintf(path, sizeof path, "%s/%s", _PATH_MAILDIR, name);
@@ -222,21 +222,19 @@ deliver(int fd, char *name, int lockfile
if((lfd = open(lpath, O_CREAT|O_WRONLY|O_EXCL,
S_IRUSR|S_IWUSR)) < 0) {
- logwarn("%s: %s", lpath, strerror(errno));
- return(EX_OSERR);
+ logwarn("%s: can't create: %s", lpath, strerror(errno));
+ return EX_OSERR;
}
}
if (lstat(path, &sb) == -1) {
- if (errno != ENOENT) {
- logwarn("%s: %s", path, strerror(errno));
- rval = EX_OSERR;
- goto bad;
- }
- memset(&sb, 0, sizeof(sb));
- sb.st_dev = NODEV;
+ if (errno != ENOENT) {
+ logwarn("%s: can't stat: %s", path, strerror(errno));
+ goto bad;
+ }
+ memset(&sb, 0, sizeof(sb));
+ sb.st_dev = NODEV;
} else if (badfile(path, &sb)) {
- rval = EX_OSERR;
goto bad;
}
@@ -246,57 +244,55 @@ deliver(int fd, char *name, int lockfile
if (errno != ENOENT ||
(mbfd = open(path, O_APPEND|O_CREAT|O_WRONLY|O_EXLOCK|O_EXCL,
S_IRUSR|S_IWUSR)) == -1) {
- logwarn("%s: %s", path, strerror(errno));
- rval = EX_OSERR;
+ logwarn("%s: can't create: %s", path, strerror(errno));
goto bad;
}
created = 1;
} else {
/* opened existing file, check for TOCTTOU */
if (fstat(mbfd, &nsb) == -1) {
- rval = EX_OSERR;
+ logwarn("%s: can't stat: %s", path, strerror(errno));
goto bad;
}
if (badfile(path, &nsb)) {
- rval = EX_OSERR;
goto bad;
}
/* file is not what we expected */
if (nsb.st_ino != sb.st_ino || nsb.st_dev != sb.st_dev) {
logwarn("%s: file has changed", path);
- rval = EX_OSERR;
goto bad;
}
}
if ((curoff = lseek(mbfd, 0, SEEK_END)) == (off_t)-1) {
- logwarn("%s: %s", path, strerror(errno));
- rval = EX_OSERR;
+ logwarn("%s: can't seek: %s", path, strerror(errno));
goto bad;
}
(void)snprintf(biffmsg, sizeof biffmsg, "%s@%lld\n", name,
(long long)curoff);
if (lseek(fd, 0, SEEK_SET) == (off_t)-1) {
- logwarn("temporary file: %s", strerror(errno));
- rval = EX_OSERR;
+ logwarn("can't seek: %s", strerror(errno));
goto bad;
}
while ((nr = read(fd, buf, sizeof(buf))) > 0)
for (off = 0; off < nr; off += nw)
if ((nw = write(mbfd, buf + off, nr - off)) < 0) {
- logwarn("%s: %s", path, strerror(errno));
+ logwarn("%s: can't write: %s", path,
+ strerror(errno));
goto trunc;
}
+
if (nr < 0) {
- logwarn("temporary file: %s", strerror(errno));
+ logwarn("can't read: %s", strerror(errno));
trunc: (void)ftruncate(mbfd, curoff);
- rval = EX_OSERR;
+ goto bad;
}
+ rval = EX_OK;
/*
* Set the owner and group. Historically, binmail repeated this at
* each mail delivery. We no longer do this, assuming that if the