From a6cba65ccae5a5458f9ab4ac11020716d30ea7f7 Mon Sep 17 00:00:00 2001 From: Brian Behlendorf Date: Thu, 10 Mar 2011 12:58:44 -0800 Subject: Check for trailing '/' in mount.zfs When run with a root '/' cwd the mount.zfs helper would strip not only the '/' but also the next character from the dataset name. For example, '/tank' was changed to 'ank' instead of just 'tank'. Originally, this was done for the '/tmp' cwd case where we needed to strip the '/' following the cwd. For example '/tmp/tank' needed to remove the '/tmp' cwd plus 1 character for the '/'. This change fixes the problem by checking the cwd and if it ends in a '/' it does not strip and extra character. Otherwise it will strip the next character. I believe this should only ever be true for the root directory. Closes #148 --- cmd/mount_zfs/mount_zfs.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/cmd/mount_zfs/mount_zfs.c b/cmd/mount_zfs/mount_zfs.c index 32f092199..fbb954acd 100644 --- a/cmd/mount_zfs/mount_zfs.c +++ b/cmd/mount_zfs/mount_zfs.c @@ -218,10 +218,14 @@ static char * parse_dataset(char *dataset) { char cwd[PATH_MAX]; + int len; (void) getcwd(cwd, PATH_MAX); - if (!strncmp(cwd, dataset, strlen(cwd))) - return (dataset + strlen(cwd) + 1); + len = strlen(cwd); + + /* Do not add one when cwd already ends in a trailing '/' */ + if (!strncmp(cwd, dataset, len)) + return (dataset + len + (cwd[len-1] != '/')); return (dataset); } -- cgit v1.2.3