diff options
author | Pavel Shilovsky <piastry@etersoft.ru> | 2011-12-26 13:58:46 -0500 |
---|---|---|
committer | Pavel Shilovsky <pshilovsky@samba.org> | 2012-07-24 13:55:05 -0400 |
commit | 2503a0dba989486c59523a947a1dcb50ad90fee9 (patch) | |
tree | 1e79a740d744cee1a1981e4d0a355303ffc9a4d2 /fs/cifs/smb2misc.c | |
parent | 68889f269b16a11866f4ec71e8177bdd0c184a3f (diff) |
CIFS: Add SMB2 support for is_path_accessible
that needs for a successful mount through SMB2 protocol.
Signed-off-by: Pavel Shilovsky <piastry@etersoft.ru>
Signed-off-by: Steve French <smfrench@gmail.com>
Diffstat (limited to 'fs/cifs/smb2misc.c')
-rw-r--r-- | fs/cifs/smb2misc.c | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/fs/cifs/smb2misc.c b/fs/cifs/smb2misc.c index 10729a74da27..eb73a136641c 100644 --- a/fs/cifs/smb2misc.c +++ b/fs/cifs/smb2misc.c | |||
@@ -230,6 +230,11 @@ smb2_get_data_area_len(int *off, int *len, struct smb2_hdr *hdr) | |||
230 | ((struct smb2_sess_setup_rsp *)hdr)->SecurityBufferLength); | 230 | ((struct smb2_sess_setup_rsp *)hdr)->SecurityBufferLength); |
231 | break; | 231 | break; |
232 | case SMB2_CREATE: | 232 | case SMB2_CREATE: |
233 | *off = le32_to_cpu( | ||
234 | ((struct smb2_create_rsp *)hdr)->CreateContextsOffset); | ||
235 | *len = le32_to_cpu( | ||
236 | ((struct smb2_create_rsp *)hdr)->CreateContextsLength); | ||
237 | break; | ||
233 | case SMB2_READ: | 238 | case SMB2_READ: |
234 | case SMB2_QUERY_INFO: | 239 | case SMB2_QUERY_INFO: |
235 | case SMB2_QUERY_DIRECTORY: | 240 | case SMB2_QUERY_DIRECTORY: |
@@ -315,3 +320,23 @@ calc_size_exit: | |||
315 | cFYI(1, "SMB2 len %d", len); | 320 | cFYI(1, "SMB2 len %d", len); |
316 | return len; | 321 | return len; |
317 | } | 322 | } |
323 | |||
324 | /* Note: caller must free return buffer */ | ||
325 | __le16 * | ||
326 | cifs_convert_path_to_utf16(const char *from, struct cifs_sb_info *cifs_sb) | ||
327 | { | ||
328 | int len; | ||
329 | const char *start_of_path; | ||
330 | __le16 *to; | ||
331 | |||
332 | /* Windows doesn't allow paths beginning with \ */ | ||
333 | if (from[0] == '\\') | ||
334 | start_of_path = from + 1; | ||
335 | else | ||
336 | start_of_path = from; | ||
337 | to = cifs_strndup_to_utf16(start_of_path, PATH_MAX, &len, | ||
338 | cifs_sb->local_nls, | ||
339 | cifs_sb->mnt_cifs_flags & | ||
340 | CIFS_MOUNT_MAP_SPECIAL_CHR); | ||
341 | return to; | ||
342 | } | ||