diff options
Diffstat (limited to 'fs/cifs/netmisc.c')
| -rw-r--r-- | fs/cifs/netmisc.c | 32 |
1 files changed, 1 insertions, 31 deletions
diff --git a/fs/cifs/netmisc.c b/fs/cifs/netmisc.c index 3b5a5ce882b6..00f4cff400b3 100644 --- a/fs/cifs/netmisc.c +++ b/fs/cifs/netmisc.c | |||
| @@ -132,47 +132,17 @@ static const struct smb_to_posix_error mapping_table_ERRHRD[] = { | |||
| 132 | {0, 0} | 132 | {0, 0} |
| 133 | }; | 133 | }; |
| 134 | 134 | ||
| 135 | |||
| 136 | /* if the mount helper is missing we need to reverse the 1st slash | ||
| 137 | from '/' to backslash in order to format the UNC properly for | ||
| 138 | ip address parsing and for tree connect (unless the user | ||
| 139 | remembered to put the UNC name in properly). Fortunately we do | ||
| 140 | not have to call this twice (we check for IPv4 addresses | ||
| 141 | first, so it is already converted by the time we | ||
| 142 | try IPv6 addresses */ | ||
| 143 | static int canonicalize_unc(char *cp) | ||
| 144 | { | ||
| 145 | int i; | ||
| 146 | |||
| 147 | for (i = 0; i <= 46 /* INET6_ADDRSTRLEN */ ; i++) { | ||
| 148 | if (cp[i] == 0) | ||
| 149 | break; | ||
| 150 | if (cp[i] == '\\') | ||
| 151 | break; | ||
| 152 | if (cp[i] == '/') { | ||
| 153 | cFYI(DBG2, ("change slash to \\ in malformed UNC")); | ||
| 154 | cp[i] = '\\'; | ||
| 155 | return 1; | ||
| 156 | } | ||
| 157 | } | ||
| 158 | return 0; | ||
| 159 | } | ||
| 160 | |||
| 161 | /* Convert string containing dotted ip address to binary form */ | 135 | /* Convert string containing dotted ip address to binary form */ |
| 162 | /* returns 0 if invalid address */ | 136 | /* returns 0 if invalid address */ |
| 163 | 137 | ||
| 164 | int | 138 | int |
| 165 | cifs_inet_pton(int address_family, char *cp, void *dst) | 139 | cifs_inet_pton(const int address_family, const char *cp, void *dst) |
| 166 | { | 140 | { |
| 167 | int ret = 0; | 141 | int ret = 0; |
| 168 | 142 | ||
| 169 | /* calculate length by finding first slash or NULL */ | 143 | /* calculate length by finding first slash or NULL */ |
| 170 | if (address_family == AF_INET) { | 144 | if (address_family == AF_INET) { |
| 171 | ret = in4_pton(cp, -1 /* len */, dst, '\\', NULL); | 145 | ret = in4_pton(cp, -1 /* len */, dst, '\\', NULL); |
| 172 | if (ret == 0) { | ||
| 173 | if (canonicalize_unc(cp)) | ||
| 174 | ret = in4_pton(cp, -1, dst, '\\', NULL); | ||
| 175 | } | ||
| 176 | } else if (address_family == AF_INET6) { | 146 | } else if (address_family == AF_INET6) { |
| 177 | ret = in6_pton(cp, -1 /* len */, dst , '\\', NULL); | 147 | ret = in6_pton(cp, -1 /* len */, dst , '\\', NULL); |
| 178 | } | 148 | } |
