Loading fs/cifs/cifsproto.h +1 −1 Original line number Diff line number Diff line Loading @@ -70,7 +70,7 @@ extern unsigned int smbCalcSize(struct smb_hdr *ptr); extern unsigned int smbCalcSize_LE(struct smb_hdr *ptr); extern int decode_negTokenInit(unsigned char *security_blob, int length, enum securityEnum *secType); extern int cifs_inet_pton(int, char *source, void *dst); extern int cifs_inet_pton(const int, const char *source, void *dst); extern int map_smb_to_linux_error(struct smb_hdr *smb, int logErr); extern void header_assemble(struct smb_hdr *, char /* command */ , const struct cifsTconInfo *, int /* length of Loading fs/cifs/connect.c +3 −0 Original line number Diff line number Diff line Loading @@ -1302,6 +1302,9 @@ cifs_parse_mount_options(char *options, const char *devname, "begin with // or \\\\ \n"); return 1; } value = strpbrk(vol->UNC+2, "/\\"); if (value) *value = '\\'; } else { printk(KERN_WARNING "CIFS: UNC name too long\n"); return 1; Loading fs/cifs/netmisc.c +1 −31 Original line number Diff line number Diff line Loading @@ -132,47 +132,17 @@ static const struct smb_to_posix_error mapping_table_ERRHRD[] = { {0, 0} }; /* if the mount helper is missing we need to reverse the 1st slash from '/' to backslash in order to format the UNC properly for ip address parsing and for tree connect (unless the user remembered to put the UNC name in properly). Fortunately we do not have to call this twice (we check for IPv4 addresses first, so it is already converted by the time we try IPv6 addresses */ static int canonicalize_unc(char *cp) { int i; for (i = 0; i <= 46 /* INET6_ADDRSTRLEN */ ; i++) { if (cp[i] == 0) break; if (cp[i] == '\\') break; if (cp[i] == '/') { cFYI(DBG2, ("change slash to \\ in malformed UNC")); cp[i] = '\\'; return 1; } } return 0; } /* Convert string containing dotted ip address to binary form */ /* returns 0 if invalid address */ int cifs_inet_pton(int address_family, char *cp, void *dst) cifs_inet_pton(const int address_family, const char *cp, void *dst) { int ret = 0; /* calculate length by finding first slash or NULL */ if (address_family == AF_INET) { ret = in4_pton(cp, -1 /* len */, dst, '\\', NULL); if (ret == 0) { if (canonicalize_unc(cp)) ret = in4_pton(cp, -1, dst, '\\', NULL); } } else if (address_family == AF_INET6) { ret = in6_pton(cp, -1 /* len */, dst , '\\', NULL); } Loading Loading
fs/cifs/cifsproto.h +1 −1 Original line number Diff line number Diff line Loading @@ -70,7 +70,7 @@ extern unsigned int smbCalcSize(struct smb_hdr *ptr); extern unsigned int smbCalcSize_LE(struct smb_hdr *ptr); extern int decode_negTokenInit(unsigned char *security_blob, int length, enum securityEnum *secType); extern int cifs_inet_pton(int, char *source, void *dst); extern int cifs_inet_pton(const int, const char *source, void *dst); extern int map_smb_to_linux_error(struct smb_hdr *smb, int logErr); extern void header_assemble(struct smb_hdr *, char /* command */ , const struct cifsTconInfo *, int /* length of Loading
fs/cifs/connect.c +3 −0 Original line number Diff line number Diff line Loading @@ -1302,6 +1302,9 @@ cifs_parse_mount_options(char *options, const char *devname, "begin with // or \\\\ \n"); return 1; } value = strpbrk(vol->UNC+2, "/\\"); if (value) *value = '\\'; } else { printk(KERN_WARNING "CIFS: UNC name too long\n"); return 1; Loading
fs/cifs/netmisc.c +1 −31 Original line number Diff line number Diff line Loading @@ -132,47 +132,17 @@ static const struct smb_to_posix_error mapping_table_ERRHRD[] = { {0, 0} }; /* if the mount helper is missing we need to reverse the 1st slash from '/' to backslash in order to format the UNC properly for ip address parsing and for tree connect (unless the user remembered to put the UNC name in properly). Fortunately we do not have to call this twice (we check for IPv4 addresses first, so it is already converted by the time we try IPv6 addresses */ static int canonicalize_unc(char *cp) { int i; for (i = 0; i <= 46 /* INET6_ADDRSTRLEN */ ; i++) { if (cp[i] == 0) break; if (cp[i] == '\\') break; if (cp[i] == '/') { cFYI(DBG2, ("change slash to \\ in malformed UNC")); cp[i] = '\\'; return 1; } } return 0; } /* Convert string containing dotted ip address to binary form */ /* returns 0 if invalid address */ int cifs_inet_pton(int address_family, char *cp, void *dst) cifs_inet_pton(const int address_family, const char *cp, void *dst) { int ret = 0; /* calculate length by finding first slash or NULL */ if (address_family == AF_INET) { ret = in4_pton(cp, -1 /* len */, dst, '\\', NULL); if (ret == 0) { if (canonicalize_unc(cp)) ret = in4_pton(cp, -1, dst, '\\', NULL); } } else if (address_family == AF_INET6) { ret = in6_pton(cp, -1 /* len */, dst , '\\', NULL); } Loading