libutil: Use O_CLOEXEC for internal file descriptors from open().
This commit is contained in:
parent
319a31ea18
commit
d1d4d95209
@ -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);
|
||||
|
@ -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,
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user