mount: add unc option to CIFS mount (needed for Linux 3.4+)

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>
This commit is contained in:
Martin Santesson 2013-01-16 00:47:19 +01:00 committed by Denys Vlasenko
parent 970aa6b5bd
commit 406ea15e2c

View 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)