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
MFC after:	3 days
This commit is contained in:
Pawel Jakub Dawidek 2006-01-18 11:00:34 +00:00
parent ac1731fb20
commit 90742659d7
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=154512

View File

@ -391,14 +391,21 @@ main(int argc, char *argv[])
int
ismounted(struct fstab *fs, 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);