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:
parent
ac1731fb20
commit
90742659d7
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=154512
@ -391,14 +391,21 @@ main(int argc, char *argv[])
|
|||||||
int
|
int
|
||||||
ismounted(struct fstab *fs, struct statfs *mntbuf, int mntsize)
|
ismounted(struct fstab *fs, struct statfs *mntbuf, int mntsize)
|
||||||
{
|
{
|
||||||
|
char realfsfile[PATH_MAX];
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
if (fs->fs_file[0] == '/' && fs->fs_file[1] == '\0')
|
if (fs->fs_file[0] == '/' && fs->fs_file[1] == '\0')
|
||||||
/* the root file system can always be remounted */
|
/* the root file system can always be remounted */
|
||||||
return (0);
|
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)
|
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) ||
|
(!isremountable(fs->fs_vfstype) ||
|
||||||
strcmp(fs->fs_spec, mntbuf[i].f_mntfromname) == 0))
|
strcmp(fs->fs_spec, mntbuf[i].f_mntfromname) == 0))
|
||||||
return (1);
|
return (1);
|
||||||
|
Loading…
Reference in New Issue
Block a user