Check for trailing '/' in mount.zfs
authorBrian Behlendorf <behlendorf1@llnl.gov>
Thu, 10 Mar 2011 20:58:44 +0000 (12:58 -0800)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Thu, 10 Mar 2011 20:58:44 +0000 (12:58 -0800)
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

index 32f0921..fbb954a 100644 (file)
@@ -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);
 }