]> err.no Git - util-linux/commitdiff
mount: don't call canonicalize(SPEC) for cifs, smbfs and nfs
authorKarel Zak <kzak@redhat.com>
Wed, 21 Nov 2007 00:46:57 +0000 (01:46 +0100)
committerKarel Zak <kzak@redhat.com>
Wed, 21 Nov 2007 00:53:51 +0000 (01:53 +0100)
When calling "mount -t smbfs //foo/bar /mnt/foo", mount.smbfs will be
called with /foo/bar if /foo/bar exists locally, and will display its
usage.

The patch also removes duplicate canonicalize() from mounted()
function.

Reported-By: Pascal Terjan <pterjan@linuxfr.org>
Signed-off-by: Karel Zak <kzak@redhat.com>
mount/mount.c

index 96776db3b9e37ffcde2737a716e659b82cbbaf9c..7e3336acbe0ad79696fb0f23007ad7d83c85959c 100644 (file)
@@ -1385,11 +1385,6 @@ mount_one (const char *spec, const char *node, const char *types,
        /* Merge the fstab and command line options.  */
        opts = append_opt(opts, cmdlineopts, NULL);
 
-       /* Handle possible LABEL= and UUID= forms of spec */
-       nspec = fsprobe_get_devname_for_mounting(spec);
-       if (nspec)
-               spec = nspec;
-
        if (types == NULL && !mounttype && !is_existing_file(spec)) {
                if (strchr (spec, ':') != NULL) {
                        types = "nfs";
@@ -1406,6 +1401,15 @@ mount_one (const char *spec, const char *node, const char *types,
                }
        }
 
+       /* Handle possible LABEL= and UUID= forms of spec */
+       if (types == NULL || (strncmp(types, "nfs", 3) &&
+                             strncmp(types, "cifs", 4) &&
+                             strncmp(types, "smbfs", 5))) {
+               nspec = fsprobe_get_devname_for_mounting(spec);
+               if (nspec)
+                       spec = nspec;
+       }
+
        /*
         * Try to mount the file system. When the exit status is EX_BG,
         * we will retry in the background. Otherwise, we're done.
@@ -1439,15 +1443,14 @@ mount_one (const char *spec, const char *node, const char *types,
 static int
 mounted (const char *spec0, const char *node0) {
        struct mntentchn *mc, *mc0;
-       char *spec, *node;
+       const char *spec, *node;
        int ret = 0;
 
        /* Handle possible UUID= and LABEL= in spec */
-       spec0 = fsprobe_get_devname(spec0);
-       if (!spec0)
+       spec = fsprobe_get_devname(spec0);
+       if (!spec)
                return ret;
 
-       spec = canonicalize(spec0);
        node = canonicalize(node0);
 
        mc0 = mtab_head();