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
|
||||
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);
|
||||
|
Loading…
Reference in New Issue
Block a user