mount: add unc option to CIFS mount (needed for Linux 3.4+)
authorMartin Santesson <martinsn@axis.com>
Tue, 15 Jan 2013 23:47:19 +0000 (00:47 +0100)
committerDenys Vlasenko <vda.linux@googlemail.com>
Tue, 15 Jan 2013 23:47:19 +0000 (00:47 +0100)
unc option for CIFS mount is mandatory after CIFS option parsing
was rewritten in Linux 3.4

Signed-off-by: Martin Santesson <martinsn@axis.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
util-linux/mount.c

index bcb298c07fe67c60b959088b8de9fae6c7561dd5..d473fd0a1bce3304dc3def72a0f0bdda32b1001b 100644 (file)
@@ -1822,10 +1822,24 @@ static int singlemount(struct mntent *mp, int ignore_busy)
 
                hostname = mp->mnt_fsname + 2;
                len = strcspn(hostname, "/\\");
-               if (len == 0 || hostname[len] == '\0')
+               if (len == 0                // 1st char is a [back]slash (IOW: empty hostname)
+                || hostname[len] == '\0'   // no [back]slash after hostname
+                || hostname[len+1] == '\0' // empty share name
+               ) {
                        goto report_error;
+               }
                c = hostname[len];
                hostname[len] = '\0';
+
+               // "unc=\\hostname\share" option is mandatory
+               // after CIFS option parsing was rewritten in Linux 3.4.
+               // Must pass it to the kernel. Must use backslashes.
+               {
+                       char *unc = xasprintf("unc=\\\\%s\\%s", hostname, hostname + len + 1);
+                       parse_mount_options(unc, &filteropts);
+                       if (ENABLE_FEATURE_CLEAN_UP) free(unc);
+               }
+
                lsa = host2sockaddr(hostname, 0);
                hostname[len] = c;
                if (!lsa)