summaryrefslogtreecommitdiffstats
path: root/sbin/mount
diff options
context:
space:
mode:
authorjh <jh@FreeBSD.org>2012-01-16 19:34:21 +0000
committerjh <jh@FreeBSD.org>2012-01-16 19:34:21 +0000
commitae73284c1a1116d89c84235929df10421a348b30 (patch)
tree54d0a2f2ed01c217587bf7b24aec11a7fbcadd97 /sbin/mount
parent5a45f730a5625608124e818a7be2c3dbd2d20512 (diff)
downloadFreeBSD-src-ae73284c1a1116d89c84235929df10421a348b30.zip
FreeBSD-src-ae73284c1a1116d89c84235929df10421a348b30.tar.gz
Change checkpath() to not exit on error. This is a prerequisite for
fixing the mount(8) "failok" option. PR: 163668 Reviewed by: Garrett Cooper, delphij (previous version)
Diffstat (limited to 'sbin/mount')
-rw-r--r--sbin/mount/getmntopts.c12
-rw-r--r--sbin/mount/mntopts.h2
-rw-r--r--sbin/mount/mount.c5
-rw-r--r--sbin/mount/mount_fs.c5
4 files changed, 17 insertions, 7 deletions
diff --git a/sbin/mount/getmntopts.c b/sbin/mount/getmntopts.c
index 194b3df..3503060 100644
--- a/sbin/mount/getmntopts.c
+++ b/sbin/mount/getmntopts.c
@@ -124,16 +124,20 @@ rmslashes(char *rrpin, char *rrpout)
*rrpout = '\0';
}
-void
+int
checkpath(const char *path, char *resolved)
{
struct stat sb;
if (realpath(path, resolved) != NULL && stat(resolved, &sb) == 0) {
- if (!S_ISDIR(sb.st_mode))
- errx(EX_USAGE, "%s: not a directory", resolved);
+ if (!S_ISDIR(sb.st_mode)) {
+ errno = ENOTDIR;
+ return (1);
+ }
} else
- errx(EX_USAGE, "%s: %s", resolved, strerror(errno));
+ return (1);
+
+ return (0);
}
void
diff --git a/sbin/mount/mntopts.h b/sbin/mount/mntopts.h
index 2903d55..86a350f 100644
--- a/sbin/mount/mntopts.h
+++ b/sbin/mount/mntopts.h
@@ -93,7 +93,7 @@ struct mntopt {
void getmntopts(const char *, const struct mntopt *, int *, int *);
void rmslashes(char *, char *);
-void checkpath(const char *, char resolved_path[]);
+int checkpath(const char *, char resolved_path[]);
extern int getmnt_silent;
void build_iovec(struct iovec **iov, int *iovlen, const char *name, void *val, size_t len);
void build_iovec_argf(struct iovec **iov, int *iovlen, const char *name, const char *fmt, ...);
diff --git a/sbin/mount/mount.c b/sbin/mount/mount.c
index cf142e4..ca81795 100644
--- a/sbin/mount/mount.c
+++ b/sbin/mount/mount.c
@@ -539,7 +539,10 @@ mountfs(const char *vfstype, const char *spec, const char *name, int flags,
static struct cpa mnt_argv;
/* resolve the mountpoint with realpath(3) */
- (void)checkpath(name, mntpath);
+ if (checkpath(name, mntpath) != 0) {
+ warn("%s", mntpath);
+ return (1);
+ }
name = mntpath;
if (mntopts == NULL)
diff --git a/sbin/mount/mount_fs.c b/sbin/mount/mount_fs.c
index 526d493..4c58857 100644
--- a/sbin/mount/mount_fs.c
+++ b/sbin/mount/mount_fs.c
@@ -118,7 +118,10 @@ mount_fs(const char *vfstype, int argc, char *argv[])
dev = argv[0];
dir = argv[1];
- (void)checkpath(dir, mntpath);
+ if (checkpath(dir, mntpath) != 0) {
+ warn("%s", mntpath);
+ return (1);
+ }
(void)rmslashes(dev, dev);
build_iovec(&iov, &iovlen, "fstype", fstype, (size_t)-1);
OpenPOWER on IntegriCloud