diff options
author | Brian Behlendorf <[email protected]> | 2011-03-10 12:58:44 -0800 |
---|---|---|
committer | Brian Behlendorf <[email protected]> | 2011-03-10 12:58:44 -0800 |
commit | a6cba65ccae5a5458f9ab4ac11020716d30ea7f7 (patch) | |
tree | d7845e12daba3f52bbdec8e3cffdbf1d44a880c8 | |
parent | 3eae80100bb32140aaa76864af636ea165584446 (diff) |
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
-rw-r--r-- | cmd/mount_zfs/mount_zfs.c | 8 |
1 files 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); } |