MFC: sbin/mount/mount.c 1.80

Resolve the mount point's path with realpath(2) before checking if file
system is mounted. This prevevents duplicated mounts.

The change I made against the original patch is to fall back to the given
path on realpath(2) failure instead of exiting with an error.

Submitted by:	Andreas Kohn <andreas@syndrom23.de>
PR:		bin/89782
This commit is contained in:
pjd 2006-01-24 15:27:25 +00:00
parent ce4fb5cac7
commit 2bb373ae84

View File

@ -335,14 +335,21 @@ ismounted(fs, mntbuf, mntsize)
struct statfs *mntbuf;
int mntsize;
{
char realfsfile[PATH_MAX];
int i;
if (fs->fs_file[0] == '/' && fs->fs_file[1] == '\0')
/* the root file system can always be remounted */
return (0);
/* The user may have specified a symlink in fstab, resolve the path */
if (realpath(fs->fs_file, realfsfile) == NULL) {
/* Cannot resolve the path, use original one */
strlcpy(realfsfile, fs->fs_file, sizeof(realfsfile));
}
for (i = mntsize - 1; i >= 0; --i)
if (strcmp(fs->fs_file, mntbuf[i].f_mntonname) == 0 &&
if (strcmp(realfsfile, mntbuf[i].f_mntonname) == 0 &&
(!isremountable(fs->fs_vfstype) ||
strcmp(fs->fs_spec, mntbuf[i].f_mntfromname) == 0))
return (1);