libutil: Use O_CLOEXEC for internal file descriptors from open().

This commit is contained in:
Jilles Tjoelker 2013-08-28 21:10:37 +00:00
parent 319a31ea18
commit d1d4d95209
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=255007
5 changed files with 12 additions and 9 deletions

View File

@ -98,7 +98,7 @@ auth_cat(const char *file)
int fd, count;
char buf[BUFSIZ];
if ((fd = open(file, O_RDONLY)) < 0)
if ((fd = open(file, O_RDONLY | O_CLOEXEC)) < 0)
return 0;
while ((count = read(fd, buf, sizeof(buf))) > 0)
(void)write(fileno(stdout), buf, count);

View File

@ -239,7 +239,7 @@ login_getclassbyname(char const *name, const struct passwd *pwd)
break; /* Don't retry default on 'me' */
if (i == 0)
r = -1;
else if ((r = open(login_dbarray[0], O_RDONLY)) >= 0)
else if ((r = open(login_dbarray[0], O_RDONLY | O_CLOEXEC)) >= 0)
close(r);
/*
* If there's at least one login class database,

View File

@ -73,7 +73,7 @@ pidfile_read(const char *path, pid_t *pidptr)
char buf[16], *endptr;
int error, fd, i;
fd = open(path, O_RDONLY);
fd = open(path, O_RDONLY | O_CLOEXEC);
if (fd == -1)
return (errno);

View File

@ -137,7 +137,7 @@ quota_open(struct fstab *fs, int quotatype, int openflags)
goto error;
}
qf->accmode = openflags & O_ACCMODE;
if ((qf->fd = open(qf->qfname, qf->accmode)) < 0 &&
if ((qf->fd = open(qf->qfname, qf->accmode|O_CLOEXEC)) < 0 &&
(openflags & O_CREAT) != O_CREAT)
goto error;
/* File open worked, so process it */
@ -168,7 +168,8 @@ quota_open(struct fstab *fs, int quotatype, int openflags)
/* not reached */
}
/* open failed, but O_CREAT was specified, so create a new file */
if ((qf->fd = open(qf->qfname, O_RDWR|O_CREAT|O_TRUNC, 0)) < 0)
if ((qf->fd = open(qf->qfname, O_RDWR|O_CREAT|O_TRUNC|O_CLOEXEC, 0)) <
0)
goto error;
qf->wordsize = 64;
memset(&dqh, 0, sizeof(dqh));
@ -534,7 +535,8 @@ quota_convert(struct quotafile *qf, int wordsize)
free(newqf);
return (-1);
}
if ((newqf->fd = open(qf->qfname, O_RDWR|O_CREAT|O_TRUNC, 0)) < 0) {
if ((newqf->fd = open(qf->qfname, O_RDWR|O_CREAT|O_TRUNC|O_CLOEXEC,
0)) < 0) {
serrno = errno;
goto error;
}

View File

@ -76,7 +76,8 @@ uu_lock(const char *tty_name)
pid);
(void)snprintf(lckname, sizeof(lckname), _PATH_UUCPLOCK LOCKFMT,
tty_name);
if ((tmpfd = creat(lcktmpname, 0664)) < 0)
if ((tmpfd = open(lcktmpname, O_CREAT | O_TRUNC | O_WRONLY | O_CLOEXEC,
0664)) < 0)
GORET(0, UU_LOCK_CREAT_ERR);
for (i = 0; i < MAXTRIES; i++) {
@ -88,7 +89,7 @@ uu_lock(const char *tty_name)
* check to see if the process holding the lock
* still exists
*/
if ((fd = open(lckname, O_RDONLY)) < 0)
if ((fd = open(lckname, O_RDONLY | O_CLOEXEC)) < 0)
GORET(1, UU_LOCK_OPEN_ERR);
if ((pid_old = get_pid (fd, &err)) == -1)
@ -132,7 +133,7 @@ uu_lock_txfr(const char *tty_name, pid_t pid)
snprintf(lckname, sizeof(lckname), _PATH_UUCPLOCK LOCKFMT, tty_name);
if ((fd = open(lckname, O_RDWR)) < 0)
if ((fd = open(lckname, O_RDWR | O_CLOEXEC)) < 0)
return UU_LOCK_OWNER_ERR;
if (get_pid(fd, &err) != getpid())
err = UU_LOCK_OWNER_ERR;