summaryrefslogtreecommitdiffstats
path: root/lib/libutil
diff options
context:
space:
mode:
authorsjg <sjg@FreeBSD.org>2013-09-05 20:18:59 +0000
committersjg <sjg@FreeBSD.org>2013-09-05 20:18:59 +0000
commit62bb1062226d3ce6a2350808256a25508978352d (patch)
tree22b131dceb13c3df96da594fbaadb693504797c7 /lib/libutil
parent72ab90509b3a51ab361bf710338f2ef44a4e360d (diff)
parent04932445481c2cb89ff69a83b961bdef3d64757e (diff)
downloadFreeBSD-src-62bb1062226d3ce6a2350808256a25508978352d.zip
FreeBSD-src-62bb1062226d3ce6a2350808256a25508978352d.tar.gz
Merge from head
Diffstat (limited to 'lib/libutil')
-rw-r--r--lib/libutil/expand_number.c30
-rw-r--r--lib/libutil/login_auth.c2
-rw-r--r--lib/libutil/login_cap.c2
-rw-r--r--lib/libutil/login_times.c2
-rw-r--r--lib/libutil/pidfile.c2
-rw-r--r--lib/libutil/quotafile.c8
-rw-r--r--lib/libutil/uucplock.c7
7 files changed, 24 insertions, 29 deletions
diff --git a/lib/libutil/expand_number.c b/lib/libutil/expand_number.c
index 5d55884..24bcc39 100644
--- a/lib/libutil/expand_number.c
+++ b/lib/libutil/expand_number.c
@@ -35,31 +35,24 @@ __FBSDID("$FreeBSD$");
#include <libutil.h>
#include <stdint.h>
-/*
- * Convert an expression of the following forms to a uint64_t.
- * 1) A positive decimal number.
- * 2) A positive decimal number followed by a 'b' or 'B' (mult by 1).
- * 3) A positive decimal number followed by a 'k' or 'K' (mult by 1 << 10).
- * 4) A positive decimal number followed by a 'm' or 'M' (mult by 1 << 20).
- * 5) A positive decimal number followed by a 'g' or 'G' (mult by 1 << 30).
- * 6) A positive decimal number followed by a 't' or 'T' (mult by 1 << 40).
- * 7) A positive decimal number followed by a 'p' or 'P' (mult by 1 << 50).
- * 8) A positive decimal number followed by a 'e' or 'E' (mult by 1 << 60).
- */
int
expand_number(const char *buf, uint64_t *num)
{
+ char *endptr;
+ uintmax_t umaxval;
uint64_t number;
unsigned shift;
- char *endptr;
-
- number = strtoumax(buf, &endptr, 0);
+ int serrno;
- if (endptr == buf) {
- /* No valid digits. */
- errno = EINVAL;
+ serrno = errno;
+ errno = 0;
+ umaxval = strtoumax(buf, &endptr, 0);
+ if (umaxval > UINT64_MAX)
+ errno = ERANGE;
+ if (errno != 0)
return (-1);
- }
+ errno = serrno;
+ number = umaxval;
switch (tolower((unsigned char)*endptr)) {
case 'e':
@@ -95,7 +88,6 @@ expand_number(const char *buf, uint64_t *num)
errno = ERANGE;
return (-1);
}
-
*num = number << shift;
return (0);
}
diff --git a/lib/libutil/login_auth.c b/lib/libutil/login_auth.c
index ce9a2e4..1fc7e73 100644
--- a/lib/libutil/login_auth.c
+++ b/lib/libutil/login_auth.c
@@ -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);
diff --git a/lib/libutil/login_cap.c b/lib/libutil/login_cap.c
index 8fee760..8915d0a 100644
--- a/lib/libutil/login_cap.c
+++ b/lib/libutil/login_cap.c
@@ -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,
diff --git a/lib/libutil/login_times.c b/lib/libutil/login_times.c
index e2c7bf2..d13ed99 100644
--- a/lib/libutil/login_times.c
+++ b/lib/libutil/login_times.c
@@ -96,7 +96,7 @@ parse_lt(const char *str)
else
m.lt_start = 0;
if (*p == '-')
- p = parse_time(++p, &m.lt_end);
+ p = parse_time(p + 1, &m.lt_end);
else
m.lt_end = 1440;
diff --git a/lib/libutil/pidfile.c b/lib/libutil/pidfile.c
index 7949e9e..3a5e512 100644
--- a/lib/libutil/pidfile.c
+++ b/lib/libutil/pidfile.c
@@ -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);
diff --git a/lib/libutil/quotafile.c b/lib/libutil/quotafile.c
index 03e3de4..6b5a44d 100644
--- a/lib/libutil/quotafile.c
+++ b/lib/libutil/quotafile.c
@@ -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;
}
diff --git a/lib/libutil/uucplock.c b/lib/libutil/uucplock.c
index afbfaa4..424ac26 100644
--- a/lib/libutil/uucplock.c
+++ b/lib/libutil/uucplock.c
@@ -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;
OpenPOWER on IntegriCloud