mount.zfs: canonicalize mount point for mtab
Canonicalize the mount point passed to the mount.zfs helper. This way a clean path is always added to mtab which ensures the umount can properly locate and remove the entry. Test case: $ mkdir /mnt/foo $ mount -t zfs zpool/foo /mnt/../mnt/foo//// $ umount /mnt/foo $ cat /etc/mtab | grep zpool/foo zpool/foo /mnt/../mnt/foo//// zfs rw 0 0 Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov> Closes #573
This commit is contained in:
parent
54602c3771
commit
33364b15d3
|
@ -311,7 +311,8 @@ main(int argc, char **argv)
|
||||||
char mntopts[MNT_LINE_MAX] = { '\0' };
|
char mntopts[MNT_LINE_MAX] = { '\0' };
|
||||||
char badopt[MNT_LINE_MAX] = { '\0' };
|
char badopt[MNT_LINE_MAX] = { '\0' };
|
||||||
char mtabopt[MNT_LINE_MAX] = { '\0' };
|
char mtabopt[MNT_LINE_MAX] = { '\0' };
|
||||||
char *dataset, *mntpoint;
|
char mntpoint[PATH_MAX];
|
||||||
|
char *dataset;
|
||||||
unsigned long mntflags = 0, zfsflags = 0, remount = 0;
|
unsigned long mntflags = 0, zfsflags = 0, remount = 0;
|
||||||
int sloppy = 0, fake = 0, verbose = 0, nomtab = 0, zfsutil = 0;
|
int sloppy = 0, fake = 0, verbose = 0, nomtab = 0, zfsutil = 0;
|
||||||
int error, c;
|
int error, c;
|
||||||
|
@ -367,7 +368,13 @@ main(int argc, char **argv)
|
||||||
}
|
}
|
||||||
|
|
||||||
dataset = parse_dataset(argv[0]);
|
dataset = parse_dataset(argv[0]);
|
||||||
mntpoint = argv[1];
|
|
||||||
|
/* canonicalize the mount point */
|
||||||
|
if (realpath(argv[1], mntpoint) == NULL) {
|
||||||
|
(void) fprintf(stderr, gettext("filesystem '%s' cannot be "
|
||||||
|
"mounted due to a canonicalization failure.\n"), dataset);
|
||||||
|
return (MOUNT_SYSERR);
|
||||||
|
}
|
||||||
|
|
||||||
/* validate mount options and set mntflags */
|
/* validate mount options and set mntflags */
|
||||||
error = parse_options(mntopts, &mntflags, &zfsflags, sloppy,
|
error = parse_options(mntopts, &mntflags, &zfsflags, sloppy,
|
||||||
|
|
Loading…
Reference in New Issue